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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2014, 19:17   #1
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию Повторное нажатие

Как предотвратить частое нажатие на кнопку, пробовал через sleep(), но не то, говорят через таймер не могу понять как, если требуется например не на 1 а на несколько кнопок такой запрет сделать. Может кто подскажет?
HTTqp вне форума Ответить с цитированием
Старый 22.05.2014, 20:23   #2
StriderX
Форумчанин
 
Регистрация: 21.04.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от HTTqp Посмотреть сообщение
Как предотвратить частое нажатие на кнопку, пробовал через sleep(), но не то, говорят через таймер не могу понять как, если требуется например не на 1 а на несколько кнопок такой запрет сделать. Может кто подскажет?
Увы, абсолютно не умею работать с VCL и всем, что с ним связано. Могу предложить только иллюстрацию одного из стандартных подходов.
Если бы мне сильно было надо, то копал бы в сторону написания наследника кнопки дабы экранировать reuse от прямого доступа. Это позволит прозрачно реагировать на попытки оперирования с Enable во время работы reuse.
PS: возможно существуют встроенные в VCL механизмы и я написал полный бред =-)
Вложения
Тип файла: zip simple_reuse.zip (56.1 Кб, 13 просмотров)
StriderX вне форума Ответить с цитированием
Старый 22.05.2014, 21:13   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
предотвратить частое нажатие на кнопку
А можно пример ситуации?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.05.2014, 23:15   #4
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Код:
unit Unit1;

interface

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

type
  ModButton = record
    Button: TButton;
    Timer: TTimer;
  end;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ModButtons: Array [0..2] of ModButton;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
 i: integer;
begin
 for i := Low(ModButtons) To High(ModButtons) do
   begin
     ModButtons[i].Button := TButton.Create(Owner);
     ModButtons[i].Button.Parent := Form1;
     ModButtons[i].Button.Top := 10;
     ModButtons[i].Button.Left := 10 +  i * 100;
     ModButtons[i].Button.Caption := 'Button' + IntToStr(i);
     ModButtons[i].Button.Tag := i;
     ModButtons[i].Button.OnClick := Button1Click;
     ModButtons[i].Timer := TTimer.Create(Owner);
     ModButtons[i].Timer.Interval := 1000;
     ModButtons[i].Timer.OnTimer := Timer1Timer;
     ModButtons[i].Timer.Tag := i;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with (Sender as TButton) do
    begin
      Enabled := false;
      ModButtons[Tag].Timer.Enabled := true;
    end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  With (Sender as TTimer) do
    begin
      Enabled := false;
      ModButtons[Tag].Button.Enabled := true;
    end;
end;

end.

Последний раз редактировалось doktor255; 22.05.2014 в 23:25.
doktor255 вне форума Ответить с цитированием
Старый 23.05.2014, 06:59   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

doctor255, полагаю, стоит чуть поправить код
Код:
ModButtons[i].Button := TButton.Create(Self);
ModButtons[i].Button.Parent := Self;
...
ModButtons[i].Timer := TTimer.Create(Self);
Поскольку Owner в данном случае это Form1.Owner , который есть Application. А Form1 - привязка к имени глобальной переменной, которая в случае динамического создания формы вполне может быть невалидна.
phomm вне форума Ответить с цитированием
Старый 23.05.2014, 09:17   #6
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

phomm Спасибо, учту.
doktor255 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реакция на повторное нажатие кнопки bogdan333 C++ Builder 5 09.04.2012 21:22
Повторное нажатие Vitalya_1993 Помощь студентам 2 16.12.2011 04:47
Повторное нажатие Enter _-Re@l-_ Общие вопросы Delphi 10 28.01.2011 23:48
повторное нажатие кнопки blackstersl Общие вопросы Delphi 2 17.09.2008 14:53
Запрет на повторное нажатие клавиши russian-stalker Общие вопросы Delphi 3 12.09.2008 19:39