Форум: "Начинающим";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
ВнизМожно ли написать обработчик события для динамической кнопки? Найти похожие ветки
← →
WFS (2007-11-18 14:00) [0]Если кнопка создается в процессе работы программы, можно ли как то для нее написать обработчик события ButtonClick?
← →
Palladin © (2007-11-18 14:20) [1]конечно, книжки только нужно почитать
TForm1=Class(TForm)
...
Procedure MyButtonClick(Sender:TObject);
...
Procedure TForm1.MyButtonClick;
Begin
ShowMessage(TButton(Sender).Caption);
End;
...
Var
theButton:TButton;
...
theButton:=TButton.Create(Self);
theButton.Parent:=Self;
theButton.Caption:="Кнопка 1";
theButton.OnClick:=MyButtonClick;
...
← →
Amoeba © (2007-11-18 15:47) [2]
> WFS (18.11.07 14:00)
>
> Если кнопка создается в процессе работы программы, можно
> ли как то для нее написать обработчик события ButtonClick?
>
>
Читаем эту статью до просветления:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342
← →
WFS © (2007-11-19 16:49) [3]А вот допустим такая ситуация:
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); то это приводит к глюкам. В ссылке описания данной ситуации не нашел
← →
Anatoly Podgoretsky © (2007-11-19 16:51) [4]> WFS (19.11.2007 16:49:03) [3]
Откуда вдруг взялся I
← →
WFS © (2007-11-19 16:53) [5]То есть, для кнопки MBut[1] при нажатии на нее должно выводиться сообщение "1", для MBut[2] - "2" . Ну это такая условная ситуация
← →
Johnmen © (2007-11-19 16:54) [6]и куда девался параметр процедуры MyButtonClick?
← →
Reindeer Moss Eater © (2007-11-19 16:55) [7]и куда девался параметр процедуры MyButtonClick?
Он именно там не обязателен.
← →
WFS © (2007-11-19 16:55) [8]Где вы имеете ввиду?
← →
Reindeer Moss Eater © (2007-11-19 16:57) [9]в секции implementation
← →
Reindeer Moss Eater © (2007-11-19 16:58) [10]Главное чтоб был в интерфейсной секции.
← →
WFS © (2007-11-19 17:02) [11]Он не обязателен, если процедура в самом верху описана как
MyButtonClick(Sender:TObject);
А если я напишу MyButtonClick(Sender:TObject; i:integer);
То тогда мне нужно написать в программе onclick:=MybuttonClick(sender,i);
А откуда брать сендер я не знаю(((
← →
Reindeer Moss Eater © (2007-11-19 17:03) [12]Событие - это свойство.
OnClick это свойство типа TNotifyEvent
TNotifyEvent это
procedure(Sender : TObject) of object;
И больше никаких других параметров типа i:integer;
← →
WFS © (2007-11-19 17:04) [13]тогда как мне сделать так, чтобы в процедуру передавалось значение i?
← →
Reindeer Moss Eater © (2007-11-19 17:04) [14]А откуда брать сендер я не знаю(((
Это не твоя забота, а забота автора кнопки
← →
Reindeer Moss Eater © (2007-11-19 17:05) [15]тогда как мне сделать так, чтобы в процедуру передавалось значение i?
В обработчик OnClick не передается ничего кроме Sender:TObject
← →
WFS © (2007-11-19 17:06) [16]То есть вышеописанную ситуацию нереально реализовать?
← →
Reindeer Moss Eater © (2007-11-19 17:07) [17]Какую ситуацию?
← →
WFS © (2007-11-19 17:09) [18]она описана в третьем ответе.
Повторю: есть две кнопки,созданные динамически, нажимаю на одну появляется сообщение с цифрой 1,нажимаю вторую - цифра 2
← →
Amoeba © (2007-11-19 17:10) [19]У каждой кнопке устанавливаешь свое значение св-ва Tag и в обработчике события анализируешь его значение:
case TButton(Sender).Tag of
← →
Reindeer Moss Eater © (2007-11-19 17:10) [20]Это можно. А передавать в обработчик OnClick что-то кроме TObject - не можно.
← →
WFS © (2007-11-19 17:19) [21]Все, я понял главное, как обратиться к кнопке из процедуры.
Tbutton(Sender)
Все, всем спасибо большое!
← →
Dennis I. Komarov © (2007-11-19 17:23) [22]
> 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;
З.Ы.
И чего это я такой добрый?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.043 c