Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли написать обработчик события для динамической кнопки?


Страницы:   1 2

WFS ©   (2007-11-18 14:00:00) 

Если кнопка создается в процессе работы программы, можно ли как то для нее написать обработчик события ButtonClick?


Dennis I. Komarov   (2007-11-19 17:23:00) [1]


> for i:=1 to 20 do
>  begin
>   MBut[i]:=TButton1.Create(form1);
>   with MBut[i] do
>    begin
>     parent:=Form1;
Tag:=i;
>     width:=20;
>     onClick:=MybuttonClick;
>    end;
>
> Procedure TForm1.MyButtonClick( Sender: TObject);
> Begin
> ShowMessage(inttostr( TButton(Sender).Tag));
> End;


З.Ы.
И чего это я такой добрый?


WFS   (2007-11-19 17:19:00) [2]

Все, я понял главное, как обратиться к кнопке из процедуры.
Tbutton(Sender)

Все, всем спасибо большое!


Reindeer Moss Eater   (2007-11-19 17:10:00) [3]

Это можно. А передавать в обработчик OnClick что-то кроме TObject - не можно.


Amoeba   (2007-11-19 17:10:00) [4]

У каждой кнопке устанавливаешь свое значение св-ва Tag и в обработчике события анализируешь его значение:

case TButton(Sender).Tag of


WFS   (2007-11-19 17:09:00) [5]

она описана в третьем ответе.
Повторю: есть две кнопки,созданные динамически, нажимаю на одну появляется сообщение с цифрой 1,нажимаю вторую - цифра 2


Reindeer Moss Eater   (2007-11-19 17:07:00) [6]

Какую ситуацию?


WFS   (2007-11-19 17:06:00) [7]

То есть вышеописанную ситуацию нереально реализовать?


Reindeer Moss Eater   (2007-11-19 17:05:00) [8]

тогда как мне сделать так, чтобы в процедуру передавалось значение i?

В обработчик OnClick не передается ничего кроме Sender:TObject


Reindeer Moss Eater   (2007-11-19 17:04:00) [9]

А откуда брать сендер я не знаю(((

Это не твоя забота, а забота автора кнопки


WFS   (2007-11-19 17:04:00) [10]

тогда как мне сделать так, чтобы в процедуру передавалось значение i?


Reindeer Moss Eater   (2007-11-19 17:03:00) [11]

Событие - это свойство.
OnClick это свойство типа TNotifyEvent
TNotifyEvent это
procedure(Sender : TObject) of object;
И больше никаких других параметров типа i:integer;


WFS   (2007-11-19 17:02:00) [12]

Он не обязателен, если процедура в самом верху описана как
MyButtonClick(Sender:TObject);

А если я напишу MyButtonClick(Sender:TObject; i:integer);
То тогда мне нужно написать в программе  onclick:=MybuttonClick(sender,i);
А откуда брать сендер я не знаю(((


Reindeer Moss Eater   (2007-11-19 16:58:00) [13]

Главное чтоб был в интерфейсной секции.


Reindeer Moss Eater   (2007-11-19 16:57:00) [14]

в секции implementation


WFS   (2007-11-19 16:55:00) [15]

Где вы имеете ввиду?


Reindeer Moss Eater   (2007-11-19 16:55:00) [16]

и куда девался параметр процедуры MyButtonClick?

Он именно тамне обязателен.


Johnmen   (2007-11-19 16:54:00) [17]

и куда девался параметр процедуры MyButtonClick?


WFS   (2007-11-19 16:53:00) [18]

То есть, для кнопки MBut[1] при нажатии на нее должно выводиться сообщение "1", для MBut[2] - "2" . Ну это такая условная ситуация


Anatoly Podgoretsky   (2007-11-19 16:51:00) [19]

> WFS  (19.11.2007 16:49:03)  [3]

Откуда вдруг взялся I


WFS   (2007-11-19 16:49:00) [20]

А вот допустим такая ситуация:

Procedure MyButtonClick(Sender:TObject);
.....................................................

var MBut:array[1..100] of TButton;

.............................................

for i:=1 to 20 do
 begin
  MBut[i]:=TButton1.Create(form1);
  with MBut[i] do
   begin
    parent:=Form1;
    width:=20;
    onClick:=MybuttonClick;
   end;

Procedure TForm1.MyButtonClick;
Begin
ShowMessage(inttostr(i));
End;

То есть для каждой кнопки должно быть как бы свое событие, со своим значением i.

если я описываю процедуру как MyButtonClick(Sender:TObject, i:integer); то это приводит к глюкам. В ссылке описания данной ситуации не нашел


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо