delphi – 在由所述对象调用的事件期间销毁对象

我有一个按钮.它的OnClick事件调用一个破坏按钮的过程,但随后“线程”想要返回OnClick事件,我得到一个访问冲突.

我完全难过了!

解决方法

在完成所有代码执行后,您需要销毁该按钮.执行此操作的标准方法是将一个用户定义的消息发布到表单,并为表单提供将解释它的消息方法.例如:
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,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.

这是有效的,因为消息被放入Windows消息队列,并且直到它之前的所有内容(包括按钮当前正在响应的Click消息)完成处理后才会出现.

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...