Delphi中Application.MessageBox、Windows.MessageBox和Dialogs.MessageDlg之间的区别

7
在Delphi中,Application.MessageBox、Windows.MessageBox和Dialogs.MessageDlg之间有什么区别?哪种方法使用计算机内存更有效?
6个回答

11

Windows.MessageBox是WinAPI MessageBox,Application.MessageBox是其包装器。而Dialogs.MessageDlg是一个VCL表单。因此,如果您关心内存或线程安全,前两个可能更适合。另一方面,MessageDlg更灵活、更易于使用(在我的想法中,当然是这样的)。

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


3

Windows 弹出框的文字(如“是”,“否”,“取消”等)由操作系统本地化,而 MessageDlg 则可以手动本地化。


1

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

MSDN MessageBox stuff


1

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


0
为什么你会关心消息框使用的微小内存量?当你编写 Delphi 应用程序时,有许多其他事情需要关注。无论如何,据我所知,这些都是围绕 Windows MessageBox API 的薄包装器。

我在想,我在一个项目中使用了数百次MessageBox函数。 - SimaWB
每次消息框关闭时,内存都会被回收。 - anon
@Neil:我们希望如此。说真的,如果它没有被回收,那么多年前就应该被发现了。 - sharptooth
所有的包装器 - 其实不是所有,看看我的回答吧。 :-) - Uli Gerhardt

0

它们都做相同的事情 - 调用WinAPI函数MessageBox()。如果有任何资源消耗方面的差异,那么这种差异非常小。如果您非常在意,您可以直接调用MessageBox() - 只需包含"uses Windows"即可。


所有的包装器 - 其实不是所有,看看我的回答吧。 :-) - Uli Gerhardt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接