Difference between revisions of "Dialog Examples/ru"

From Lazarus wiki
Jump to navigationJump to search
m (→‎ShowMessage: OsX -> macOS)
(2 intermediate revisions by 2 users not shown)
Line 2: Line 2:
  
 
= Несколько полезных диалогов=
 
= Несколько полезных диалогов=
Вот некоторые полезные диалоги, которых нет в палитре компонентов:
+
Вот некоторые полезные диалоги, которых нет в [[Component Palette/ru|палитре компонентов]]:
  
* procedure ShowMessage (const Msg: string);
+
* <syntaxhighlight lang="pascal" inline>procedure ShowMessage (const Msg: string);</syntaxhighlight>
* function MessageBox (Text, Caption : PChar; Flags: Word): Integer;
+
* <syntaxhighlight lang="pascal" inline>function MessageBox (Text, Caption : PChar; Flags: Word): Integer;</syntaxhighlight>
* function MessageDlg (const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: LongInt): Word;
+
* <syntaxhighlight lang="pascal" inline>function MessageDlg (const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: LongInt): Word;</syntaxhighlight>
* function InputBox (const ACaption, APrompt, ADefault: string); string;
+
* <syntaxhighlight lang="pascal" inline>function InputBox (const ACaption, APrompt, ADefault: string); string;</syntaxhighlight>
* function InputQuery (const ACaption, APrompt: string; var Value: string): Boolean;
+
* <syntaxhighlight lang="pascal" inline>function InputQuery (const ACaption, APrompt: string; var Value: string): Boolean;</syntaxhighlight>
* function PasswordBox(const ACaption, APrompt : String) : String;
+
* <syntaxhighlight lang="pascal" inline>function PasswordBox(const ACaption, APrompt : String) : String;</syntaxhighlight>
  
 
Каждый из этих компонентов приводит к отображению небольшого всплывающего окна, которое содержит некоторую информацию и требует ответа пользователя: либо нажатия кнопки, либо ввода текста, либо и то и другое. Программист практически не контролирует формат, размер или положение этих всплывающих окон, но может влиять на их текстовое содержимое.
 
Каждый из этих компонентов приводит к отображению небольшого всплывающего окна, которое содержит некоторую информацию и требует ответа пользователя: либо нажатия кнопки, либо ввода текста, либо и то и другое. Программист практически не контролирует формат, размер или положение этих всплывающих окон, но может влиять на их текстовое содержимое.
Line 20: Line 20:
  
 
===ShowMessage===
 
===ShowMessage===
<syntaxhighlight>{ Определено в Dialogs.pp }
+
<syntaxhighlight lang="pascal">
 
procedure ShowMessage(const Msg: string);</syntaxhighlight>
 
procedure ShowMessage(const Msg: string);</syntaxhighlight>
+
{ Определено в Dialogs.pp }
Простейшее диалоговое окно сообщения: принимает в качестве параметра простую строку, отображает ее в стереотипном поле и ожидает события щелчка мышью или клавиши ввода, прежде чем вернуться к вызывающей подпрограмме или программе.  
+
 
 +
Простейшее диалоговое окно сообщения: принимает в качестве параметра простую строку, отображает ее в стереотипном поле и ожидает события щелчка мышью или клавиши ввода, прежде чем вернуться к вызывающей [[Routine/ru|подпрограмме]] или [[Program/ru|программе]].  
  
 
Это модальный вызов процедуры, то есть окно отображается, получает фокус и не оставляет фокус, пока не будет нажата кнопка ОК или не выбрано что-либо иное.
 
Это модальный вызов процедуры, то есть окно отображается, получает фокус и не оставляет фокус, пока не будет нажата кнопка ОК или не выбрано что-либо иное.
Line 29: Line 30:
 
Пример:
 
Пример:
  
<syntaxhighlight>program LazMessage;
+
<syntaxhighlight lang="pascal">program LazMessage;
 
uses  
 
uses  
 
   Dialogs;
 
   Dialogs;
Line 39: Line 40:
 
*sLineBreak
 
*sLineBreak
 
*LineEnding
 
*LineEnding
*или код символьный код: #13#10
+
*или символьный код: #13#10(Windows)/#10(Linux)/#13(macOS)
  
 
'''Пример из нескольких строк:'''
 
'''Пример из нескольких строк:'''
  
<syntaxhighlight>program LazMessage;
+
<syntaxhighlight lang="pascal">program LazMessage;
 
uses  
 
uses  
 
   Dialogs;
 
   Dialogs;
Line 51: Line 52:
  
 
===MessageBox===
 
===MessageBox===
<syntaxhighlight>{ Определено в Forms.pp как часть TApplication; следовательно, должно вызываться как Application.Messagebox()  
+
<syntaxhighlight lang="pascal">{ Определено в Forms.pp как часть TApplication; следовательно, должно вызываться как Application.Messagebox()  
 
или с использованием конструкции 'with Application do ...'}
 
или с использованием конструкции 'with Application do ...'}
  
Line 67: Line 68:
 
Пример:
 
Пример:
  
<syntaxhighlight>uses  
+
<syntaxhighlight lang="pascal">uses  
 
   Forms, Dialogs, LCLType;
 
   Forms, Dialogs, LCLType;
 
   
 
   
Line 87: Line 88:
 
===MessageDLG===
 
===MessageDLG===
  
<syntaxhighlight>function MessageDlg(const aMsg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
+
<syntaxhighlight lang="pascal">function MessageDlg(const aMsg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
 
function MessageDlg(const aCaption, aMsg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;</syntaxhighlight>
 
function MessageDlg(const aCaption, aMsg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;</syntaxhighlight>
  
Line 99: Line 100:
 
Пример:
 
Пример:
  
<syntaxhighlight>uses  
+
<syntaxhighlight lang="pascal">uses  
 
   Forms, Dialogs, LCLType, Controls;
 
   Forms, Dialogs, LCLType, Controls;
 
   
 
   
Line 114: Line 115:
  
 
Пример:
 
Пример:
<syntaxhighlight>
+
<syntaxhighlight lang="pascal">
 
     case QuestionDlg ('Caption','Message',mtCustom,[mrYes,'Positive', mrNo, 'Negative', 'IsDefault'],'') of
 
     case QuestionDlg ('Caption','Message',mtCustom,[mrYes,'Positive', mrNo, 'Negative', 'IsDefault'],'') of
 
         mrYes: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[mrOK,'That is right'],'');
 
         mrYes: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[mrOK,'That is right'],'');
Line 128: Line 129:
  
 
Расширенные примеры для кнопок  (из файла promptdialog.inc)
 
Расширенные примеры для кнопок  (из файла promptdialog.inc)
<syntaxhighlight>
+
<syntaxhighlight lang="pascal">
 
     [mrOk,mrCancel,'Cancel now',mrIgnore,300,'Do it','IsDefault']
 
     [mrOk,mrCancel,'Cancel now',mrIgnore,300,'Do it','IsDefault']
 
</syntaxhighlight>
 
</syntaxhighlight>
Line 139: Line 140:
 
Обычно кнопки в диалогах Lazarus имеют значки. Для предотвращения отображения значков можно использовать нестандартизированные значения для результатов сообщения. В настоящее время наибольшее стандартизированное значение равно 11. Например:
 
Обычно кнопки в диалогах Lazarus имеют значки. Для предотвращения отображения значков можно использовать нестандартизированные значения для результатов сообщения. В настоящее время наибольшее стандартизированное значение равно 11. Например:
  
<syntaxhighlight>
+
<syntaxhighlight lang="pascal">
 
   case QuestionDlg ('Caption','Message',mtCustom,[20,'Positive', 21, 'Negative',22,'I do not know','IsCancel'],'') of
 
   case QuestionDlg ('Caption','Message',mtCustom,[20,'Positive', 21, 'Negative',22,'I do not know','IsCancel'],'') of
 
     20: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[20,'That is right'],'');
 
     20: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[20,'That is right'],'');
Line 148: Line 149:
  
 
Для облегчения работы можно определить константы. Например:
 
Для облегчения работы можно определить константы. Например:
<syntaxhighlight>
+
<syntaxhighlight lang="pascal">
 
const
 
const
 
   mrNoneNI=      20;
 
   mrNoneNI=      20;
Line 177: Line 178:
 
Диалоги ввода текста: отображение сообщения и ожидание ввода текста пользователем
 
Диалоги ввода текста: отображение сообщения и ожидание ввода текста пользователем
  
<syntaxhighlight>function InputBox(const ACaption, APrompt, ADefault: String): String;</syntaxhighlight>
+
<syntaxhighlight lang="pascal">function InputBox(const ACaption, APrompt, ADefault: String): String;</syntaxhighlight>
  
 
Отображает поле с определенным заголовком и приглашением, и ожидает ввода пользователя в текстовом поле. По умолчанию строка может быть отображена в текстовом поле. Введенная пользователем строка или строка по умолчанию возвращается как результат функции.
 
Отображает поле с определенным заголовком и приглашением, и ожидает ввода пользователя в текстовом поле. По умолчанию строка может быть отображена в текстовом поле. Введенная пользователем строка или строка по умолчанию возвращается как результат функции.
Line 183: Line 184:
 
Пример:
 
Пример:
  
<syntaxhighlight>uses  
+
<syntaxhighlight lang="pascal">uses  
 
   Forms, LCLType, Dialogs, Controls;
 
   Forms, LCLType, Dialogs, Controls;
 
   
 
   
Line 195: Line 196:
  
 
===InputQuery===
 
===InputQuery===
<syntaxhighlight>function InputQuery(const ACaption, APrompt : String; MaskInput : Boolean; var Value : String) : Boolean;
+
<syntaxhighlight lang="pascal">function InputQuery(const ACaption, APrompt : String; MaskInput : Boolean; var Value : String) : Boolean;
 
function InputQuery(const ACaption, APrompt : String; var Value : String) : Boolean;</syntaxhighlight>
 
function InputQuery(const ACaption, APrompt : String; var Value : String) : Boolean;</syntaxhighlight>
  
Line 202: Line 203:
 
Пример:
 
Пример:
  
<syntaxhighlight>uses  
+
<syntaxhighlight lang="pascal">uses  
 
   Forms, LCLType, Dialogs, Controls;
 
   Forms, LCLType, Dialogs, Controls;
 
   
 
   
Line 223: Line 224:
  
 
===PasswordBox===
 
===PasswordBox===
<syntaxhighlight>Function PasswordBox(const ACaption, APrompt : String) : String;</syntaxhighlight>
+
<syntaxhighlight lang="pascal">Function PasswordBox(const ACaption, APrompt : String) : String;</syntaxhighlight>
  
 
Ведет себя очень похоже на функцию InputQuery с MaskInput = TRUE; разница в том, что введенный пароль возвращается как результат функции (как в InputBox).
 
Ведет себя очень похоже на функцию InputQuery с MaskInput = TRUE; разница в том, что введенный пароль возвращается как результат функции (как в InputBox).
Line 233: Line 234:
 
целочисленные константы для определения типов кнопок и иконки для отображения в MessageBox
 
целочисленные константы для определения типов кнопок и иконки для отображения в MessageBox
  
<syntaxhighlight>
+
<syntaxhighlight lang="pascal">
 
const { Defined in LCLType.pp }
 
const { Defined in LCLType.pp }
  
Line 254: Line 255:
 
целочисленные константы, определяющие возвращаемое значение из MessageBox в зависимости от того, какая кнопка была нажата
 
целочисленные константы, определяющие возвращаемое значение из MessageBox в зависимости от того, какая кнопка была нажата
  
<syntaxhighlight>IDOK = 1; ID_OK = IDOK;
+
<syntaxhighlight lang="pascal">
 +
IDOK = 1; ID_OK = IDOK;
 
IDCANCEL = 2; ID_CANCEL = IDCANCEL;
 
IDCANCEL = 2; ID_CANCEL = IDCANCEL;
 
IDABORT = 3; ID_ABORT = IDABORT;
 
IDABORT = 3; ID_ABORT = IDABORT;
Line 266: Line 268:
 
определяет, будет ли первая, вторая или третья кнопка по умолчанию
 
определяет, будет ли первая, вторая или третья кнопка по умолчанию
  
<syntaxhighlight>MB_DEFBUTTON1 = $00000000;
+
<syntaxhighlight lang="pascal">
 +
MB_DEFBUTTON1 = $00000000;
 
MB_DEFBUTTON2 = $00000100;
 
MB_DEFBUTTON2 = $00000100;
 
MB_DEFBUTTON3 = $00000200;
 
MB_DEFBUTTON3 = $00000200;
Line 274: Line 277:
  
 
Типы для использования в MessageDlg, для которого требуются параметры AType TMsgDlgType и AButtons of TMSgDlgButtons
 
Типы для использования в MessageDlg, для которого требуются параметры AType TMsgDlgType и AButtons of TMSgDlgButtons
<syntaxhighlight>{ Defined in Dialogs.pp }
+
<syntaxhighlight lang="pascal">
 +
{ Defined in Dialogs.pp }
 
type
 
type
 
   TMsgDlgType    = (mtWarning, mtError, mtInformation,  mtConfirmation,
 
   TMsgDlgType    = (mtWarning, mtError, mtInformation,  mtConfirmation,

Revision as of 01:48, 27 January 2020

Deutsch (de) English (en) español (es) suomi (fi) français (fr) 日本語 (ja) polski (pl) русский (ru) slovenčina (sk) 中文(中国大陆)‎ (zh_CN)

Несколько полезных диалогов

Вот некоторые полезные диалоги, которых нет в палитре компонентов:

  • procedure ShowMessage (const Msg: string);
  • function MessageBox (Text, Caption : PChar; Flags: Word): Integer;
  • function MessageDlg (const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: LongInt): Word;
  • function InputBox (const ACaption, APrompt, ADefault: string); string;
  • function InputQuery (const ACaption, APrompt: string; var Value: string): Boolean;
  • function PasswordBox(const ACaption, APrompt : String) : String;

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

Причина, по которой часто существует несколько очень похожих альтернатив, заключается в том, что разные методы могут вызывать компонент и получать данные обратно из процедуры или функции. Эти диалоги могут быть «платформозависимыми», то есть они могут отображаться по-разному. Например, строки, которые полностью отображаются в Windows XP, могут быть усечены в Windows 7.

Диалоги сообщений

Диалоги сообщений отображают сообщение и ждут реакции [пользователя в виде] нажатия клавиши или щелчка мыши.

ShowMessage

procedure ShowMessage(const Msg: string);

{ Определено в Dialogs.pp }

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

Это модальный вызов процедуры, то есть окно отображается, получает фокус и не оставляет фокус, пока не будет нажата кнопка ОК или не выбрано что-либо иное.

Пример:

program LazMessage;
uses 
  Dialogs;
begin
  ShowMessage('Это сообщение от Lazarus');
end.

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

  • sLineBreak
  • LineEnding
  • или символьный код: #13#10(Windows)/#10(Linux)/#13(macOS)

Пример из нескольких строк:

program LazMessage;
uses 
  Dialogs;
begin
  ShowMessage('Это - многострочное' + sLineBreak + 'сообщение!' );
end.

MessageBox

{ Определено в Forms.pp как часть TApplication; следовательно, должно вызываться как Application.Messagebox() 
или с использованием конструкции 'with Application do ...'}

function Application.MessageBox(Text, Caption: PChar; Flags: LongInt): Integer;

Параметры включают

  • Text: строка, которая отображается как приглашение или инструкция в поле;
  • Caption: строка заголовка в верхней части окна сообщения;
  • Flags: longint - целое число, построенное путем сложения различных констант, для определения содержимого и поведения блока, например, MB_ABORTRETRYIGNORE + MR_ICONQUESTION заставит приложение отображать значок запроса (?) в поле с тремя кнопками: ABORT RETRY IGNORE.

Функция возвращает целочисленное значение, соответствующее нажатой кнопке; его значение может быть определено с помощью констант[IDOK..IDHELP] Она может быть вызвана как вызов процедуры (то есть как оператор 'MessageBox()', а не как вызов функции 'Variable:= MessageBox()' - см. Пример ниже)

Пример:

uses 
  Forms, Dialogs, LCLType;
 
procedure DisplayMessageBox;
var 
  Reply, BoxStyle: Integer;
begin
  BoxStyle := MB_ICONQUESTION + MB_YESNO;
  Reply := Application.MessageBox('Press either button', 'MessageBoxDemo', BoxStyle);
  if Reply = IDYES then Application.MessageBox('Yes       ', 'Reply',MB_ICONINFORMATION)
    else Application.MessageBox('No         ', 'Reply', MB_ICONHAND);
end;

Обратите внимание, что в этом примере строки 'Yes' и 'No' были дополнены пробелами; в противном случае поле не будет достаточно широким, чтобы правильно отображать заголовок

MessageBoxDemo.png ReplyYes.png

MessageDLG

function MessageDlg(const aMsg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
function MessageDlg(const aCaption, aMsg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;

Две версии этой функции, то есть первый параметр 'Caption' является необязательным; если пропущено, заголовок отсутствует в поле

Это наиболее полный и продуманный диалог сообщений, который позволяет программисту значительно контролировать внешний вид диалогового окна. Параметры, определяющие тип поля и его значка, являются типами, а не целочисленными константами, и кнопки можно указывать в виде набора в квадратных скобках, например [mbRetry, mbIgnore, mbAbort, mbCancel]. Параметр HelpCtx в настоящее время не реализован и должен быть установлен в ноль. Возвращаемое значение из функции - это идентификатор нажатой кнопки, выраженный в виде целого числа (см. определения ниже, [mrNone..mrAll]).

Пример:

uses 
  Forms, Dialogs, LCLType, Controls;
 
procedure TryMessageDlg;
begin
  if MessageDlg('Question', 'Do you wish to Execute?', mtConfirmation, [mbYes, mbNo, mbIgnore],0) = mrYes
  then { выполнить оставшуюся часть программы };
end;

Question.png

QuestionDlg

Диалог вопросов позволяет изменять заголовки кнопок и устанавливать кнопки по умолчанию и отмены.

Пример:

    case QuestionDlg ('Caption','Message',mtCustom,[mrYes,'Positive', mrNo, 'Negative', 'IsDefault'],'') of
        mrYes: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[mrOK,'That is right'],'');
        mrNo:  QuestionDlg ('Caption','Oh, you mean „No“',mtCustom,[mrOK,'Exactly'],'');
        mrCancel: QuestionDlg ('Caption','You canceled the dialog with ESC or close button.',mtCustom,[mrOK,'Exactly'],'');
    end;

QuestionDlg.png

Light bulb  Примечание: Если пользователь отменяет диалог, и кнопка 'IsCancel' не определена, возвращается mrCancel! Если вы хотите перенаправить ESC/закрыть на определенную кнопку, используйте параметр 'IsCancel' сразу после кнопки отмены
Light bulb  Примечание: Использование букв местного алфавита в типе UnicodeString в качестве заголовков кнопок может привести к ошибкам (замечено в V1.6.4).

Расширенные примеры для кнопок (из файла promptdialog.inc)

    [mrOk,mrCancel,'Cancel now',mrIgnore,300,'Do it','IsDefault']

Это приведет к отображению 4 кнопок:

  • 'Ok' возвращает mrOk
  • 'Cancel now' возвращает mrCancel
  • 'Ignore' возвращает mrIgnore
  • 'Do it' возвращает 300. Это будет кнопка по умолчанию (в фокусе)

Обычно кнопки в диалогах Lazarus имеют значки. Для предотвращения отображения значков можно использовать нестандартизированные значения для результатов сообщения. В настоящее время наибольшее стандартизированное значение равно 11. Например:

  case QuestionDlg ('Caption','Message',mtCustom,[20,'Positive', 21, 'Negative',22,'I do not know','IsCancel'],'') of
     20: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[20,'That is right'],'');
     21:  QuestionDlg ('Caption','Oh, you mean „No“',mtCustom,[21,'Exactly'],'');
     22:  QuestionDlg ('Caption','So, please find out!',mtCustom,[22,'Maybe'],'');
  end;

Для облегчения работы можно определить константы. Например:

const
  mrNoneNI=      20;
  mrOkNI=        mrNoneNI+1;
  mrCancelNI=    mrNoneNI+2;
  mrAbortNI=     mrNoneNI+3;
  mrRetryNI=     mrNoneNI+4;
  mrIgnoreNI=    mrNoneNI+5;
  mrYesNI=       mrNoneNI+6;
  mrNoNI=        mrNoneNI+7;
  mrAllNI=       mrNoneNI+8;
  mrYesToAllNI=  mrNoneNI+10;
  mrCloseNI=     mrNoneNI+11;
  mrLastNI=      mrCloseNI; 
begin
  case QuestionDlg ('Caption','Message',mtCustom,[mrYesNI,'Positive', mrNoNI, 'Negative',mrCancelNI,'I do not know','IsCancel'],'') of
    mrYesNI: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[mrYesNI,'That is right'],'');
    mrNoNI:  QuestionDlg ('Caption','Oh, you mean „No“',mtCustom,[mrNoNI,'Exactly'],'');
    mrCancelNI:  QuestionDlg ('Caption','So, please find out!',mtCustom,[mrCancelNI,'Maybe'],'');
  end; //case
end;

QuestionDlgNoButIcons.png

Диалоги ввода текста

InputBox

Диалоги ввода текста: отображение сообщения и ожидание ввода текста пользователем

function InputBox(const ACaption, APrompt, ADefault: String): String;

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

Пример:

uses 
  Forms, LCLType, Dialogs, Controls;
 
procedure TryInputBox;
var 
  UserString: string;
begin
  UserString := InputBox('Get some text input','Please type in some information', 'Some sample text');
  ShowMessage(UserString)
end;

InputQuery

function InputQuery(const ACaption, APrompt : String; MaskInput : Boolean; var Value : String) : Boolean;
function InputQuery(const ACaption, APrompt : String; var Value : String) : Boolean;

Две версии этой функции, которая отображает подсказку и ожидает ввода пользователем текстовых данных; первый включает в себя логический параметр MaskInput, который определяет, маскируется ли пользовательский ввод звездочками в поле ввода текста (например, при вводе пароля), а второй пропускает это свойство. Текст, введенный пользователем, возвращается в переменном параметре 'Value'(Значение); результатом функции является логическое значение, которое возвращает TRUE, если была нажата кнопка OK, или FALSE, если окно было закрыто любым другим механизмом (например, нажатием на значок 'Close'(Закрыть) в верхней строке заголовка). Пропуск параметра MaskInput эквивалентен установке его в значение FALSE.

Пример:

uses 
  Forms, LCLType, Dialogs, Controls;
 
procedure TryInputQuery;
var 
  QueryResult: Boolean;
  UserString: string;
begin
  if InputQuery('Question', 'Type in some data', TRUE, UserString)
  then ShowMessage(UserString)
  else 
  begin
    InputQuery('Don''t be silly', 'Please try again', UserString);
    ShowMessage(UserString);
  end
end;

MessageDlgQuestion.png DontBeSillly.png

PasswordBox

Function PasswordBox(const ACaption, APrompt : String) : String;

Ведет себя очень похоже на функцию InputQuery с MaskInput = TRUE; разница в том, что введенный пароль возвращается как результат функции (как в InputBox).

Константы и типы, используемые в диалогах сообщений

Несколько констант и типов, относящихся к использованию с диалоговыми окнами, предварительно определены в библиотеке LCL:

целочисленные константы для определения типов кнопок и иконки для отображения в MessageBox

const { Defined in LCLType.pp }

MB_OK = $00000000;
MB_OKCANCEL = $00000001;
MB_ABORTRETRYIGNORE = $00000002;
MB_YESNOCANCEL = $00000003;
MB_YESNO = $00000004;
MB_RETRYCANCEL = $00000005;

 
MB_ICONHAND = $00000010;
MB_ICONQUESTION = $00000020;
MB_ICONEXCLAMATION = $00000030;
MB_ICONASTERICK = $00000040;
MB_ICONWARNING = MB_ICONEXCLAMATION;
MB_ICONERROR = MB_ICONHAND;
MB_ICONINFORMATION = MB_ICONASTERICK;

целочисленные константы, определяющие возвращаемое значение из MessageBox в зависимости от того, какая кнопка была нажата

IDOK = 1; 	ID_OK = IDOK;
IDCANCEL = 2;	ID_CANCEL = IDCANCEL;
IDABORT = 3;	ID_ABORT = IDABORT;
IDRETRY = 4;	ID_RETRY = IDRETRY;
IDIGNORE = 5;	ID_IGNORE = IDIGNORE;
IDYES = 6;	ID_YES = IDYES;
IDNO = 7;	ID_NO = IDNO;
IDCLOSE = 8;	ID_CLOSE = IDCLOSE;
IDHELP = 9;	ID_HELP = IDHELP;

определяет, будет ли первая, вторая или третья кнопка по умолчанию

MB_DEFBUTTON1 = $00000000;
MB_DEFBUTTON2 = $00000100;
MB_DEFBUTTON3 = $00000200;
MB_DEFBUTTON4 = $00000300;

Параметр Flags MessageBox создается путем добавления константы кнопки [MB_OK..MB_RETRYCANCEL], необязательной константы значка [MB_ICONHAND..MB_ICONINFORMATION] и необязательной постоянной кнопки по умолчанию [MB_DEFBUTTON1..MB_DEFBUTTON3]

Типы для использования в MessageDlg, для которого требуются параметры AType TMsgDlgType и AButtons of TMSgDlgButtons

{ Defined in Dialogs.pp }
type
  TMsgDlgType    = (mtWarning, mtError, mtInformation,  mtConfirmation,
                    mtCustom);
  TMsgDlgBtn     = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,
                   mbAll, mbNoToAll, mbYesToAll, mbHelp, mbClose);
  TMsgDlgButtons = set of TMsgDlgBtn;
  
 
const
  mbYesNoCancel = [mbYes, mbNo, mbCancel];
  mbOKCancel = [mbOK, mbCancel];
  mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];
  
 
  MsgDlgBtnToBitBtnKind: array[TMsgDlgBtn] of TBitBtnKind = (
   bkYes, bkNo, bkOK, bkCancel, bkAbort, bkRetry, bkIgnore,
    bkAll, bkNoToAll, bkYesToAll, bkHelp, bkClose
   );
 
 
  BitBtnKindToMsgDlgBtn: array[TBitBtnKind] of TMsgDlgBtn = (
    mbOk, mbOK, mbCancel, mbHelp, mbYes, mbNo,
    mbClose, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToALl, mbYesToAll
    );
 
 
{ Defined in Controls.pp }
const
  mrNone = 0;
  mrOK = mrNone + 1;
  mrCancel = mrNone + 2;
  mrAbort = mrNone + 3;
  mrRetry = mrNone + 4;
  mrIgnore = mrNone + 5;
  mrYes = mrNone + 6;
  mrNo = mrNone + 7;
  mrAll = mrNone + 8;
  mrNoToAll = mrNone + 9;
  mrYesToAll = mrNone + 10;
  mrLast = mrYesToAll;