В Delphi; каковы различия между Application.MessageBox, Windows.MessageBox или Dialogs.MessageDlg? Или что более эффективно использовать память компьютера?MessageBox
ответ
Windows.MessageBox - WinAPI MessageBox, Application.MessageBox - это оболочка вокруг него. Dialogs.MessageDlg однако является формой VCL. Поэтому, если вы обеспокоены безопасностью памяти или потоком, первые две могут быть лучше подходят. MessageDlg OTOH более гибкий и простой в использовании (IMHO, конечно).
Почему вы заботитесь о крошечном объеме памяти, используемой ящиком сообщений? Есть много других вещей, которые вы должны относиться к себе при написании приложения Delphi. В любом случае, насколько я знаю, это все тонкие обертки вокруг API-интерфейса Windows MessageBox.
Все они делают то же самое - вызывают функцию WinAPI MessageBox(). Разница в потреблении ресурсов, если таковая существует, минимальна. Если вы так заботитесь, вы можете напрямую вызвать MessageBox() - просто включите «использует Windows».
* Все * обертки - не совсем, см. Мой ответ. :-) –
Windows MessageBox локализован ОС (Да, Нет, Отмена ...), MessageDlg может быть локализован вручную.
Не могли бы вы предоставить информацию о локализации MessageDlg? –
Если я правильно помню, есть одно важное различие между сообщениями Delphi VCL и Windows - вы можете указать флаги, которые не позволяют обслуживать сообщения приложения (например, MB_SYSTEMMODAL). Это может быть полезно для отображения ошибок, когда вам нужно «заморозить» ваше приложение - Delphi MessageDlg по-прежнему будет запускать события таймера даже во время работы на экране. См:
Использование памяти не должно быть такой проблемы с коробками сообщений. Я лично предпочитаю форму VCL (Dialogs.MessageBox), так как я могу локализовать ее из блока Consts.pas. Мне также нравится, что я могу добавить к нему настраиваемые элементы управления, например флажки для «не показывать это снова» и другие подобные вещи.
Просто мне было интересно. Я использую функцию MessageBox сотни раз в одном проекте. – SimaWB
память исправляется каждый раз, когда окно сообщения закрывается. – 2009-03-27 12:03:48
@Neil: Мы будем надеяться. Серьезно, если бы это не было исправлено, это было бы обнаружено много лет назад. – sharptooth