请教如何用TAPPLICATION的事件?(100分)

  • 主题发起人 主题发起人 钟明
  • 开始时间 开始时间

钟明

Unregistered / Unconfirmed
GUEST, unregistred user!
如何用TAPPLICATION?如:其事件ONmessage..等,在什么地方声明?
 
Type
TForm1 = class(Form)
.......
private
......
public
procedure OnAppMsg(var Msg: TMsg; var Handle: boolean);
end;

implimentation
procedure TForm1.OnAppMsg(var msg: TMsg; var Handle: boolean);
begin
....
end;

procedure TForm1.OnCreate(Sender: TObject);
begin
......
Application.OnMessage:=OnAppMsg;
......
end;

end.
 
首先要在主Form中的单元的类型声明部分,声明一个Public的过程,
然后在Implementation部分定义制革过程, 这个过程
以后就当作事件句柄用,最后在响应主form的OnCreate事件
过程中将这个过程赋给 Tapplication元件的某个事件,
程序事例见Another_eyes提供的例子.
 
此方法出现编译错误:Unsatisfied forward or external declaration:'tform1.onappmsg'!
 
产生这类编译错误的原因是你的申明部分和后面的定义不同所至
检查一下申明和定义是否一样。
注意点:
1. 这个procedure 的申明必须处于一个类中, 一般在你的form的public部分申明
2. 定义部分必须加上所属类, 如TForm1.OnAppMsg(....)
^^^^^^^^
3. 参数个数和描述方法必须一致, 如果申明里用var限制的在定义部分也一定要是var的
4. 估计你产生错误的原因1. 你的form不叫form1
2. 过程的申明未处于 form 中
3. 申明和定义的参数不匹配
检查一下.
方法肯定是正确的
 
有Tapplication控件使用十分方便!Rxlib好象有一个!
 
那么动态创建的ServerSocket的事件响应能不能也用这种方法来作了?
如OnClientRead事件.
 
chenke: 我想当然是可以的.
 
完全可以
其实event只是一个32位指针, 指向代码的入口而已。和其它内存变量一样,当然能够
读写。
 
1.在PRIVATE声明
type

TTextBox = class(TCustomControl)
private
procedure WMChar(var Message: TWMChar); message WM_CHAR;
...
end;
2.实现
procedure TTextBox.WMChar(var Message: TWMChar);

begin
if Chr(Message.CharCode) = #13 then
ProcessEnter
else
inherited;
end;
 
谢谢大家!
 
后退
顶部