Помещаем ProgressBar в стандартное диалоговое окно
Для воплощения этого замысла проделаем следующее:
- Сначала создадим диалог, используя CreateMessageDialog
- Эта функция возвратит объект формы с диалогом
- В этот объект мы можем добавить ProgressBar
- Также мы добавим объект Timer для динамического обновления позиции
- Отображаем диалог, используя ShowModal
- Обрабатываем событие OnTimer компонента TTimer, чтобы проверить, прошло ли определенное количество секунд, если да, то закрываем диалоговое окно, устанавливая свойство ModalResult в mrCancel
- Если нет, то используем StepIt, чтобы обновить ProgressBar
Поместите кнопку TButton (Button1) на форму (Form1) и напишите следующий код:
procedure TForm1.Button1Click(Sender: TObject) ; var AMsgDialog : TForm; AProgressBar : TProgressBar; ATimer : TTimer; begin AMsgDialog := CreateMessageDialog( 'Быстро! Ответ ДА или НЕТ!', mtWarning, [mbYes, mbNo]) ; AProgressBar := TProgressBar.Create(AMsgDialog) ; ATimer := TTimer.Create(AMsgDialog) ; with AMsgDialog do try Tag := 10; //секунды! Caption := 'У Вас 10 секунд'; Height := 150; with AProgressBar do begin Name := 'Progress'; Parent := AMsgDialog; Max := AMsgDialog.Tag; //секунды Step := 1; Top := 100; Left := 8; Width := AMsgDialog.ClientWidth - 16; end; with ATimer do begin Interval := 1000; OnTimer:=DialogTimer; end; case ShowModal of ID_YES: ShowMessage('Ответил "ДА".') ; ID_NO: ShowMessage('Ответил "НЕТ".') ; ID_CANCEL: ShowMessage('Время вышло!') end;//case finally ATimer.OnTimer := nil; Free; end; end; // Убедитесь, что Вы добавили эту функцию в части private объявления типа TForm1 procedure TForm1.DialogTimer(Sender: TObject) ; var aPB : TProgressBar; begin if NOT (Sender is TTimer) then Exit; if ((Sender as TTimer).Owner) is TForm then with ((Sender as TTimer).Owner) as TForm do begin aPB := TProgressBar(FindComponent('Progress')) ; if aPB.Position >= aPB.Max then ModalResult := mrCancel else aPB.StepIt; end; end;
Обратите внимание: Вам тоже захочется посмотреть!
Комментарии