delphi - 如何获取 MessageDlgPos 尺寸?
问题描述
我想将 MessageBox 放置在相对于字符串网格中的活动单元格的特定位置,这没有问题,MessageDlgPos()
除了我想防止当活动单元格靠近时框从屏幕的右侧或底部跑出右侧或底部。我需要的是一种获取盒子尺寸的方法,但我看不到获取这些尺寸的简单方法。任何人都知道如何不创建我自己的盒子?
解决方案
这些MessageDlg...()
功能不支持您的要求。在显示对话框之前,对话框的尺寸是未知的,并且您无法直接访问对话框窗口以查询/重新定位它,除非可能使用WH_CBT
来自SetWindowsHookEx()
.
话虽如此...
在启用了Visual Styles的Windows Vista+ 上Vcl.Dialogs.UseLatestCommonDialogs=true
,函数调用 Win32 API 以显示消息框。您无法控制该对话框的尺寸,因此您必须等待该对话框发出通知,然后在显示之前查询其实际尺寸,以便您可以根据需要调整其位置。但是,这些函数不提供对任何通知的访问(在内部使用的,确实有一个事件,以及其他事件)。因此,如果您想重新定位此对话框,则必须使用自定义回调函数调用自己(或者,使用 VCL 的包装器)。MessageDlg...()
TaskDialogIndirect()
TDN_DIALOG_CONSTRUCTED
MessageDlg...()
TaskDialogIndirect()
TCustomTaskDialog
OnDialogConstructed
TaskDialogIndirect()
TTaskDialog
在 pre-Vista 上,或者UseLatestCommonDialogs=false
禁用或禁用视觉样式时,这些函数会MessageDlg...()
显示一个自定义 VCL ,您可以直接调用它,然后几乎可以查询、操作和显示您想要的返回值。当你完成使用它时,一定要确保它。TForm
Vcl.Dialogs.CreateMessageDialog()
TForm
Free()
推荐阅读
- google-apps-script - 网页上显示的 Google Script 短标签
- java - 如何使用双缓冲消除闪烁(java swing)
- java - 介质尺寸的 Java 打印问题
- android - 是否可以将 Unity 游戏嵌入到 Flutter 应用程序中?
- performance - Fortran 中的高效(快速)二叉树
- android - 当我按下 textview 时应用程序崩溃
- c++ - 调用 SetWindowLongPtr 时出现未处理的异常
- python - 如何使用将服务器链接到在暴露的本地主机上运行的烧瓶应用程序
- file - 重启批处理脚本
- php - 如何通过比较值从while语句中选择特定数据?