当前位置:主页>销售管理软件> 列表

过程与事件处理的区别 找药品零售软件

财务软件版1楼: 先看下面的代码
program Project1;



uses
Forms,
Unit1 in ''Unit1.pas'' {Form1};



{$R *.res}



begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.OnMinimize:=Form1.myapp; //用自定义的方法取代
Application.Run;
end.



===================================



Unit Unit1;



Interface



Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, shellapi, Menus, ExtCtrls, StdCtrls, jpeg;
Const wm_nid = wm_user + 1000; //自定义消息
Type
TForm1 = Class(TForm)
Image1: TImage;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
Procedure FormDestroy(Sender: TObject);
Procedure N5Click(Sender: TObject);
Procedure myapp(send: TObject);
Procedure N1Click(Sender: TObject);
Procedure FormShow(Sender: TObject);

PRIVATE
Procedure WMNID(Var MSG: tMESSAGE); MESSAGE wm_nid; //消息处理函数
=====================================
把Procedure myapp(send: TObject);写在private部分,编译时系统提示:过程与事件类型不匹配,写在现在的位置(TFORM1的普通方法)则正确,为什么?

2楼: 写在private部分难道不是 提示 myapp未定义吗? 如药品零售软件

3楼: 如为private则其他过程无法访问,所以要是公有的。

4楼: Private是TForm1类的私有区域。TForm1的派生类和其他类都不能访问。
楼主后来放的位置是默认的public区域,和public一样,派生类及其他类都能访问。
protected区只有派生类才能访问,不过其他类可以使用欺骗技术访问。

5楼: 先看看Application.OnMinimize的声明部分
property OnMinimize: TNotifyEvent read FOnMinimize write FOnMinimize;
TNotifyEvent = procedure(Sender: TObject) of object;
可以看出给Application.OnMinimize赋值的函数必须是以下格式的
procedure 过程名称(Sender: TObject) ;
如果要在工程单元给Application.OnMinimize赋值,还必须定义该过程为全局的。

6楼: 多人接受答案了。