Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.16;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
15-1194890946
@!!ex
2007-11-12 21:09
2007.12.16
Спасибо, товарищи!


2-1195104845
Lebedev
2007-11-15 08:34
2007.12.16
Как обычный компонент показать поверх созданного динамически?


15-1194955563
oldman
2007-11-13 15:06
2007.12.16
Можно ли подключать к программе на Дельфи другие dll?


15-1195183314
Slider007
2007-11-16 06:21
2007.12.16
С днем рождения ! 16 ноября 2007 пятница


3-1187018188
kirik
2007-08-13 19:16
2007.12.16
работа с FoxPro базами (dbf) через BDE. Проблема структуры.