我有一个包含多个标签的MDI窗口。我想要做的是每次用户单击选项卡上的退出按钮时禁用关闭事件。但我不知道如何完成这些。有人可以帮我这个吗?谢谢。
以下是我从上述问题中提到的示例选项卡和退出按钮。
这就是我到目前为止所拥有的。每次单击退出按钮时,窗口仍然关闭。
integer ext
ext = MessageBox("","You are not allowed to close this tab",(Exclamation!),(OK!))
if (ext = 1) then
Open(w_main)
end if
答案 0 :(得分:0)
我很惊讶您的示例代码甚至可以正常工作。 MessageBox只能以您设置的方式返回一个值。如果您正在检查MessageBox的返回代码,那么您应该将第四个参数设为YesNo!,YesNoCancel!
我认为无论谁做到这一点都不知道他们在做什么,根本没有任何意义,这个逻辑中没有选项。
您希望它成为用户可以回复的问题吗?如果是这样,那么做一些类似的事情:
integer li_rc
li_rc = Messagebox("Confirm your intentions","Do you want to close the tab?",Question!,YesNo!,2)
if li_rc = 1 then
// user clicked YES because it is the first option of YesNo!
else
// user clicked NO because it is the second option of YesNo!
end if
fyi:如果用户按下
,则最后一个参数是默认按钮该窗口具有closequery事件,该事件在关闭时触发,您可以在该事件中执行处理以使窗口不关闭。我不知道标签是否有这样的东西,但你可以解决这个问题,然后禁止关闭。如果你只是想告诉用户一些东西,那就做MessageBox(“Message Subject”,“Message Body”,Exclamation!),没有必要使用OK!这是默认的
这是一个想法:
查看选项卡控件的单击事件。那里可能有关闭标签的代码。您可以添加其他逻辑来检查权限并绕过结束逻辑。或者,如果用户无法关闭,或者可能显示不同的图片,则可以将ShowPicture属性设置为false。
答案 1 :(得分:0)
无法"禁用关闭事件"但您可以通过编写窗口的CloseQuery事件脚本来禁止请求关闭。在您想要禁止关闭的情况下将脚本返回1,对于您希望关闭继续处理的情况为0。
祝你好运。答案 2 :(得分:0)
这并不容易。 你应该处理user32.dll api并删除,修改和绘制菜单栏。
打开全局外部函数选项卡并插入:
函数uLong GetSystemMenu(object hwnd,boolean bRevert)LIBRARY “user32.dll”函数uLong RemoveMenu(对象hMenu,long nPosition, long wFlags)LIBRARY“user32.dll”函数uLong DrawMenuBar(对象 hwnd)LIBRARY“user32.dll”
现在:
menu = GetSystemMenu(window, false) // to disable X
RemoveMenu(menu, HF060, H0)
DrawMenuBar(window)