Програмування в
ІТ профілі
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Поиск
Календарь
«  Апрель 2024  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930
Друзья сайта
  • Создать сайт
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Все проекты компании
  • Воскресенье, 28.04.2024, 20:07
    Приветствую Вас Гость | RSS
    Главная | Регистрация | Вход
    Діалогові вікна в Delphi

    У тих випадках, коли прикладній програмі у процесі її функціонування необхідно так чи інакше привертати увагу користувача до якихось подій усередині додатка або операційної системи, необхідну інформацію можна виводити в діалогові вікна, як наприклад, при запиті на збереження оброблюваних даних.

    Найпростіший спосіб - procedure ShowMessage(const Msg: String) з модуля Dialogs.pas. Текст повідомлення, укладений в одинарних лапках і може містити не більше 255 символів.

    Приклад із введенням у TEdit:

    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
    if Key in ['А'..'я'] then begin 
    Key:=#0;
    Beep; // Наше повідомлення:
    ShowMessage('Перейдіть на англійську розкладку');
    end;
    end;

    Користувач побачить попередження з тим же заголовком, що його має проект. Віконце буде містити одну кнопку "ОК", що відповідає тільки за закриття повідомлення; тому з нею не можна пов'язати якусь функцію.

    Розширити наші можливості має
    function MessageDlg(const Msg: String; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: integer): integer :

    Msg - 'Текст повідомлення'
    DlgType - Вигляд діалогового вікна.

    Назва параметра Значок
    mtWarning 
    mtError 
    mtInformation 
    mtConfirmation 
    mtCustom Значка немає

    Buttons - кнопки діалогового вікна: mbYes, mbNo, MbCancel, mbRetry, mbAbort, mbOk, mbIgnore, mbHelp, mbAll, mbYesToAll, mbNoToAll - та готові комбінації з них: mbYesNoCancel, mbOKCancel, mbYesAllNoAllCancel, mbAbortRetryIgnore, bmAbortIgnore.
    Якщо потрібно скористатися однієї з цих готових закладок, пишуть, наприклад: mbYesNoCancel; при потребі сполучити кілька - вводять параметри в квадратних дужках через кому: [mbYes, mbYesToAll]; якщо одну - теж: [mbIgnore]
    HelpCtx залишіть рівним нулю і більше про нього не згадуйте

    Тепер створимо приклад. У OnCreate чи, ще краще, у OnCloseQuery (закладка Events у Form1) пропишіть:

    Beep; //привертаємо увагу користувача
    MessageDlg('Натисніть ОК, щоб закрити додаток', mtInformation, mbOKCancel, 0);


    Подивилися? Ах так, що ОК натискай, що Cancel - програма все рівно закривається. Щоб система реагувала на натискання кнопок, скористаємося обробником case...of.
     

    procedure 
    TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
    case 
    MessageDlg('Натисніть ОК, щоб закрити додаток',mtInformation,mbOkCancel,0) 
    of
    idOk: Application.Terminate;
    idCancel: 
    Abort;
    end;
    end;
    

    Відповідно до механізмів Delphi, функція MessageDlg повертає значення свого результату - натиснутої клавіші - integer (простої число), що зчитується оброблювачем case...of. Не забудьте в синтаксисі цього обробника вживати id_назва_кнопки замість mb_назва_кнопки
    Тільки от клавіші діалогового вікна англійські. Але і це не лихо. 

    Перейдемо до function MessageBox(Parent: HWnd; Txt, Caption: PChar; TextType: Word): Integer, де

    Parent - "хазяїн" (вікно, що володіє повідомленням) - указуйте Form1.handle чи Application.handle;
    Txt - 'текст повідомлення';
    Caption - 'його заголовок';
    TextType - параметр, що поєднує DlgType і Buttons у попередній функції

    MessageBox не тільки використовує не стандартні англійські кнопки, а їхні русифіковані еквіваленти з ресурсів Windows, але й генерує при виникненні звуковий сигнал, що відповідає параметру TextType.
     

    Значення TextType

    Вигляд іконки

    Кнопки
    0

    ОК
    1 - ОК, Скасувати
    2 - Стоп, Повтор, Пропустити
    3 - Так, Ні, Скасувати
    4 - Так, Ні
    5 - Повтор, Скасувати
    16  Error ОК
    17 Error ОК, Скасувати
    18 Error Стоп, Повтор, Пропустити
    19 Error Так, Ні, Скасувати
    20 Error Так, Ні
    21 Error Повтор, Скасувати
    32 Confirmation ОК
    33 Confirmation ОК, Скасувати
    34  Confirmation Стоп, Повтор, Пропустити
    35 Confirmation Так, Ні, Скасувати
    36 Confirmation Так, Ні
    37 Confirmation Повтор, Скасувати
    48 Warning ОК
    49 Warning ОК, Скасувати
    50 Warning Стоп, Повтор, Пропустити
    51 Warning Так, Ні, Скасувати
    52 Warning Так, Ні
    53 Warning Повтор, Скасувати
    64 Information ОК
    65 Information ОК, Скасувати
    66 Information Стоп, Повтор, Пропустити
    67 Information Так, Ні, Скасувати
    68 Information Так, Ні
    69 Information Повтор, Скасувати

    MessageBox знаходиться в модулі Windows.pas і тому може використовуватися для подачі повідомлень також й у консольних додатках. Для прикладу розробим додаток для видачі повідомлення:
    Відкрити File>New>Other> та оберати Console Application.
    Delphi створить макет.
    Залишити у Uses один модуль Windows та нижче продекларувати параметр var h: hwnd.

    При компіляції може з'явитися попередження, що ця змінна не має початкового значення, але виконуваний файл створюється (у Delphi 6, принаймі).

    program Project1;
    uses Windows;
    var h: hwnd;
     begin
     MessageBox(h,'Приклад консольного додатка з діалогом ..',
     'Delphi для всіх',1);
     end.
    

    У додатках під Win32 (з формою) не слід вводити змінну h, а відразу в дужках можна написати: Form1.handle. Повідомлення користувача можна відправити нашій програмі за допомогою функції InputBox. Зараз ми створимо повідомлення з рядком уведення:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
     Form1.Caption:=InputBox('Змінити заголовок', 
     'Введіть текст заголовка форми', 'Ваш_заголовок');
    end;
    

    Крім цих функцій є функції ShowMessagePos, MessageDlgPos з додатковими параметрами, що позначаються X і Y. Ці параметри задають координати віконечка повідомлення на екрані.

    Куликівська ЗОШ І-ІІІ ст. © 2024
    Сделать бесплатный сайт с uCoz