在德尔福;Application.MessageBox、Windows.MessageBox 或 Dialogs.MessageDlg 之间有什么区别?或者哪个更有效地使用计算机内存?
6 回答
Windows.MessageBox是WinAPI 消息框,Application.MessageBox 是它的包装器。然而 Dialogs.MessageDlg 是一个 VCL 形式。因此,如果您担心内存或线程安全,前两个可能更适合。MessageDlg OTOH 更灵活且更易于使用(当然,恕我直言)。
现在,我会考虑任务对话框(TaskDialogIndirect、TTaskDialog 或其他包装器)。
Windows MessageBox 由操作系统本地化(是、否、取消...),MessageDlg 可以手动本地化。
如果我没记错的话,Delphi VCL 消息框和 Windows 消息框之间有一个重要区别——您可以指定阻止应用程序消息被服务的标志(例如 MB_SYSTEMMODAL)。这对于显示需要“冻结”应用程序的错误很有用——即使在屏幕上,Delphi MessageDlg 仍会触发计时器事件。看:
消息框的内存使用不应该是这样的问题。我个人更喜欢 VCL 表单 (Dialogs.MessageBox),因为我可以从 Consts.pas 单元对其进行本地化。我也喜欢它,因为我可以向它添加自定义控件,例如“不再显示”的复选框和其他类似的东西。
为什么你关心消息框使用的少量内存?在编写 Delphi 应用程序时,您还应该关注许多其他事情。无论如何,据我所知,这些都是围绕 Windows MessageBox API 的瘦包装器。
它们都做同样的事情——调用 WinAPI 函数 MessageBox()。如果有的话,资源消耗的差异是最小的。如果您非常关心,您可以直接调用 MessageBox() - 只需包括“使用 Windows”。