Окно сообщения - PullRequest
       12

Окно сообщения

4 голосов
/ 27 марта 2009

In Delphi ; Каковы различия между Application.MessageBox, Windows.MessageBox или Dialogs.MessageDlg? Или какой эффективнее использовать память компьютера?

Ответы [ 6 ]

10 голосов
/ 27 марта 2009

Windows.MessageBox - это WinAPI MessageBox, Application.MessageBox является оболочкой для него. Dialogs.MessageDlg, однако, является формой VCL. Так что, если вы беспокоитесь о безопасности памяти или потоков, первые два могут быть более подходящими. MessageDlg OTOH более гибок и прост в использовании (ИМХО, конечно).

2 голосов
/ 27 марта 2009

Windows MessageBox локализуется операционной системой (Да, Нет, Отмена ...), MessageDlg может быть локализован вручную.

1 голос
/ 30 марта 2009

Использование памяти не должно быть такой проблемой с окнами сообщений. Я лично предпочитаю форму VCL (Dialogs.MessageBox), так как я могу локализовать ее из модуля Consts.pas. Мне также нравится это из-за того, что я могу добавить собственные элементы управления, такие как флажки «больше не показывать» и другие подобные вещи.

1 голос
/ 27 марта 2009

Если я правильно помню, есть одно важное различие между окнами сообщений Delphi VCL и окнами Windows - вы можете указать флаги, которые останавливают обслуживание сообщений приложения (например, MB_SYSTEMMODAL). Это может быть полезно для отображения ошибок, когда вам необходимо «заморозить» ваше приложение - Delphi MessageDlg будет по-прежнему запускать события таймера, даже находясь на экране. См:

MSDN MessageBox

1 голос
/ 27 марта 2009

Почему вас волнует крошечный объем памяти, используемый окном сообщений? Есть много других вещей, с которыми вы должны быть обеспокоены, когда пишете приложение для Delphi. В любом случае, насколько я знаю, все это тонкие оболочки вокруг Windows MessageBox API.

0 голосов
/ 27 марта 2009

Они все делают одно и то же - вызывают функцию WinAPI MessageBox (). Разница в потреблении ресурсов, если таковая имеется, минимальна. Если вам так важно, вы можете вызвать MessageBox () напрямую - просто включите «использует Windows».

...