MessageDlgPos — Функция Delphi


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

И так, в рамках этой статьи рассмотрим ряд специальных процедур и функций, предлагаемых 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 содержит отображаемое сообщение.

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

  • 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.

MessageDlgPos — Функция 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 и щёлкните мышкой по функции или нужному параметру. Откроется модуль с полным описанием.

Илон Маск рекомендует:  Язык обработки данных awk

Функция 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. Этот способ позволяет перед выводом на экран динамически изменить параметры функции. Вот как, пользуясь этим способом, можно русифицировать запрос на сохранение текста в предыдущей программе:

MessageDlgPos — Функция Delphi

Можно ли в MessageDlg сделать так чтоб на выбор было не Yes или No, а по-русски Да или Нет


>Polar(09.04.08 23:49) [0]

не поможет. они боятся диалогов с любыми кнопками..

> Polar (09.04.2008 23:49:00) [0]

Можно! Русификация здесь:
http://polesoft.narod.ru/

А можно маленький примерчик использования MessageBox
Какие там могут быть параметры.
Мне нужно 2 кнопки — Да и Нет

Эх. MessageBox (ручками). Затем F1 (пальцем). Затем «Delphi example» (мышью)


> korneley © (10.04.08 00:36) [6]


> Затем F1

Зачем же употреблять такую ненормативную для начинающих лексику, F1?


> Германн © (10.04.08 00:42) [7]

Ну, дык, некоторые птицы и птенцов за борт выкидывают, чтобы те летать учились :)

А вот! Подарок (на День Космонавтики):

function MessageDlgR
(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint):word;
const
MsgTitle: array[mtWarning..mtConfirmation] of PChar =
(«Предупреждение», «Ошибка», «Информация», «Подтверждение»);
MsgIcon : array[mtWarning..mtConfirmation] of integer =
(MB_ICONWARNING, MB_ICONERROR, MB_ICONINFORMATION, MB_ICONQUESTION);
var Flags : integer;
begin
if Buttons = [mbAbort, mbRetry, mbIgnore] then flags := MB_ABORTRETRYIGNORE else
if Buttons = [mbOk] then flags := MB_OK else
if Buttons = [mbOk, mbCancel] then flags := MB_OKCANCEL else
if Buttons = [mbRetry, mbCancel] then flags := MB_RETRYCANCEL else
if Buttons = [mbYes, mbNo] then flags := MB_YESNO else
if Buttons = [mbYes, mbNo, mbCancel] then flags := MB_YESNOCANCEL
else flags := 0
;
case Application.MessageBox(PChar(Msg), MsgTitle[DlgType], MsgIcon[DlgType] + Flags)of
> > > > > > > else
Result := mrNone;
end;
end;

Остальное — напильником.


> korneley © (10.04.08 00:54) [8]

Ну да. Жестокая правда жизни.

У меня аот тоже есть по сабжу кое что:

const
Ok > Cancel > Abort > Retry > Ignore > Yes > No > Close > Help > TryAgain > Continue >
function LoadResourceString(AModuleName: string;
AnID: Cardinal): string;
function LoadUser32ResourceString(AnID: Cardinal): string;

function GetOkString: string;
function GetCancelString: string;
function GetAbortString: string;
function GetRetryString: string;
function GetIgnoreString: string;
function GetYesString: string;
function GetNoString: string;
function GetCloseString: string;
function GetHelpString: string;
function GetTryAgainString: string;
function GetContinueString: string;

var
OkS: string;
CancelS: string;
AbortS: string;
RetryS: string;
IgnoreS: string;
YesS: string;
NoS: string;
CloseS: string;
HelpS: string;
TryAgainS: string;
ContinueS: string;

function LoadResourceString(AModuleName: string;
AnID: Cardinal): string;
var
Buffer: array[0&#133255] of Char;
begin
Result := «»;
LoadString(GetModuleHandle(PAnsiChar(AModuleName)), AnID, Buffer, SizeOf(Buffer));
Result := StrPas(Buffer);
end;

function LoadUser32ResourceString(AnID: Cardinal): string;
begin
Result := LoadResourceString(«user32.dll», AnID);
end;

function GetOkString: string;
begin
Result := OkS;
end;

function GetCancelString: string;
begin
Result := CancelS;
end;

function GetAbortString: string;
begin
Result := AbortS;
end;

function GetRetryString: string;
begin
Result := RetryS;
end;

function GetIgnoreString: string;
begin
Result := IgnoreS;
end;

function GetYesString: string;
begin
Result := YesS;
end;

function GetNoString: string;
begin
Result := NoS;
end;

function GetCloseString: string;
begin
Result := CloseS;
end;

function GetHelpString: string;
begin
Result := HelpS;
end;

function GetTryAgainString: string;
begin
Result := TryAgainS;
end;

function GetContinueString: string;
begin
Result := ContinueS;
end;

initialization
OkS := LoadUser32ResourceString(OkID);
CancelS := LoadUser32ResourceString(CancelID);
AbortS := LoadUser32ResourceString(AbortID);
RetryS := LoadUser32ResourceString(RetryID);
IgnoreS := LoadUser32ResourceString(IgnoreID);
YesS := LoadUser32ResourceString(YesID);
NoS := LoadUser32ResourceString(NoID);
CloseS := LoadUser32ResourceString(CloseID);
HelpS := LoadUser32ResourceString(HelpID);
TryAgainS := LoadUser32ResourceString(TryAgainID);
ContinueS := LoadUser32ResourceString(ContinueID);

Вот я внес изменения в Conts.pas, все «Yes» переделал на «Да»


> [12] azamatufa © (10.04.08 12:59)

что, и VCL перекомпилил?


> clickmaker © (10.04.08 13:09) [13]
Вы, эта, поосторожнее. А то, человек, небось, уже исходники Висты ищет :) Типа, VCL — «Vista Consumption (&) Linking» ;)


> Можно ли в MessageDlg сделать так чтоб на выбор было не
> Yes или No, а по-русски Да или Нет

with CreateMessageDialog («Текст сообщения», mtConfirmation, [mbYes,mbNo], 0, mbYes) do
try
(FindComponent(«Yes») as TButton).Caption:=»Да»;
(FindComponent(«No») as TButton).Caption:=»Нет»;
Result := ShowModal;
finally
Free;
end;

kornekey:
исходники Висты пока еще не нашел, весь нет перерыл.. ;)

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 Заказное окно без рисунка. Заголовок соответствует имени выполняемого файла приложения.

Илон Маск рекомендует:  Что такое код setenvironment

Параметр 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;

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

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

Стандартные формы-панели сообщений

Система Delphi предоставляет пользователю (заранее предопределенные) формы — окна диалоговых панелей сообщений.

Функция MessageDlg позволяет вывести сообщение пользователю и имеет возможность включить в форму несколько кнопок для выбора ответа пользователя. Например, нижеследующий пример стандартного использования функции MessageDlg для закрытия программы при вызове выводит соответствующий текст в форме с графическим символом подтверждения (согласно константе mtConfirmation) и две кнопки с надписью Ok и Cancel (константы mbOk и mbСаnсеl), используя тему контекстного HELP’a с номером 9996 и производит действия в соответствии с возвращаемым MessageDlg значением

Procedure TFormI. FormClose (Sender: TObject;

var Action: TCIoseAction);

if MessageDlg (‘Bы в самом деле хотите закончить работу?’, mtConfirmation, [mbYes, mbNo],

C++Builder. В этом случае следует воспользоваться конструкцией

void _fastcall TForm1: FormClose (TObject *Sender,

switch (MessageBox (0, «Вы в самом деле хотите закончить работу?»,

MB_YESNO | MB_ICONWARNING | MB_TOPMOST))

> // конец блока SWITCH

> // конец функции FormClose

// допустимы также вызовы Delphi-подобных функций диалогов

// для задания кнопок на форме используются битовые поля —

// пример использования этих полей см. ниже

// if (MessageDlg (‘Bы в самом деле хотите закончить работу?»,

// TMsgDIgButtons() «mbYes «mbNo,

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

Функция InputBox используется для вывода формы, содержащей строку ввода и две кнопки — Ok и Cancel. Функция возвращает либо введенную пользователем строку, либо описанную параметром ADefault строку.

Функция InputQuery возвращает введенную пользователем строку или строку ADefault при нажатии любой кнопки. Введенная пользователем строка возвращается в параметре Value, возвращаемое функцией значение есть TRUE при нажатии кнопки Ok или FALSE при нажатии Cancel или Esc.

Функция MessageDlgPos

Читайте также:

  1. II. Речь — функция головного мозга
  2. III. Функция интеграции и социального общения
  3. IV. Твоя функция в Искуплении
  4. IV. Функция времени
  5. V. Функция здравого смысла
  6. V. Функция чудотворца
  7. VI. Особая функция
  8. Автокорреляционная функция
  9. Адаптивная функция
  10. Адаптивная функция
  11. Взаимная корреляционная функция
  12. Волновая функция и ее статистический смысл

Begin

Begin

Функция MessageDlg.

Begin

Процедура ShowMessage.

Begin

Implementation

Public

constructor create();

end;

ConstructorTShape.create(Owner: TComponent);

inherited Create(Owner); //Инициализация унаследованных частей

FPen:=TPen.Create; //Инициализация новых полей

end;

Глава VIII. Процедуры и функции, реализующие диалоги

Delphi предлагает ряд процедур и функций отображающие диалоги общего назначения.

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

Пример: Отображение простейшего окна сообщений.

Procedure TForm1.Button1Click(Sender: TObject);

ShowMessage(‘Простейшее диалоговое окно’);

Функция MessageDlg(const S: String; AType: TMsgDlgType; AButtons:TMcgDlgButtons; HelpCtx: Longint): Word отображает окно сообщений в центре экрана. Она позволяет получить ответ пользователя. Параметр S содержит выводимое сообщение. Тип окна сообщения определяется параметром AType, который принимает следующие значения:

§ mtWarning – окно содержит черный восклицательный знак в желтом треугольнике и заголовок Warning.

§ mtError – окно содержит белый крест в красном круге и заголовок Error.

§ mtInformation –окно содержит букву i синего цвета в белом круге и заголовок Information.

§ mtConfirmation –окно содержит знак ? синего цвета в белом круге и заголовок Confirmation.

§ mtCustom – окно не содержит картинки, в заголовке выводится название исполняемого файла приложения.

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

Название Значение
mbYes Yes
mbNo No
mbOK OK
mbCancel Cancel
mbHelp Help
mbAbort Abort
mbRetry Retry
mbIgnore Ignore
mbAll All
mbYesNoCancel [mbYes,mbNo,mbCancel]
mbOKCancel [mbOK,mbCancel]

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

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

Procedure TForm1.Button1Click(Sender:TObject);

Var rez:TModalResult;

If edit1.text<> DateToStr (Date) then

rez:=MessageDlg(‘Неправильная дата’#13’Исправить автоматически?’, mtError,[mbOK,mbNo],0);

If rez=mrOK then edit1.text:=DateToStr(Date);

If rez=mrNo then edit1.setfocus;

end;

end;

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

Дата добавления: 2015-05-09 ; Просмотров: 201 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Delphi Programming Diary — Jitendra Kumar

Delphi! is my art of programming. This blog contains technical solutions and tips for Delphi programming. I am just trying to share knowledges that I gained from others and which will help others. (Delphi Tokyo/XE7/ XE6 / XE5 / XE4 / XE3 / XE2 / XE, FireMonkey, FireDAC, DataSnap, QuickReport, DevExpress, Woll2Woll, TMS Components, Indy, REMObjects SDK. )

Subscribe to this blog

Follow by Email

Input and Message Dialogs in Delphi

  • Get link
  • Facebook
  • Twitter
  • Pinterest
  • Email
  • Other Apps
  • Get link
  • Facebook
  • Twitter
  • Pinterest
  • Email
  • Other Apps

Comments

Post a Comment

MS Excel Automation in Delphi

In this blog I will describe how to read and write data from and to an Excel file. Sometime in our application we use Excel for reporting purpose, for data import / export purpose and for other works. So here I will explain how to access an Excel file and use for data read / write.

Илон Маск рекомендует:  Что такое код pg_select

For this Excel 2003 or later should have installed in our system.
First use Excel2000 unit to uses clause. This unit comes with Delphi installation it self. You can get the unit in installed path C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\OCX\Servers
Uses Excel2000;
Before proceed I would mention an important word LCID which is required at most places. So what it LCID?
LC > We can get LCID in Delphi by using GetUserDefaultLCID function..
private LCID: Cardinal; . //assigned on …

How to get WINDOWS special directories path in Delphi?

Sometime we need some special directories path from Microsoft Windows system to store User data or to copy some files etc. So we can get those folder paths in Delphi in several ways. In this blog I have tried to cover all the ways. If I have left something please feel free to add comments.
By using Windows API function SHGetFolderPath Delphi provides SHGetFolderPath API function which helps us to get windows system folder paths. We need to use ShlObj unit in uses clause.

For more details about SHGetFolderPath please visit following link SHGetFolderPatch
Here at following I have created a string function GetSpecialFolderPath using SHGetFOlderPath API function which will return all special Windows folder path as per CSIDLFolder value.

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

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

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

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

как использовать 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

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

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.

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