Показать сообщение отдельно
  #7  
Старый 28.12.2011, 13:37
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
type
  TWhatTimer = class
  private
    FTimer: TTimer;
    FLabeledEdit: TLabeledEdit;
    procedure SetOnTimer(Sender: TNotifyEvent);
    procedure InnerOnTimer(Sender: TObject);
  public
    property OnTimer: TNotifyEvent write SetOnTimer;
    constructor Create(ALabeledEdit: TLabeledEdit);
    destructor Destroy; override;
  end;

constructor TWhatTimer.Create(ALabeledEdit: TLabeledEdit);
begin
  inherited Create;
  FLabeledEdit:=ALabeledEdit;
  FTimer:=TTimer.Create(nil);
  FTimer.Interval:=500;
  FTimer.OnTimer:=InnerOnTimer; // назначаем внутренний обработчик (default)
end;

destructor TWhatTimer.Destroy;
begin
  FTimer.Free;
  inherited Destroy;
end;

procedure TWhatTimer.InnerOnTimer(Sender: TObject);
begin
  // внутренний обработчик событий
  FLabeledEdit.Text:=IntToStr(FLabeledEdit.Tag);
  FLabeledEdit.Tag:=FLabeledEdit.Tag+1;
end;

procedure TWhatTimer.SetOnTimer(Sender: TNotifyEvent);
begin
  if Assigned(Sender) then FTimer.OnTimer:=Sender
  else FTimer.OnTimer:=InnerOnTimer;
end;

использование:

Код:
  TForm1 = class(TForm)
    LabeledEdit1: TLabeledEdit;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

procedure TForm1.FormCreate(Sender: TObject);
begin
  FWhatTimer:=TWhatTimer.Create(LabeledEdit1); // создаем TWhatTimer
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FWhatTimer.Free; // уничтожаем TWhatTimer
end;

procedure TForm1.OuterOnTimer(Sender: TObject);
begin
  // внешний обработчик событий TWhatTimer
  LabeledEdit1.Text:=IntToStr(LabeledEdit1.Tag);
  LabeledEdit1.Tag:=LabeledEdit1.Tag-1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FWhatTimer.OnTimer:=OuterOnTimer; // назначаем внешний обработчик
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  FWhatTimer.OnTimer:=nil; // восстанавливаем внутренний обработчик
end;

http://zalil.ru/32393085

внутренний обработчик таймера (по умолчанию) увеличивает значение, когда подключаем внешний обработчик (нажатием на кнопку 1) значение будет уменьшаться. кнопка 2 снова восстанавливает внутренний обработчик.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием