Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2010, 07:52   #1
dan582107
 
Регистрация: 30.08.2010
Сообщений: 8
Радость Работа с кнопками.

я новичок.
Пишу программу.
В моей программе 3 - 4 кнопки.
Нужно чтоб они через какое то время сами нажилась.(примерно через 3 сек после запуска программы)
dan582107 вне форума Ответить с цитированием
Старый 31.08.2010, 08:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Кидаешь таймер на форму. Выставляешь ему свойство Interval=3000 (Это в миллисекундах). Далее его свойство Enabled активируешь.
В таймере пиши
Код:
 Buttin1.Click; // Это программный клик на кнопку1
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.08.2010, 08:11   #3
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Значит так кидаете на форму timer с закладки "System" потом я думаю вы знаете кде находяться кнопки в инспекторе задач в timer1 interval пишете 3000 то есть три тысячи миллисекунд, потом двойным щелчком по таймеру появиться вот это
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin

end;
Туда и вставите вот это
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
button1.Click;
button2.Click;
button3.Click;
button4.Click;
timer1.Enabled:=false;
end;
Вот балин опоздал трошки
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 31.08.2010, 08:20   #4
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
Радость

Сдернуто из Delphi world

Автоматически нажимающаяся кнопка
--------------------------------------------------------------------------------


Этот компонент представляет из себя кнопку, на которую не надо нажимать, чтобы получить событие OnClick. Достаточно переместить курсор мышки на кнопку. При создании такого компонента традиционным способом, требуется довольно много времени, так как необходимо обрабатывать мышку, перехватывать её и т.д. Однако результат стоит того!

Предлагаю взглянуть на две версии данного компонента. В более простой версии обработчик перемещения мышки просто перехватывает сообщения Windows с нужным кодом и вызывает обработчик события OnClick:



Код:
type
  TAutoButton1 = class(TButton)
  private
    procedure WmMouseMove(var Msg: TMessage); message wm_MouseMove;
end;

procedure TAutoButton1.WmMouseMove(var Msg: TMessage);
begin
  inherited;
  if Assigned(OnClick) then
    OnClick(self);
end;



Вторая версии имеет больше исходного кода, так как в ней я просто пытаюсь повторить событие мышки OnClick когда пользователь перемещает мышку над кнопкой либо по истечении определённого времени. Далее следует объявление класса:



Код:
type
  TAutoKind = (akTime, akMovement, akBoth);

  TAutoButton2 = class(TButton)
  private
    FAutoKind: TAutoKind;
    FMovements: Integer;
    FSeconds: Integer;
    // really private
    CurrMov: Integer;
    Capture: Boolean;
    MyTimer: TTimer;
    procedure EndCapture;
    // обработчики сообщений
    procedure WmMouseMove (var Msg: TWMMouse); message wm_MouseMove;
    procedure TimerProc (Sender: TObject);
    procedure WmLBUttonDown (var Msg: TMessage); message wm_LBUttonDown;
    procedure WmLButtonUp (var Msg: TMessage); message wm_LButtonUp;
  public
    constructor Create (AOwner: TComponent); override;
  published
    property AutoKind: TAutoKind read FAutoKind write FAutoKind default akTime;
    property Movements: Integer read FMovements write FMovements default 5;
    property Seconds: Integer read FSeconds write FSeconds default 10;
end;



Итак, когда курсор мышки попадает в область кнопки (WmMouseMove), то компонент запускает таймер либо счётчик количества сообщений о перемещении. По истечении определённого времени либо при получении нужного количества сообщений о перемещении, компонент эмулирует событие нажатия кнопкой.



Код:
procedure TAutoButton2.WmMouseMove (var Msg: TWMMouse);
begin
  inherited;
  if not Capture then
  begin
    SetCapture (Handle);
    Capture := True;
    CurrMov := 0;
    if FAutoKind <> akMovement then
    begin
      MyTimer := TTimer.Create (Parent);
      if FSeconds <> 0 then
        MyTimer.Interval := 3000
      else
        MyTimer.Interval := FSeconds * 1000;
      MyTimer.OnTimer := TimerProc;
      MyTimer.Enabled := True;
    end;
  end
  else // захватываем
  begin
    if (Msg.XPos > 0) and (Msg.XPos < Width) and (Msg.YPos > 0) and (Msg.YPos < Height) then
    begin
      // если мы подсчитываем кол-во движений...
      if FAutoKind <> akTime then
      begin
        Inc (CurrMov);
        if CurrMov >= FMovements then
        begin
          if Assigned (OnClick) then
            OnClick (self);
          EndCapture;
        end;
      end;
    end
    else // за пределами... стоп!
      EndCapture;
  end;
end;

procedure TAutoButton2.EndCapture;
begin
  Capture := False;
  ReleaseCapture;
  if Assigned (MyTimer) then
  begin
    MyTimer.Enabled := False;
    MyTimer.Free;
    MyTimer := nil;
  end;
end;

procedure TAutoButton2.TimerProc (Sender: TObject);
begin
  if Assigned (OnClick) then
    OnClick (self);
  EndCapture;
end;

procedure TAutoButton2.WmLBUttonDown (var Msg: TMessage);
begin
  if not Capture then
    inherited;
end;

procedure TAutoButton2.WmLButtonUp (var Msg: TMessage);
begin
  if not Capture then
    inherited;
end;
Изображения
Тип файла: gif button.gif (1.4 Кб, 158 просмотров)
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 31.08.2010, 08:26   #5
dan582107
 
Регистрация: 30.08.2010
Сообщений: 8
По умолчанию

Stilet,dmitriegorovih
Спасибо но не работает =)
Sparkman - Спасибо но сильно много строчек

Последний раз редактировалось dan582107; 31.08.2010 в 08:29.
dan582107 вне форума Ответить с цитированием
Старый 31.08.2010, 08:28   #6
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Цитата:
Сообщение от dan582107 Посмотреть сообщение
Stilet,dmitriegorovih
Спасибо но не работает =)
А в чем ошибка (что пишет)? Или не работает действие, которое должно происходить по нажатию?
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 31.08.2010, 08:29   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Спасибо но не работает =)
Дык на это и надеемся )))))
Разобрался почему не работает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.08.2010, 08:35   #8
dan582107
 
Регистрация: 30.08.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Дык на это и надеемся )))))
Разобрался почему не работает?
Вроде как бы нет

Последний раз редактировалось dan582107; 31.08.2010 в 08:38.
dan582107 вне форума Ответить с цитированием
Старый 31.08.2010, 08:37   #9
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Цитата:
Спасибо но не работает =)
Забыл сказать надо в инспекторе задач выставить Enabled в false, а на он криат написать вот это
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.Enabled:=true;
end;
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 31.08.2010, 08:46   #10
dan582107
 
Регистрация: 30.08.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от dmitriegorovih Посмотреть сообщение
Забыл сказать надо в инспекторе задач выставить Enabled в false, а на он криат написать вот это
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.Enabled:=true;
end;
Вот с этим работает СпАсИбО
dan582107 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Меню с выделяющимися кнопками AnKor94 PHP 1 20.02.2010 20:24
Работа с кнопками girz БД в Delphi 1 15.05.2009 02:05
Непонятки с кнопками Devoto Общие вопросы Delphi 2 16.11.2008 20:47
проблема с кнопками blackstersl Общие вопросы Delphi 3 12.10.2008 14:31
работа с кнопками на delphi alexs2141 Общие вопросы Delphi 1 03.06.2008 21:41