2013-06-28 19:04:02| 分类: delphi xe4 | 标签: |举报 |字号大中小 订阅
function Clipboard: TClipboard; { Clipbrd } function Printer: TPrinter; { Printers } function Languages: TLanguages; { SysUtils } function RootSprigList: TRootSprigList; { TreeIntf } function ComClassManager: TComClassManager; { ComObj } function ThemeServices: TThemeServices; { Themes } function PropertyCategoryList: TPropertyCategoryList; { PropertyCategories } //这或许已是 Delphi 2010 中类似对象的全部.
interface ... function Clipboard: TClipboard; { 这一般在 interface 的尾部 } ... implementation ... var FClipboard: TClipboard; { 句柄变量 } ... function Clipboard: TClipboard; { 函数实现 } begin if FClipboard = nil then FClipboard := TClipboard.Create; Result := FClipboard; end; ...
Application {Forms.TApplication} Screen {Forms.TScreen} //这个两个更常用, 但它们不是函数, 的确是对象变量; 它们是在程序生存期一直存在的.
//此时, 我们已经不能使用如下代码打开窗体了: procedure TForm1.Button1Click(Sender: TObject); begin Form2.Show; { 这会出错, 因为此时 Form2 还没有建立 } end; //可以这样: procedure TForm1.Button1Click(Sender: TObject); begin Form2 := TForm2.Create(Application); Form2.Show; end; //但如果想上面这样, Form2 之后又驻留内存了, 怎么释放它呢? 难道要和 Application 一起释放吗? //我们的目的是节约内存, 能不能这样?: procedure TForm1.Button1Click(Sender: TObject); begin Form2 := TForm2.Create(Application); Form2.Show; { 但 Form2.ShowModal; 可以 } Form2.Free; end; //尝试上面的代码, 窗体刚刚显示就被释放了, 此路不通! //还是有解决方案的, 在 Form2 的 OnClose 事件中写点代码: procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; { caNone, caHide, caFree, caMinimize 分别是: 取消、隐藏、释放、最小化 } end; //这样 Form1 中的调用代码也可以简化如下: procedure TForm1.Button1Click(Sender: TObject); begin with TForm2.Create(nil) do Show; end;
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm2 = class(TForm) procedure FormClose(Sender: TObject; var Action: TCloseAction); end; function Form2: TForm2; implementation {$R *.dfm} var FForm: TForm2; function Form2: TForm2; begin if FForm = nil then FForm := TForm2.Create(Application); Result := FForm; end; procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; end.
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm2 = class(TForm) procedure FormClose(Sender: TObject; var Action: TCloseAction); end; function Form2: TForm2; implementation {$R *.dfm} function Form2: TForm2; begin Result := TForm2.Create(nil); end; procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; end.
procedure TForm1.Button1Click(Sender: TObject); begin Form2.Show; end; { 这和 Delphi 默认的区别可大了, 这里的 Form2 是个函数; 动态建立、动态释放 }
评论