Delphi 如何从边框图标检测关闭窗体?
我的表格中有“取消”和“确定”按钮。他们两个都做了些什么,然后称之为接近形式。如何使窗体上的[x]按钮调用Cancelclick?您可以使用窗体的OnCloseQuery事件Delphi 如何从边框图标检测关闭窗体?,delphi,delphi-2010,Delphi,Delphi 2010,我的表格中有“取消”和“确定”按钮。他们两个都做了些什么,然后称之为接近形式。如何使窗体上的[x]按钮调用Cancelclick?您可以使用窗体的OnCloseQuery事件 procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose:= true; //or not ButtonCancelClick(Self); end; 如果您的按钮设置了其modalresult
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:= true; //or not
ButtonCancelClick(Self);
end;
如果您的按钮设置了其
modalresult
属性,则它们也将调用OnCloseQuery
,此代码将不起作用。在这种情况下,请使用David的答案。如果表单以模式显示,则只需测试ModalResult
的值即可。值mrCancel表示已单击十字
我倾向于使用按钮的
ModalResult
属性来关闭表单。将确定按钮的ModalResult
设置为mrOK
,将取消按钮的mrCancel
添加到表单的公共声明中
procedure WMSysCommand(var MSG: TWMSysCommand); message WM_SYSCOMMAND;
然后添加方法
procedure TForm1.WMSYSCommand(var MSG: TWMSysCommand);
begin
if MSG.CmdType = SC_CLOSE then
begin
//Closing from border icon
end;
inherited;
end;
不,如果要检测十字上的点击,则不能使用OnClose。这只调用OnCloseQuery.Hmm,我认为当表单关闭时,
OnCloseQuery
总是会触发,即当用户通过OK或Cancel按钮关闭表单时也会触发。因此,在您的代码中,ButtonCancelClick将始终被“激发”。。。你必须使用一些额外的标志来避免这种情况。@Marjan:我刚刚检查过。同时调用OnCloseQuery和OnClose。我没料到还有其他的事情。@Rudy:OnClose并不是在所有情况下都被调用,但OnCloseQuery是。过去确实是这样,建议总是在OnCloseQuery处理程序中以“脏”(编辑)形式保存数据。但你确实是对的,两个事件都是在点击右十字时被调用的。你能给出一个没有被调用的情况吗?好的,如果在OnCloseQuery中将CanClose设置为False,当然不会,但如果不是这样?