Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.118 c
2-1195814196
Свой
2007-11-23 13:36
2007.12.16
TIdHTTPServer, ответ для клиента при закачке файла


2-1195558114
San1
2007-11-20 14:28
2007.12.16
формат числа


11-1181727931
=BuckLr=
2007-06-13 13:45
2007.12.16
FontQuality - с чем едят?


15-1195313211
IvanJ
2007-11-17 18:26
2007.12.16
Аналог из C++ в Delphi


15-1195120254
WFS
2007-11-15 12:50
2007.12.16
Как переименовать Unit?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский