gpt4 book ai didi

delphi - 为什么居中的 MessageDlg 会产生异常?

转载 作者:行者123 更新时间:2023-12-03 15:24:49 24 4
gpt4 key购买 nike

德尔福6。
我实现了一个以所有者表单为中心的 MessageDlg
正如 @David Heffernan 于 2011 年 1 月 6 日建议的那样。

2011 年的原始问题在这里: How to make MessageDlg centered on owner form .

居中对话框工作一次。
第一次后抛出异常。
- EAccessViolation
- 地址 00000000 处的访问冲突
- 读取地址00000000

我可能做错了什么导致这种情况?

function TEthernetNodes_form.CenteredMessageDlg(const Msg: string;
DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons;
HelpCtx: Integer): Integer;
// Open a message Dialog in the center of the owner form
var
Dialog: TForm;
begin
Result := mrNo; // Suppress linker warning
try
Dialog := CreateMessageDialog(Msg, DlgType, Buttons);
try
Self.InsertComponent(Dialog);
Dialog.Position := poOwnerFormCenter;
Result := Dialog.ShowModal
finally
Dialog.Free
end;

except on E: Exception do
begin
AddToActivityLog('Exception in CenteredMsgDlg: [' +
string(E.ClassName) + ']' +
E.Message, True, True);
//Tried "ShowMEssage" instead of AddToActivityLog here. Does not display.
end;

end;
end;

procedure TEthernetNodes_form.Button1Click(Sender: TObject);
begin
CenteredMessageDlg('Test CenteredMessageDlg.', mtConfirmation, [mbOK], 0);
end;

异常在我的事件日志中显示如下:

Exception in CenteredMsgDlg: [EAccessViolation] Access violation at  
address 00000000. Read of address 00000000

最佳答案

CreateMessageDialog 创建以应用程序为所有者的表单 - 它被添加到应用程序组件列表中。使用Self.InsertComponent(Dialog);,您可以将其添加到表单组件列表中,但不会从应用程序的组件列表中删除。

var
Dialog: TForm;
begin
Result := mrNo; // Suppress linker warning
try
Dialog := CreateMessageDialog(Msg, DlgType, Buttons);
try
Application.RemoveComponent(Dialog); // remove Dialog from Application components
Self.InsertComponent(Dialog);
Dialog.Position := poOwnerFormCenter;
Result := Dialog.ShowModal;
finally
Dialog.Free
end;

关于delphi - 为什么居中的 MessageDlg 会产生异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42423463/

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