Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обработка динамически-создаваемых кнопок

3.8K
24 ноября 2008 года
arphey
51 / / 30.10.2004
Добрый день господа! Возник у меня такой вопрос изначально как програмно создавать кнопки в Делфи, с этим я разобрался, а вот как их правильно обработать, вызвало затруднения. делаю так
Код:
var
  b:array[1..10] of TButton;
  tmp : TNotifyEvent;

procedure CreateBut(Caption:TCaption;t:TNotifyEvent);
begin
  b[n] := TButton.Create(Application);
  b[n].Parent := Form1;
  b[n].Caption:=Caption;
  b[n].Name:='B'+inttostr(n);
  b[n].OnClick := t;
  r:=r+40;
  b[n].Top:=r;
  b[n].Left:=0;
  CurBut:=n;
  inc(n);
end;

procedure TForm1.FormClick(Sender: TObject);
begin

@tmp := @Clickonbutton;

CreateBut('sdf',tmp);
end;
procedure Clickonbutton(Sender: TObject);
begin
//-----------------тут ступор!
end;


число кнопок неизвесно, на все кнопки 1 процедура обработки. Как их обработать? подскажите пожалуйста...
288
24 ноября 2008 года
nikitozz
1.2K / / 09.03.2007
Задача, насколько я понимаю, стоит в том, чтобы в процедуре можно было как-то эти кнопки различать. Тогда все просто. Есть много способов. Прежде всего приведите Sender к соотвествующему типу, а потом уже можете отличать эти кнопки одной от другой по, скажем, свойству Tag или Name или Caption и т.п.
3.8K
24 ноября 2008 года
arphey
51 / / 30.10.2004
Цитата: nikitozz
Задача, насколько я понимаю, стоит в том, чтобы в процедуре можно было как-то эти кнопки различать. Тогда все просто. Есть много способов. Прежде всего приведите Sender к соотвествующему типу, а потом уже можете отличать эти кнопки одной от другой по, скажем, свойству Tag или Name или Caption и т.п.



procedure Clickonbutton(Sender: TObject);
begin
if (Sender as TButton).Name = 'B1' then
begin
ShowMessage('0');
end;
if (Sender as TButton).Name = 'B2' then
begin
ShowMessage('1');
end;
end;

Вылетает с ошибкой

288
25 ноября 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: arphey
procedure Clickonbutton(Sender: TObject);
begin
if (Sender as TButton).Name = 'B1' then
begin
ShowMessage('0');
end;
if (Sender as TButton).Name = 'B2' then
begin
ShowMessage('1');
end;
end;

Вылетает с ошибкой



Давайте полный код. Пока непонятно.

6
25 ноября 2008 года
George
4.1K / / 05.01.2007
а в процедуре CreateBut индекс массива n откуда берётся? и свойство parent кнопки лучше назначачать после всех телодвижений с её остальными свойствами.
[highlight=delphi]
var
b: array[1..10] of TButton;
tmp: TNotifyEvent;
n: integer;

procedure CreateBut(Caption:TCaption; t:TNotifyEvent; var n, r:integer);
begin
b[n] := TButton.Create(Application);
with b[n] do
Name:='B'+inttostr(n);
Caption:=Caption;
r:=r+40;
Top:=r;
Left:=0;
OnClick := t;
Parent := Form1;
end;
CurBut:=n;
inc(n);
end;
[/highlight]
3.8K
25 ноября 2008 года
arphey
51 / / 30.10.2004
[QUOTE=nikitozz;267138]Давайте полный код. Пока непонятно.[/Q полностью прога
288
25 ноября 2008 года
nikitozz
1.2K / / 09.03.2007
Сделайте вашу процедуру Clickonbutton членом класса.
3.8K
25 ноября 2008 года
arphey
51 / / 30.10.2004
Цитата: nikitozz
Сделайте вашу процедуру Clickonbutton членом класса.


Большое спасибо! Все работает!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог