设为首页 加入收藏

TOP

【转】代码编辑器(三)-PageControl和类(二)
2017-10-10 12:06:42 】 浏览:7396
Tags:代码 编辑器 -PageControl 和类
5 CanClose := True; 6 Exit; 7 end; 8 end;
--扩展
字体设置:
在窗体上添加一个FontDialog。然后可以使用如下代码:
那么,在这里就可以这么用:
if FontDialog1.Execute then
  TRecEdit(PageControl1.Pages[PageControl1.ActivePageIndex].Controls[0]).Font := FontDialog1.Font
上面的几个可以根据自己的情况添加。
--调试
调试还是比较简单的。这里先说一下容易出问题的地方。
关闭所有
最开始的时候使用for循环,然后就有如下代码:
for i := 0 to PageControl1.PageCount - 1 do PageControl1.Pages[i].Destroy;
但是——这么做会出错。
因为i的值会变,而且PageControl1.PageCount也会变,但只能变小,而i只能变大。
所以,会出现下标越界的错误。
PageControl1.Pages[i].Destroy;
换成
PageControl1.ActivePage.Destroy;
就不会出错。
后期把保存部分添加之后,就不能直接使用Destroy了。
显然,for循环不合适。
然后是while循环,之前说ClosePageQuery为False的时候退出循环。
1 while PageControl1.PageCount > 0 do
2   if not ClosePageQuery() then
3     break;
也可以把while和if合并。
保存
保存和另存为是两回事。首先,另存为是无论文件是否是新建的,都会弹出保存对话框。
而保存就是TRecEdit的fPath是空字符串的时候,也就是文件是新建的时候弹出保存对话框。所以有:
1 pIndex := PageControl1.ActivePageIndex; 2 s := TRecEdit(PageControl1.Pages[pIndex].Controls[0]).fPath; 3 if s = '' then begin
4   if SaveDialog1.Execute then
5     TRecEdit(PageControl1.Pages[pIndex].Controls[0]).Lines.SaveToFile(SaveDialog1.FileName); 6 end else
7   if TRecEdit(PageControl1.Pages[pIndex].Controls[0]).Modified then
8       TRecEdit(PageControl1.Pages[pIndex].Controls[0]).Lines.SaveToFile(s);
实际上是if语句的嵌套。
这里很可能弄成先if xxx.Modified then然后再if s = '' then。
但这样会忽略一种情况——新建的文件没有输入任何文字,理论上会弹出保存对话框的但实际上没有,而且没有进行保存。
 
根据前面部分(不包括扩展),整理代码:
 1 unit Unit1;  2 
 3 interface
 4 
 5 uses
 6  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  7  Dialogs, Menus, StdCtrls, ComCtrls, StdActns, ActnList;  8 
 9 type
 10   TRecEdit = class(TMemo)  11   protected
 12     fPath: string;  13   end;  14 
 15   TForm1 = class(TForm)  16  PageControl1: TPageControl;  17  PopupMenu1: TPopupMenu;  18  Add1: TMenuItem;  19  ClosePage1: TMenuItem;  20  CloseAll1: TMenuItem;  21  ActionList1: TActionList;  22  FileOpen1: TFileOpen;  23  FileSaveAs1: TFileSaveAs;  24  EditCut1: TEditCut;  25  EditCopy1: TEditCopy;  26  EditPaste1: TEditPaste;  27  EditSelectAll1: TEditSelectAll;  28  EditUndo1: TEditUndo;  29  EditDelete1: TEditDelete;  30  MainMenu1: TMainMenu;  31  F1: TMenuItem;  32  E1: TMenuItem;  33  N1: TMenuItem;  34  O1: TMenuItem;  35  S1: TMenuItem;  36  SaveAs1: TMenuItem;  37  Undo1: TMenuItem;  38  N2: TMenuItem;  39  Cut1: TMenuItem;  40  Copy1: TMenuItem;  41  Paste1: TMenuItem;  42  Delete1: TMenuItem;  43  N3: TMenuItem;  44  SelectAll1: TMenuItem;  45  N4: TMenuItem;  46  C1: TMenuItem;  47  L1: TMenuItem;  48  N5: TMenuItem;  49  X1: TMenuItem;  50  SaveDialog1: TSaveDialog;  51     procedure Add1Click(Sender: TObject);  52     procedure FormCreate(Sender: TObject);  53     procedure ClosePage1Click(Sender: TObject);  54     procedure CloseAll1Click(Sender: TObject);  55     procedure FileOpen1Accept(Sender: TObject);  56     procedure N1Click(Sender: TObject);  57     procedure S1Click(Sender: TObject);  58     procedure FileSaveAs1Accept(Sender: TObject);  59     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);  60   private
 61     { Private declarations }
 62     function ClosePageQuery(pIndex: Integer): Boolean; overload;  63     function ClosePageQuery(): Boolean; overload;  64   public
 65     { Public declarations }
 66   end;  67 
 68 var
 69  Form1: TForm1;  70  n: Integer;  71 
 72 implementation
 73 
 74 {$R *.dfm}
 75 
 76 procedure TForm1.Add1Cl
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【转】Png异形窗口 下一篇【Asphyre引擎】发布了新版本V101

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目