2009-03-27 2 views
4

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

ответ

9

Windows.MessageBox - WinAPI MessageBox, Application.MessageBox - это оболочка вокруг него. Dialogs.MessageDlg однако является формой VCL. Поэтому, если вы обеспокоены безопасностью памяти или потоком, первые две могут быть лучше подходят. MessageDlg OTOH более гибкий и простой в использовании (IMHO, конечно).

1

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

+0

Просто мне было интересно. Я использую функцию MessageBox сотни раз в одном проекте. – SimaWB

+0

память исправляется каждый раз, когда окно сообщения закрывается. – 2009-03-27 12:03:48

+0

@Neil: Мы будем надеяться. Серьезно, если бы это не было исправлено, это было бы обнаружено много лет назад. – sharptooth

0

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

+0

* Все * обертки - не совсем, см. Мой ответ. :-) –

2

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

+0

Не могли бы вы предоставить информацию о локализации MessageDlg? –

1

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

MSDN MessageBox stuff

1

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