我曾经能够使用普通的delphi按钮来做到这一点:
在第一帧我有(简化)
procedure FirstFrame.ButtonClick(Sender: TObject)
Begin
if TButton(Sender).ModalResult = mrOK then
ChildFrame.DoOKStuff
else
ChildFrame.DoCancelStuff;
ChildFrame.Free;
end;
procedure FirstFrame.ShowFranme;
begin
ChildFrame := TFrameWithButtons.Create(Owner);
ChildFrame.Parent := self;
ChildFrame.OKButton.OnClick := ButtonClick;
ChildFrame.CancelButton.OnClick := ButtonClick;
ChildFrame.Visible := True;
end;
Run Code Online (Sandbox Code Playgroud)
在Childframe中,我无需处理按钮单击...按钮单击已设置为将控制权返回到第一帧.
使用某些第三方按钮时,这偶尔会导致AV.我理解为什么 - 在第三方代码处理中的某些时候返回到现在释放的帧或按钮但是被调用的代码在第一帧...恼人地它只有99.99%的时间工作:)
帧没有发布过程.
所以我的问题是处理这种情况的正确方法是什么?
同时使用Delphi 6和Delphi 2009.
试试这个:
type
TFrameWithButtons = class(TFrame)
...
procedure CMRelease(var Message: TMessage); message CM_RELEASE;
...
end;
procedure TFrameWithButtons.CMRelease(var Message: TMessage);
begin
Free;
end;
procedure FirstFrame.ButtonClick(Sender: TObject)
Begin
if TButton(Sender).ModalResult = mrOK then
ChildFrame.DoOKStuff
else
ChildFrame.DoCancelStuff;
PostMessage(ChildFrame.Handle, CM_RELEASE, 0, 0);
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1983 次 |
| 最近记录: |