Mas*_*ler 11
在完成所有代码执行后,您需要销毁该按钮.执行此操作的标准方法是将一个用户定义的消息发布到表单,并为表单提供将解释它的消息方法.例如:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
WM_KILLCONTROL = WM_USER + 1;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure KillControl(var message: TMessage); message WM_KILLCONTROL;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(self.Handle, WM_KILLCONTROL, 0, integer(Button1))
end;
procedure TForm1.KillControl(var message: TMessage);
var
control: TControl;
begin
control := TObject(message.LParam) as TControl;
assert(control.Owner = self);
control.Free;
end;
end.
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为消息被放入Windows消息队列,并且直到它之前的所有内容(包括按钮当前正在响应的Click消息)完成处理后才会出现.
| 归档时间: |
|
| 查看次数: |
1423 次 |
| 最近记录: |