6

德尔福;Application.MessageBox、Windows.MessageBox 或 Dialogs.MessageDlg 之间有什么区别?或者哪个更有效地使用计算机内存?

4

6 回答 6

11

Windows.MessageBoxWinAPI 消息框,Application.MessageBox 是它的包装器。然而 Dialogs.MessageDlg 是一个 VCL 形式。因此,如果您担心内存或线程安全,前两个可能更适合。MessageDlg OTOH 更灵活且更易于使用(当然,恕我直言)。

现在,我会考虑任务对话框(TaskDialogIndirect、TTaskDialog 或其他包装器)。

于 2009-03-27T13:06:52.587 回答
3

Windows MessageBox 由操作系统本地化(是、否、取消...),MessageDlg 可以手动本地化。

于 2009-03-27T14:19:53.207 回答
1

如果我没记错的话,Delphi VCL 消息框和 Windows 消息框之间有一个重要区别——您可以指定阻止应用程序消息被服务的标志(例如 MB_SYSTEMMODAL)。这对于显示需要“冻结”应用程序的错误很有用——即使在屏幕上,Delphi MessageDlg 仍会触发计时器事件。看:

MSDN MessageBox 的东西

于 2009-03-27T16:53:40.500 回答
1

消息框的内存使用不应该是这样的问题。我个人更喜欢 VCL 表单 (Dialogs.MessageBox),因为我可以从 Consts.pas 单元对其进行本地化。我也喜欢它,因为我可以向它添加自定义控件,例如“不再显示”的复选框和其他类似的东西。

于 2009-03-30T14:44:32.547 回答
0

为什么你关心消息框使用的少量内存?在编写 Delphi 应用程序时,您还应该关注许多其他事情。无论如何,据我所知,这些都是围绕 Windows MessageBox API 的瘦包装器。

于 2009-03-27T11:52:59.503 回答
0

它们都做同样的事情——调用 WinAPI 函数 MessageBox()。如果有的话,资源消耗的差异是最小的。如果您非常关心,您可以直接调用 MessageBox() - 只需包括“使用 Windows”。

于 2009-03-27T11:54:06.133 回答