0

我有一个包含多个选项卡的 MDI 窗口。我想要做的是每次用户单击选项卡上的退出按钮时禁用关闭事件。但我不知道如何完成这些。谁能帮我解决这个问题?谢谢你。

这是我在上面的问题中提到的示例选项卡和退出按钮。

标签.png

这就是我到目前为止所拥有的。每次我单击退出按钮时,窗口仍然会关闭。

integer ext 
ext = MessageBox("","You are not allowed to close this tab",(Exclamation!),(OK!))

if (ext = 1) then
Open(w_main)
end if
4

3 回答 3

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

仅供参考:如果用户按下回车,最后一个参数是默认按钮

窗口有 closequery 事件,它在关闭时触发,您可以在该事件中执行处理以导致窗口不关闭。我不知道选项卡是否有类似的东西,但你可以解决这个问题,然后禁止关闭。如果您只是想告诉用户一些事情,那么只需执行 MessageBox("Message Subject", "Message Body", Exclamation!) 就不需要使用 OK!这是默认的

这是一个想法:

查看选项卡控件的单击事件。那里可能有关闭选项卡的代码。您可以添加额外的逻辑来检查权限并绕过关闭逻辑。或者,如果用户无法关闭,或者可能显示不同的图片,禁用外观 X,您可以将 ShowPicture 属性设置为 false。

于 2014-09-17T06:19:50.880 回答
0

没有办法“禁用关闭事件”,但您可以通过编写窗口的 CloseQuery 事件脚本来禁止请求的关闭。编写脚本以在您希望禁止关闭的情况下返回 1,在您希望关闭继续处理的情况下返回 0。

祝你好运。

于 2014-09-17T12:44:25.310 回答
0

这并不容易。您应该使用 user32.dll api 处理并删除、修改和绘制菜单栏。

打开全局外部函数选项卡并插入:

Function uLong GetSystemMenu(object hwnd, boolean bRevert) LIBRARY "user32.dll" Function uLong RemoveMenu(object hMenu, long nPosition, long wFlags) LIBRARY "user32.dll" Function uLong DrawMenuBar(object hwnd) LIBRARY "user32.dll"

现在:

menu = GetSystemMenu(window, false) // to disable X
RemoveMenu(menu, HF060, H0)
DrawMenuBar(window)
于 2014-11-21T10:18:01.410 回答