Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.06.2015, 15:32
Jenyok Jenyok вне форума
Прохожий
 
Регистрация: 11.06.2015
Сообщения: 3
Версия Delphi: Embarcadero XE3
Репутация: 10
По умолчанию Кнопка с таймером

Есть основная форма программы.
В основной форме программы вызывается дополнительная форма с двумя кнопками "Да", "Нет".
.
Как сделать, чтобы дополнительная форма закрывалась через определенное время и чтобы в нужной кнопке, например кнопке "Да", тикал таймер в обратном отсчете, т.е. текст кнопки динамически менялся, например, 10 сек, 9 сек, 8 сек, и так далее, после чего форма автоматически закрывалась с ответом "Да" или закрывалась по нажатию клавиши не дожидаясь таймера, или, если наоборот, таймер в кнопке "Нет", с ответом "Нет". А также дополнительная форма закрывалась при нажатии на крестик формы с выбранным по умолчанию ответом, например "Да" и остановкой таймера.
.
Заранее благодарен.
.
Хотелось бы увидеть код на Delphi .
.

Последний раз редактировалось Jenyok, 11.06.2015 в 15:38.
Ответить с цитированием
  #2  
Старый 11.06.2015, 21:12
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Вот для затравки пример из книги "Delphi для чайников"
Код:
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption := TimeToStr(Now);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1Timer(Timer1);
end;
Таймер тикает раз в секунду. Label1 отображает время.
Попробуйте остальное дописать сами.
Для обратного отсчёта надо от текущего времени отнимать время старта.
Ответить с цитированием
  #3  
Старый 12.06.2015, 16:08
Jenyok Jenyok вне форума
Прохожий
 
Регистрация: 11.06.2015
Сообщения: 3
Версия Delphi: Embarcadero XE3
Репутация: 10
По умолчанию

Прикольненько получилось.
.
Код:
unit Unit1;

interface

uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, Buttons;

type
  TForm1 = class(TForm)
    Button1  : TButton;
    Button2  : TBitBtn;
    procedure Button2Click(Sender: TObject);
  private
  { Private declarations }
    procedure OnTimer(Sender: TObject);
  public
  { Public declarations }
  end;

var
  Form1 : TForm1;

implementation

{$R *.dfm}

const
  MsgText        = #10'ВНИМАНИЕ !!!'#10#10'Есть неотправленная отчетность 364-П !'#10#10'Запустить отправку почты (АСТРА) ?'#10#10'НЕТ - через %d секунд(ы).'#10;
  MsgCaption     = 'Осталось %d секунд';
  BtnCaption     = 'ОK (%d сек.)';
  MsgBtnCaption1 = 'Да - %d сек.';
  MsgBtnCaption2 = 'Нет - %d сек.';

var
  MyMsgDialog : TForm;
  Sec         : Integer;

procedure TForm1.OnTimer(Sender: TObject);
var
  Control : TControl;
begin
  with MyMsgDialog do
    begin
      Caption:=Format(MsgCaption, [Sec]);

      TButton(FindComponent('Yes')).Caption:=Format(MsgBtnCaption1, [Sec]);
      TButton(FindComponent('Cancel')).Caption:=Format(MsgBtnCaption2, [Sec]);

      TLabel(FindComponent('Message')).Alignment:=taCenter;
      TLabel(FindComponent('Message')).Caption:=Format(MsgText, [Sec]);
    end;
  Button2.Caption:=Format(BtnCaption, [Sec]);
  if (Sec = 0) then
    begin
      MyMsgDialog.ModalResult:=ID_OK;
      Button2.Caption:='ОК'
    end;
  Dec(Sec);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Timer   : TTimer;
  Control : TControl;
  Btn1X   : Integer;
begin
// Создаем диалог
  MyMsgDialog:=CreateMessageDialog(MsgText, mtWarning, [mbYes, mbCancel]);

// Создаем таймер
  Timer:=TTimer.Create(MyMsgDialog);
  Timer.Enabled:=False;

// 10 - это кол-во секунд до закрытия
  Sec:=10;
  with MyMsgDialog do
    begin
      try
        Caption:='';
        Width:=400;
//        Height:=300;

        Font.Color:=clRed;
//        Font.Size:=12;

        Control:=FindChildControl('Yes');
        if ((Control <> nil) and (Control is TButton)) then
          begin
            (Control as TButton).Left:=25;
            Btn1X:=(Control as TButton).Left;
            (Control as TButton).Width:=100;
            (Control as TButton).Caption:='Да';
          end;
        Control:=FindChildControl('Cancel');
        if ((Control <> nil) and (Control is TButton)) then
          begin
            (Control as TButton).Left:=Btn1X + 200;
            (Control as TButton).Width:=100;
            (Control as TButton).Caption:='Нет';
          end;


// Задаем параметры таймера
        Timer.Enabled:=True;
        Timer.OnTimer:=OnTimer;
        OnTimer(Self);
// Показываем окно как модальное
        case ShowModal of
          ID_OK, ID_YES : begin
                            Button2.Caption:='ОК - Да';
                            MyMsgDialog.Close;
                          end;
          ID_CANCEL : begin
                        Button2.Caption:='ОК - Нет';
                      end;
        end;
      finally
// Освобождаем переменные
        Timer.Free;
        Free;
      end;
    end;
end;

end.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:43.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter