![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли написать обработчик события для динамической кнопки?
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); то это приводит к глюкам. В ссылке описания данной ситуации не нашел