gpt4 book ai didi

Delphi-回调错误代码

转载 作者:行者123 更新时间:2023-12-02 19:34:55 25 4
gpt4 key购买 nike

我相信我太累了,而且我不明白为什么一个小回调不起作用。我有 2 个动态创建的框架,我显示第一个框架,然后单击一下,显示第二个框架。当我完成第二帧的工作时,我想显示第一帧并释放第二帧。代码如下:

第一帧的代码:

procedure CommingBackFromFrame(aFrame:TFrame);

procedure TfraMain.ComingBackFromFrame(aFrame:TFrame);
begin
if Assigned(aFrame) then
begin
try
aFrame.Hide;
FreeAndNil(aFrame);
except on e:Exception do
//make a log
end;
Self.Show;//first frame show
end;



//code which creates the second frame
wFrm := TFrameType.Create(Application);//create the second frame
with wFrm do
begin
GoBack:=ComingBackFromFrame(wFrm);//error here
parent:=Self;
Show;
end; //with
Application.ProcessMessages;

第二帧的代码:

 TCallBack = procedure(aFrame:TFrame) of object;//callback declaration 
TFrameType = class(Tframe)
...
private
FGoBack:TCallBack;
public
property GoBack:TCallBack read FGoBack write FGoBack;//publish callback
....
//at a moment, return to frame 1

if Assigned(fgoback) then
GoBack(Self);

谁能帮我这个简单的事情吗?

最佳答案

顺便说一句,这是不好的做法 - 将对象从其自己的代码中释放出来。尝试通过 PostMessage() 通过消息处理程序来完成此操作,以确保 VCL 在释放对象之前完成所有工作。
像这样的事情:

TFrameType = class(TFrame)
protected
procedure FreeMe(var Msg TMessage) message WM_FREE_MY_FRAME;
public
procedure PostponedFree;
end;

procedure TFrameType.FreeMe(var Msg TMessage);
begin
Free;
end;

procedure TFrameType.PostponedFree;
begin
PostMessage(Self.Handle, WM_FREE_MY_FRAME, 0, 0);
end;

并调用PostponedFree。PS 代码可能不准确 - 我现在还没有启动 Delphi。抱歉。

关于Delphi-回调错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4836713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com