MessageDlg — Функция Delphi


MessageDlg — Функция Delphi

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

Функция ShowMessage

Простейший случай такого взаимодействия — просто проинформировать пользователя. Ну хотя бы о том, что в процессе вычисления произошло деление на нуль. Простое информационное сообщение укажет пользователю на необходимость внести изменение в данные расчёта. Для создания простого информационного сообщения служит встроенная функция ShowMessage:

ShowMessage(‘На нуль делить нельзя!’);

Функция ShowMesage допускает выведение сообщения в несколько строк. Для этого нужно воспользоваться стандартными символами перехода на другую строку: #10#13:

ShowMessage(‘возникла ошибка деления на нуль.’+#10#13+’Исправьте введённые данные.’);

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

procedure TForm1.Button1Click(Sender: TObject);
var x, y: Integer;
begin
try
x:=StrToInt(Edit1.Text);
y:=StrToInt(Edit2.Text);
if y=0 then
begin
ShowMessage(‘На ноль делить нельзя!’+#10#13+’Исправьте ввод.’);
Edit2.SetFocus;
exit;
end;
Label3.Caption:=’Значение: ‘+FloatToStr(x/y);;
except
ShowMessage(‘Должны быть введены целые числа, исправьте!’);
Edit1.SetFocus;
end;
end;

Данная программа предупреждает пользователя как о вводе нуля, так и вообще о введении нечисловых данных или нецелых чисел. Информационное окошко выводится в модальном режиме, то есть, при выдаче сообщения работа программы прерывается, и продолжится только после закрытия окна с оператора, следующего за вызовом функци ShowMessage:

Функция MessageDlg

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

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

function MessageDlg(const Msg: String; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;

Параметры функции MessageDlg:
Msg — выводимое сообщение, с возможностью вывода в несколько строк, DlgType — тип диалога, например «Опасность, Ошибка, Информация, Подтверждение», и т.д., Buttons — множество кнопок с соответствующими заголовками, HelpCtx — в большинстве случаев можно использовать «0» — ноль. Для каждого из типов диалога выводится своя пиктограмма, что, несомненно, прибавляет красочности и информативности окну, выводимому данной функцией.

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

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

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

Result:=MessageDlg(‘Вы действительно хотите закрыть приложение?’, mtConfirmation, [mbYes, mbNo], 0);
if Result=6 then Application.Terminate;

Пример.
Организуем диалог, запрашивающий у пользователя разрешение сохранить изменения в текстовом редакторе в файл перед закрытием приложения:

procedure TForm1.Button1Click(Sender: TObject);
var Result: Integer;
begin
if Memo1.Modified
then Result:=MessageDlg(‘Сохранить изменения?’, mtConfirmation, [mbYes, mbNo, mbCancel], 0);
case Result of
2: exit; //Нажатие «Cancel», выходим из функции, без закрытия приложения
6: Memo1.Lines.SaveToFile(‘ИмяФайла.txt’); //Нажатие «Yes», сохраняем файл
7: ; //Нажатие «No», ничего не делаем
else exit; //Если окно закрыли нажатием на «крестик» в заголовке — тоже выходим без закрытия приложения
end;
Application.Terminate; //Закрываем приложение
end;

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

Русификация функции MessageDlg

Конечно, такие заголовки кнопок как, например, «Yes», «No», «Cancel» давно стали стандартом и понятны пользователям без перевода. Однако, применяя функцию MessageDlg в программе, где все остальные надписи выводятся на русском языке, можно видеть что английский интерфейс её окна смотрится чужеродно. Воникает вопрос, как можно русифицировать заголовок окна и названия кнопок такой удобной и полезной функции как MessageDlg.

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

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

Диалоговые окна в Дельфи (процедуры и функции, реализующие диалоговые окна)

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

Процедура ShowMessage, функции MessageDlg и MessageDlgPos отображают окно (панель) вывода сообщений, а функции InputBox и InputQuery — окно (панель) для ввода информации.

Процедура ShowMessage

Процедура ShowMessage (const Msg: String) отображает окно сообщения с кнопко ОК. Заголовок содержит название исполняемого файла приложения, а строка Msg выводится как текст сообщения.

Функция MessageDlg


Функция MessageDlg(const Msg: String; AType: TMsgDlgType; AButtons: TMsgDlgButtons; Helpctx: Longint) : word отображает окно сообщения в центре экрана и позволяет получить ответ пользователя. Параметр Msg содержит отображаемое сообщение.

Илон Маск рекомендует:  Применение ado для работы с бд (c builder)

Окно сообщения может относиться к различным типам и наряду с сообщением содержать картинки. Тип окна сообщения определяется параметром АТуре, который может принимать следующие значения:

  • mtWarning (окно содержит черный восклицательный знак в желтом треугольнике и заголовок Warning);
  • mtError (окно содержит белый косой крест в красном круге и заголовок Error);
  • mtInformation (окно содержит синюю букву «i» в белом круге и заголовок Information);
  • mtConfirmation (окно содержит синий знак «?» в белом круге и заголовок Confirmation);
  • mtCustom (окно не содержит картинки, в заголовке выводится название исполняемого файла приложения).

Параметр AButtons задает набор кнопок окна и может принимать любые комбинации следующих значений:

  • mbYes (кнопка Yes);
  • mbAbort (кнопка Abort);
  • mbNo (кнопка No);
  • mbRetry (кнопка Retry);
  • mbOk (кнопка OK);
  • mbIgnore (кнопка Ignore);
  • mbCancel (кнопка Cancel);
  • mbAll (кнопка All);
  • mbHelp (кнопка Help);

Для значения параметра AButtons имеются две константы — mbYesNoCancel и mbOKCancel, задающие предопределенные наборы кнопок:

  • mbYesNoCancel = [mbYes, mbNo, mbCancel];
  • mbOKCancel = [mbOK, mbCancel]

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

Параметр HelpCtx определяет контекст (тему) справки, которая появляется во время отображения диалогового окна при нажатии пользователем клавиши . Обычно! значение этого параметра равно нулю.

Пример использования функции MessageDlg:

При нажатии кнопки Button1 производится простейшая проверка даты. Код даты вводится в поле редактирования DateEdit1, размещенное в форме. Если длина даты меньше допустимой, выдается предупреждение с запросом на автоматическую коррекцию (см. скриншот). При утвердительном ответе пользователя в поле даты записывается текущая дата, при отрицательном — фокус передается полю ввода даты.

Функция MessageDlgPos

Функция MessageDlgPos(const Msg: String; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer) : Word отличается от функции MessageDlg наличием параметров Х и Y, управляющих положением окна на экране.

Функция InputBox

Функция InputBox(const ACaption, APrompt, ADefault: String): String отображает диалоговое окно для ввода строки текста. Окно выводится в центре экрана и содержит поле ввода с надписью, а также кнопки ОК и Cancel.

Параметр ACaption задает заголовок окна, а параметр APrompt содержит поясняющий текст к полю ввода. Параметр ADefault определяет строку, возвращаемую функцией при отказе пользователя от ввода информации (нажатие кнопки Cancel или клавиши ).

Пример использования функции InputBox:

Приведенная процедура отображает окно запроса на ввод фамилии пользователя (см. скриншот).

По умолчанию предлагается Иванов.

Функция InputQuery

Функция InputQuery (const ACaption, APrompt: String; var Value: String): Boolean отличается от функции InputBox тем, что вместо третьего параметра— строки по умолчанию— используется параметр Value, который в случае подтверждения ввода содержит введенную пользователем строку.

В качестве результата функция возвращает логическое значение, позволяющее определить, каким образом завершен диалог. Если нажата кнопка ОК, то функция возвращает значение True, если нажата кнопка Cancel или клавиша — значение False.

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

Кроме рассмотренных диалоговых окон, в Delphi имеется ряд других специализированных диалоговых окон, например диалоговое окно выбора каталога, вызываемое функцией Select Directory модуля FileCtrl.

MESSAGEDLG

Posted by key under Delphi

MESSAGEDLG

отображает диалоговое окно сообщений в центре экрана


|| function MessageDlg ( const Message : string; DialogType : TMsgDlgType; Buttons : TMsgDlgButtons; HelpContext : Longint ) : Integer;

Описание:

Delphi функция MessageDlg используется для вывода сообщения пользователю. Сообщение может быть информационным или предупреждающим, или каким-то другим по усмотрению разработчика. Разработчику предоставляется полная свобода выбора кнопок, которые будут использоваться в диалоге.

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

Вызов MessageDlg выводит на экран диалоговое окно и ожидает ответа пользователя. Сообщение в окне задается параметром функции Msg.

Вид отображаемого окна задается параметром AType. Возможные значения этого параметра:

Значение Описание
mtWarning Окно замечаний, содержащее желтый восклицательный знак.
mtError Окно ошибок, содержащее красный стоп-сигнал.
mtInformation Информационное окно, содержащее голубой символ «i».
mtConfirmation Окно подтверждения, содержащее зеленый вопросительный знак.
mtCustom Заказное окно без рисунка. Заголовок соответствует имени выполняемого файла приложения.

Параметр AButtons определяет, какие кнопки будут присутствовать в окне. Тип TMsgDlgBtns параметра AButtons является множеством, которое включает различные кнопки. Возможные значения видов кнопок:

Значение Описание
mbYes Кнопка с надписью ‘Yes’
mbNo Кнопка с надписью ‘No’
mbOK Кнопка с надписью ‘OK’
mbCancel Кнопка с надписью ‘Cancel’
mbHelp Кнопка с надписью ‘Help’
mbAbort Кнопка с надписью ‘Abort’
mbRetry Кнопка с надписью ‘Retry’
mbIgnore Кнопка с надписью ‘Ignore’
mbAll Кнопка с надписью ‘All’

Список необходимых кнопок заключается в квадратные скобки [ ], поскольку параметр AButtons является множеством. Если внутри скобок список отсутствует, в окне не будет ни одной кнопки и пользователю придется закрывать окно системными кнопками Windows.
Кроме множества значений, соответствующих отдельным кнопкам, в Delphi определены три константы, соответствующие часто используемым сочетаниям кнопок:

Значение Описание
mbYesNoCancel Включает в окно кнопки Yes, No и Cancel
mbOkCancel Включает в окно кнопки OK и Cancel
mbAbortRetryIgnore Включает в окно кнопки Abort, Retry и Ignore

Эти константы являются предопределенными множествами. Поэтому при их использовании их не надо заключать в квадратные скобки [ ]. Параметр HelpCtx определяет экран контекстной справки, соответствующий данному диалоговому окну. Этот экран справки будет появляться при нажатии пользователем клавиши F1. Если вы справку не планируете, при вызове MessageDlg надо задать нулевое значение параметра HelpCtx. Подробнее о контекстной справке см. в описании свойства HelpContext.

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

mrNone mrAbort mrYes
mrOk mrRetry mrNo
mrCancel mrIgnore mrAll

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

Имеется также функция MessageDlgPos, во всем аналогичная функции MessageDlg, но отображающее окно в заданном месте экрана. При выводе простых сообщений без необходимости анализировать ответ пользователя удобно использовать другие процедуры Delphi — ShowMessage и ShowMessageFmt.

Пример кода:

// Show the button type selected
if buttonSelected = mrOK then ShowMessage(‘OK pressed’);
if buttonSelected = mrCancel then ShowMessage(‘Cancel pressed’);
end;

Илон Маск рекомендует:  input в HTML

Результат выполнения:

A confirmation dialog is displayed with OK and Cancel buttons.
The user presses OK :

Вывод в окно сообщения 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 определяет, на какую из командных кнопок щелкнул пользователь при работе с программой (табл. ниже).

Процедура MessageDlg

Также можно использовать стандартные сообщения типа MessageDlg, которые бывают следующих типов :

Ø информационный (mtInformation);

Ø вопросительный (mtConfirmation);

Ø сообщение об ошибке (mtError);

Ø сообщение типа «Внимание» (mtWarning),

Ø специальный диалог (mtCustom).

Общий вид диалогового сообщения выглядит следующим образом:

MessageDlg(const Msg:String, DlgType:TmsgDlgType, Buttons: TmsgDlgBtn, HelpCtx: Integer): Integer;

Const – текстовое сообщение, которое будет напечатано в диалоговом окне;

DlgType – тип диалога (описаны выше);

Buttons – множество кнопок, которое будет на форме диалога.

Обычно, для всех типов, кроме mtConfirmation и mtCustom, используется логически единственное множество [mbOk] (пользователь может только согласиться с текстом сообщения). Для остальных типов можно выбрать следующие кнопки: (mbYes, mbNo, mbOK,mbCancel,mbAbort,mbRetry,mbIgnore,mbAll,mbNoToAll,mbYesToAll, mbHelp), также возможно использовать вместо множественного типа следующие константы:

mbYesNo = [mbYes, mbNo];

mbYesNoCancel = [mbYes, mbNo, mbCancel];

mbYesAllNoAllCancel = [mbYes, mbYesToAll, mbNo, mbNoToAll, mbCancel];

mbOKCancel = [mbOK, mbCancel];

mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];

mbAbortIgnore = [mbAbort, mbIgnore].

HelpCtx – указывается, если есть, тема справки, обычно этот параметр равен нулю.

Например, для сообщений, показанных на рисунке 18, применены следующие функции:

MessageDlg(‘Информационнный текст’, mtInformation, [mbOk], 0);

MessageDlg(‘От пользователя требуется выбор’+#13+

‘В конце сообщения обычно ставят знак вопроса

MessageDlg(‘Диалог Custom’, mtCustom, mbAbortRetryIgnore, 0);


Рисунок 18 — Результаты выполнения команды MessageDlg

При нажатии пользователем любой кнопки, кроме Help, функция MessageDlg возвращает программе результат типа Integer, с помощью которого можно управлять дальнейшими действиями. Чтобы не запоминать все числа, соответствующие каждой кнопке, ввели тип данных TModalResult, который может принимать следующие значения: mrNone, mrOk, mrCancel, mrAbort, mrRetry, mrIgnore, mrYes, mrNo, mrAll, соответствующие нажатию кнопки с подобным типом (см. также работа с формой).

Пример 11. Рассмотрим часть программы, для которой необходимо ввести два числа и важно, чтобы одно было строго больше другого (например, ввод диапазона для расчета значений функции). Для решения данной задачи нам понадобится форма, на которой расположены два редактора и две кнопки (рисунок 19).

Рисунок 19 — Внешний вид формы

Для формы и кнопки написали следующий код:

procedure TForm1.Button1Click(Sender: TObject);

MessageDlg — Функция Delphi

дело в том что я не знаю какие параметры должны быть в скобках messagrBox() и нужно ли обьявлять эту функцию как то раннее
[QUOTE] unit Unit1;

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
< Private declarations >
public
< Public declarations >
end;

var
Form1: TForm1;

procedure TForm1.Button1Click(Sender: TObject);
var x,y,t:real;
begin
x:=StrToFloat(InputBox(‘ввод числа х’,’введите число х’,’0′));
y:=StrToFloat(InputBox(‘ввод числа у’,’введите число у’,’0′));
t:=x+y;
ShowMessage(‘решение=’+floattostr(t));
MessageDlg (‘Хотите закончить работу приложения? ‘,mtConfirmation,[mbYes,mbNo],0);
MessageBox()

как использовать MessageDlg в Delphi 7

Набрать MessageDlg и нажать кнопку F1. Там все написано. А кратко так. Данная функция входит в состав модуля Dialogs и объявляется следующим образом

function MessageDlg(const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: Longint): Word;

где Msg — строка, которую надо показать пользователю;

AType — тип окна диалога (может принимать следующие значения )

mtWarningA message box containing a yellow exclamation point symbol. (с восклицателдьным знакомl, а остальное переведите сами или определите экспериментально. )
mtErrorA message box containing a red stop sign.
mtInformationA message box containing a blue «i».
mtConfirmationA message box containing a green question mark.
mtCustomA message box with no bitmap. The caption of the message box is the name of the application’s executable file.

AButtons — определяет какие кнопки будут отбражаться

mbYesA button with the text ‘Yes’ on its face
mbNoA button with the text ‘No’ on its face
mbOKA button with the text ‘OK’ on its face
mbCancelA button with the text ‘Cancel’ on its face
mbHelpA button with the text ‘Help’ on its face
mbAbortA button with the text ‘Abort’ on its face
mbRetryA button with the text ‘Retry’ on its face
mbIgnoreA button with the text ‘Ignore’ on its face
mbAllA button with the text ‘All’ on its face

Илон Маск рекомендует:  animation-play-state в CSS

Кроме того можно указать комбинацию кнопок

mbYesNoCancelPuts Yes, No, and Cancel buttons in the message box
mbOkCancelPuts t OK and Cancel buttons in the message box
mbAbortRetryIgnorePuts Abort, Retry, and Ignore buttons in the message box

Функция возвращает следующие значения

mrNone, mrAbort, mrYes, mrOk, mrRetry, mrNo, mrCancel, mrIgnore, mrAll

А вот пример использования.

procedure TForm1.Button1Click(Sender: TObject);

begin
if MessageDlg(‘Welcome to my Object Pascal application. Exit now?’,
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
MessageDlg(‘Exiting the Object Pascal application.’, mtInformation,
[mbOk], 0);
Close;
end;
end;

Стандартные строковые функции и сообщения

Преобразование символов строки в строчные и в заглавные

Иногда требуется сравнить две строки, или найти какую-то подстроку. Но не всегда известно, в каком регистре пользователь ввел текст. К примеру, нам нужно узнать, ввел ли пользователь слово «Москва», или что-то другое. Пользователь знает, что он должен ввести название нашей столицы, однако он может полениться нажать , и в результате введет «москва». Или нажмет и введет «МОСКВА». А поскольку слово он написал без ошибок, то уверен, что все сделал правильно. Но мы-то ожидаем не просто слово , а слово со строго определенным описанием! К сожалению, пользователи далеко не всегда вводят то, что нужно, и программистам приходится идти на всевозможные хитрости, чтобы добиваться нужного результата. Например, мы можем заранее преобразовать введенное пользователем слово в верхний регистр (то есть, сделать все буквы заглавными), и сравнить его со словом «МОСКВА». И какие бы буквы пользователь первоначально не вводил, результат все равно будет верным.

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


Как сделать MessageDlg центром в форме владельца

Я бы хотел, чтобы MessageDlg располагался в центре его родительской формы. Любые предложения о том, как это сделать в Delphi 2010?

Я нашел здесь код ниже: http://delphi.about.com/od/formsdialogs/l/aa010304a.htm, но он не работает для меня. Всплывающее окно по-прежнему не сосредоточено на форме владельца. (Мне непонятно, как метод действительно знает форму владельца. )

Вы можете сделать

и назовите его как

Однако я лично не сделал бы этого, потому что диалог, показанный CreateMessageDialog , не является родным диалоговым окном Windows. Сравните визуальный результат с родным материалом:

По крайней мере, в Windows 7 с включенной темой Aero собственный диалог выглядит намного лучше. Однако, похоже, это не может быть сосредоточено над какой-либо конкретной формой. Вместо этого диалоговое окно центрируется на текущем мониторе. Но это также поведение по умолчанию в Windows (попробуйте «Блокнот», «WordPad» или «Paint» ), так зачем вам это новое поведение?

Диалог не имеет отношения к экземпляру TForm1. Было бы нелегко установить положение формы вручную, но я уверен, что кто-то, кто более знаком с этой областью VCL, будет знать, как сделать это более чистым способом.

Лично я никогда не использую свойство Position и не использую свой собственный код для размещения всех своих форм, потому что я никогда не был удовлетворен работой свойства Position.

ОБНОВЛЕНИЕ: вы можете изменить владельца диалогового окна, используя Self.InsertComponent(Dialog) . Вам нужно будет сохранить ваш диалог в локальной переменной, скажем, Dialog , чтобы это работало:

Зачем ограничивать это желание диалоговыми окнами сообщений? Как Дэвид Хеффернан прокомментировал:

Внутренние диалоги всегда выигрывают!

С помощью следующих единиц вы можете центрировать любой собственный диалог, например: MessageBox , TFindDialog , TOpenDialog , TFontDialog , TPrinterSetupDialog и т.д. Основной блок обеспечивает два подпрограмм, как с некоторыми необязательными параметрами:

Где бы вы могли использовать OpenDialog1.Execute , и пусть Windows решит, где показать диалог, теперь вы используете ExecuteCentered(OpenDialog1) , а диалоговое окно будет сосредоточено в активной форме экрана:

Чтобы отобразить диалоговые окна сообщений, используйте MsgBox , обертку вокруг Application.MessageBox (которая, в свою очередь, является оберткой вокруг Windows.MessageBox ). Некоторые примеры:

  • MsgBox(‘Hello world!’);
  • MsgBox(‘Cancel saving?’, MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2);
  • MsgBox(‘Please try again.’, MB_OK, ‘Error’);
  • MsgBox(‘I»m centered in the toolbar.’, MB_OK, ‘Fun!’, Toolbar1.Handle);

Официальное уведомление: эти единицы написаны мной в этой голландской теме. Исходные версии от Mark van Renswoude, см. NLDMessageBox.

MessageDlg — Функция Delphi

For example, the user may be shown an error message, and be allowed to abort, retry or cancel the erroneous process.

The DialogType may have one of the following enumerated values:

mtWarning Displays a exclamation symbol
mtError Displays a red ‘X’
mtInformation Displays an ‘i’ in a bubble
mtConfirmation Displays an question mark
mtCustom Displays just the message

The Buttons value may be one or more of the following enumerated values :

mbYes Displays a ‘Yes’ button
mbNo Displays a ‘No’ button
mbOK Displays an ‘OK’ button
mbCancel Displays a ‘Cancel’ button
mbAbort Displays an ‘Abort’ button
mbRetry Displays a ‘Retry’ button
mbIgnore Displays an ‘Ignore’ button
mbAll Displays an ‘All’ button
mbNoToAll Displays a ‘No to all’ button
mbYesToAll Displys a ‘Yes to all’ button
mbHelp Displays a ‘Help’ button

You specify these values comma separated in square brackets, as in the second code example.

Delphi provides a number of predefined button combinations:

mbYesNoCancel = [mbYes,mbNO,mbCancel]
mbYesAllNoAllCancel =[mbYes,mbYesToAll, mbNo,mbNoToAll,mbCancel]
mbOKCancel =[mbOK,mbCancel]
mbAbortRetryCancel =[mbAbort,mbRetry,mbCancel]
mbAbortIgnore =[mbAbort,mbIgnore]

Now Delphi seem to have made a design error when setting the return value from the dialog box. Instead of specifying the enumeration value of the button pressed, it uses a completely different set of enumeration names:

mrYes = 6
mrNo = 7
mrOK = 1
mrCancel = 2
mrAbort = 3
mrRetry = 4
mrIgnore = 5
mrAll = 8
mrNoToAll = 9
mrYesToAll = 10

The values given are the numerical values of these enumerations, given in the numerical order that the mb equivalents are defined. This is very odd.

Additionally, these values are defined in the Controls unit, not the Dialogs unit.

Note that the Help button has no equivalent return value. This is because it does not terminate the dialog.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL