Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Задать кнопку по умолчанию для диалога

Delphi , Программа и Интерфейс , Диалоги и Фреймы

Задать кнопку по умолчанию для диалога

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

function DefMessageDlg(const ACaption: string;
   const Msg: string;
   DlgType: TMsgDlgType;
   Buttons: TMsgDlgButtons;
   DefButton: Integer;
   HelpCtx: Longint): Integer;
 var
   i: Integer;
   btn: TButton;
 begin
   with CreateMessageDialog(Msg, DlgType, Buttons) do
     try
       Caption := ACaption;
       HelpContext := HelpCtx;
       for i := 0 to ComponentCount - 1 do
       begin
         if (Components[i] is TButton) then
         begin
           btn := TButton(Components[i]);
           btn.default := btn.ModalResult = DefButton;
           if btn.default then ActiveControl := btn;
         end;
       end;
       Result := ShowModal;
     finally
       Free;
     end;
 end;

 // Sets the focus on the "No"-Button 
// Setzt den Fokus auf den "Nein"-Button 

procedure TForm1.Button1Click(Sender: TObject);
 begin
   if DefMessageDlg('Title',
     '....?',
     mtConfirmation,
     mbYesNoCancel,
     mrNo,
     0) = mrYes then
     ShowMessage('....');
 end;

Переведенный текст:

Код - функция Delphi под именем DefMessageDlg, которая создает и отображает окно сообщения с указанным заголовком, сообщением, типом (подтверждение, ошибка и т.д.), кнопками, стандартной кнопкой и контекстом помощи. Стандартная кнопка устанавливается в соответствие с параметром DefButton.

Разбивка кода:

  1. Создает новый объект TMessageDialog с помощью предоставленных параметров.
  2. Устанавливает заголовок окна сообщения в значение, указанное в параметре ACaption.
  3. Устанавливает контекст помощи для окна сообщения в значение, указанное в параметре HelpCtx.
  4. Перебирает все компоненты на окне сообщения, проверяя каждый компонент на тип TButton.
  5. Для каждого TButton, он проверяет, если модальный результат кнопки соответствует значению параметра DefButton. Если это так, он устанавливает свойство по умолчанию для кнопки в True. Это означает, что эта кнопка будет выделена как стандартный выбор.
  6. Наконец, оно отображает окно сообщения модально с помощью метода ShowModal и возвращает результат (который является модальным результатом кнопки, нажатой пользователем).

Вторая часть кода - процедура под именем Button1Click, которая определяется. Эта процедура вызывается, когда контроль Button1 на форме кликнут.

Разбивка кода:

  1. Он вызывает функцию DefMessageDlg с указанными параметрами для отображения диалогового окна подтверждения.
  2. Если пользователь кликнул кнопку "Да" (которая была установлена как стандартная кнопка с помощью функции DefMessageDlg), процедура отображает сообщение с текстом '....'.

Чтобы установить кнопку как стандартную для диалогового окна, вы можете использовать параметр DefButton в функции DefMessageDlg. Например, если вы хотите установить кнопку "Нет" как стандартную, вы бы передали mrNo в качестве значения параметра DefButton.

Альтернативное решение с более компактным кодом:

function DefMessageDlg(const ACaption: string; const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons): Integer;
var
  btn: TButton;
begin
  Result := MessageDialog(Msg, DlgType, Buttons);
  for i := 0 to MessageDialog.ComponentCount - 1 do
    if (MessageDialog.Components[i] is TButton) then
      TButton(MessageDialog.Components[i]).Default := TButton(MessageDialog.Components[i]).ModalResult = mbNo;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if DefMessageDlg('Title', '....?', mtConfirmation, mbYesNoCancel) = mrYes then
    ShowMessage('....');
end;

В этом коде функция DefMessageDlg упрощается путем прямого вызова функции MessageDialog и установки свойства по умолчанию для каждой кнопки в цикле.

В статье описывается функция DefMessageDlg для создания диалогового окна с кнопками "Да", "Нет" и "Отменить" и выбором по умолчанию одной из этих кнопок.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Диалоги и Фреймы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:02:30/0.0055789947509766/1