Разное

Showmessage в делфи: ShowMessage — . — Delphi

Вывод в окно сообщения Delphi

Как осуществляется вывод в окно сообщения Delphi? Окно сообщений применяется для того, чтобы привлечь внимание пользователей. Используя окно сообщений, программа может оповестить программиста об ошибке первичных данных или сделать запрос о подтверждении выполнения некоторой необратимой операции (удалить файл, очистить содержимое и др.).

В Delphi для вывода на экран окна сообщения зарезервирована процедура ShowMessage (либо выполняющая те же операции функция MessageDlg Delphi). Остановимся подробнее на них.

Процедура ShowMessage Delphi:

Применение процедуры ShowMessage позволяет вывести на экран окно с необходимым текстом и кнопкой подтверждения OK. Процедура ShowMessage Delphi организована следующим образом:

откуда Сообщение представляет собой текст, впоследствии выведенный в диалоговом окне.

Пример 1. Представим иллюстрацию окна сообщения, которое получено вследствие выполнения следующей инструкции:

Заметка. Заголовок окна сообщения, которое выводится при помощи процедуры ShowMessage, содержит название приложения, задающееся на специальной вкладке Application в окне Project Options. В случае, когда названия приложения не указано, заголовок будет включать в себя имя исполняемого файла.

Функция MessageDlg Delphi:

При помощи более универсальной процедуры MessageDlg возможно размещение в окне сообщения одного из стандартных значков, например, «Внимание», а также возможно задание количества и типа командных кнопок и обозначить, какую именно кнопку щелкнул программист. На рисунке ниже представлена иллюстрация окна, выведенного вследствие выполнения следующей инструкции:

В качестве значения функции MessageDlg выступает число, проверка значения которого может показать, какая командная кнопка завершила диалог. Общий вид обращения к данной функции представлен ниже:

откуда:

  • Сообщение представляет собой некоторый текст;
  • Тип определяет тип сообщения, которое включает в себя информационное, предупреждающее или сообщение о критической ошибке. Определенному типу ставится в соответствие некоторый значок. Именованная константа задает тип сообщения (табл. ниже).

  • Кнопки выступают в качестве списка кнопок, которые отображаются в окне сообщения. В состав данного списка входят именованные константы, разделенные запятыми (табл. ниже), при этом весь список заключен в квадратных скобках. К примеру, для появления в окне сообщения кнопок OK и Cancel необходимо представить список Кнопки как [mbOk,mbCansel]. Помимо указанных в таблиц выше констант возможно применение и таких констант, как mbAbortRetryIgnore, а также mbYesNoCansel и др. Как правило, данные константы чаще используются в комбинациях командных кнопок диалоговых окон.

  • КонтекстСправки означает параметр, обозначающий раздел справочной системы, который впоследствии выведется на экран при нажатии пользователем на клавишу F1. В случае отсутствия справочной системы, параметр КонтекстСправки должен быть приравнен нулю.

Значение функции MessageDlg определяет, на какую из командных кнопок щелкнул пользователь при работе с программой (табл. ниже).


Похожие записи:

delphi — Как сделать диалог Showmessage шире, чтобы он соответствовал тексту?

спросил

Изменено 3 года, 5 месяцев назад

Просмотрено 3к раз

Я показываю, где был сохранен файл, с помощью «Showmessage» (в Win 7). Когда путь к файлу длинный, он усекается и вставляется многоточие. например путь

 C:\Users\Admin\Documents\SubFolderOne\AnotherSubFolder\MyFile.csv
 

отображается как

 C:\Users\Admin\Documents\SubFolderOne\Ano...\MyFile.csv
 

Есть ли способ сделать окно сообщения шире и показать все имя файла и путь?

Я прочитал это http://zarko-gajic. iz.hr/displaying-long-non-breakable-text-file-path-in-messagedlg-truncationellipsis-issues/ который объясняет некоторые рассуждения и дает довольно неудовлетворительный метод для TTaskDialog, и я также понимаю, что мог бы сделать свою собственную форму, чтобы действовать так же, как Showmessage, но мне интересно, есть ли более простое решение, использующее только Showmessage.

  • делфи
  • диалог

4

Есть ли более простое решение, использующее только ShowMessage ?

Нет, нет.

Я могу назвать три очевидных подхода, хотя, несомненно, их больше.

Создайте свой собственный диалог

В диалогах нет ничего особенно волшебного. Вы вполне можете создать их самостоятельно и полностью контролировать их внешний вид. Недостатком, конечно, является то, что может быть трудно соответствовать внешнему виду нативной платформы. Особенно, если учесть все различные версии Windows, которые обычно должны поддерживаться.

Используйте CreateMessageDialog и настройте эту форму Delphi

Вы можете вызвать функцию RTL

CreateMessageDialog , чтобы получить форму Delphi, которую можно использовать для отображения диалогового окна сообщения. Затем у вас есть возможность настроить этот диалог по своему усмотрению.

Использовать API диалога задач

API диалога задач, представленный в Vista, позволяет управлять шириной диалога. Вызовите TaskDialogIndirect и укажите ненулевое значение для cxWidth .

6

Перед ShowMessage поместите:

 UseLatestCommonDialogs:= false;
 

Я использую Delphi 10.2, и он работает.

1

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

ShowMessage не запускает ApplicationEvents ModalBegin .

.. / on embarcadero.public.delphi.rtl / NNTP Conversation
# Строки

Майкл Джастин написал 28 сентября 2010 г.:

Привет,
В Delphi 2009, если я вызываю ShowMessage, сообщение отображается как модальное
диалоговое окно, но компонент ApplicationEvents не выполняет
Обработчик события ModalBegin.
Будет ли этот обработчик событий вызываться только для модальных диалогов на основе TForm?
11

Питер Ниже ответил 28 сентября 2010 г.:

Майкл Джастин писал:
(фрагмент)

ShowMessage показывает TForm, он создан в коде, но это
форма. Возможно, вы вместо этого используете MessageBox?
Быстрый тест в Delphi XE показывает, что событие OnModalBegin срабатывает.
если вызывается ShowMessage. Повторение теста в D2009 также показывает, что

31

Крис Роллистон ответил 28 сентября 2010 г.:

(фрагмент)

Вы все еще используете Windows XP, насколько я понимаю… Начиная с D2007,
Dialogs.pas будет использовать API диалога задач вместо пользовательской TForm, если
работает в Vista или более поздней версии.

11

Майкл Джастин ответил 29 сентября 2010 г. :

Am 28.09.2010 22:43, Крис Роллистон написал:
(снип)

Вот и все — использую Vista. Итак, в Delphi Delphi не вызывает ModalBegin
и ModalEnd перед отображением (модального) диалогового окна задачи. Так что, если мне нужны эти

событий (для визуальной подсказки в графическом интерфейсе о наличии модального
диалог), я должен написать себе обертку для ShowDialog.

32

Крис Роллистон ответил 29 сентября 2010 г.:

(отрывок)
Звучит разумно, хотя есть вероятность, что ответ будет
«как задумано». Не говорю, что так должно быть, конечно…


7
org/UserComments» itemprop=»comment»>

Лайош Юхас ответил 29 сентября 2010 г.:

Питер Ниже писал:
(фрагмент)

В Vista и Win 7 с UseLatestCommonDialogs и

ThemeServices.THemesEnabled Delphi будет использовать диалоговые окна Windows и
таким образом, не запускать событие.
Пожалуйста, попробуйте следующий код, и вы увидите, что событие будет

39

Питер Ниже ответил 29 сентября 2010 г.:

Крис Роллистон написал:
(отрывок)

На месте, я все еще живу (и пишу для) в чистой среде XP.
Диалоговые окна задач, вероятно, будут вести себя так же, как MessageBox.
делает на XP. Событие OnModalStart зависит от кода в ShowModal.
функция, которая не используется для диалогов API.

30

Майкл Джастин ответил 29-Сентябрь 2010 г.:

Am 29.09.2010 17:04, Лайош Юхас написал:
(снип)

Спасибо, все работает как положено! Отключение использования Задачи
Dialog API решает проблему отсутствия вызовов ModalBegin/ModalEnd.
Но это не идеальное решение. Если Delphi вызывает модальный диалог задач,
почему он не может вызывать ModalBegin/ModalEnd до и после?

21

Лайош Юхас ответил 29 сентября 2010 г.:

Майкл Джастин писал:
(фрагмент)

ModalStarted и ModalEnd реализованы в TApplication.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *