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

Вниз

Sender:TObject   Найти похожие ветки 

 
SergP ©   (2003-07-13 11:06) [0]

Как использовать параметр sender:tobject, который передается обработчикам событий практически во всех компонентах.
Я так понимаю что он нужен для того чтобы определить какой компонент сгенерировал это событие. (если неверно - подправьте)

У меня есть несколько компонентов (обработчики событий у них общие).
Например есть несколько кнопок с одним обработчиком событий:

procedure TForm1.Button1Click(Sender: TObject);
begin

end;

Как мне в этой процедуре узнать какая кнопка вызвала данный обработчик?
А вообще мне нужно присвоить какой-нить переменной значение одного из проперти компонента который сгенерировал данное событие.
Просто я нигде не смог найти примеров, где бы это использовалось, чтобы посмотреть.
Напишите как это сделать....


 
jack128 ©   (2003-07-13 11:15) [1]

procedure TForm1.Button1Click(Sender: TObject);
var btButton : Tbutton
begin
if Sender is Tbutton then
begin
btButton := Tbutton(Sender);
if btButton = Button 1 then
...
else
if btButton = Button2 then
...
else
....
end

end;


 
Real ©   (2003-07-13 13:08) [2]

Можно и проще, ты ведь точно знаешь какие будут попадать в обработчик?

if Sender=Button1 then ...


 
SergP ©   (2003-07-13 13:31) [3]

2 Real
Я создаю компоненты в рантайме, таким образом:
buttons:array[1..10] of tbutton;
...

buttons[i].create(self);
...


могу ли я в таком случае сравнивать так:
for i:=1 to 10 do
begin
if sender=buttons[i] then ....;
end;
?

или можно все же обратиться к свойствам компонента не используя их имена, а используя только sender, типа так:?
var z:integer;
....

z:=sender.tag;

PS Я знаю что последняя строчка неправильная и неработает, но просто хотел показать что имелось ввиду....



 
Palladin ©   (2003-07-13 13:43) [4]


> buttons[i].create(self);

странно ты их создаешь


> могу ли я в таком случае сравнивать так:
> for i:=1 to 10 do
> begin
> if sender=buttons[i] then ....;
> end;
> ?

можешь


> z:=sender.tag;

1 z:=(Sender as TButton1).Tag
2 z:=TButton(Sender).Tag // при полной уверенности


 
SergP ©   (2003-07-13 13:58) [5]


> Palladin © (13.07.03 13:43)
>
> > buttons[i].create(self);
>
> странно ты их создаешь


buttons[i]:=tbutton.create(self);

Ну не помню я точно как у меня написано...Текста под руками нет.
К тому же я только на днях начал пробовать что-то создавать в рантайме, поэтому и мог ошибиться не имея текста под руками.
Да и кнопки я для примера привет, на самом деле это другой компонент, но суть от этого не меняется Но что-то типа того.

> 1 z:=(Sender as TButton1).Tag
> 2 z:=TButton(Sender).Tag // при полной уверенности


А насчет этого большое спасибо. Меня именно этот вариант и интересовал.
Только что значит "при полной уверенности". Т.е. в чем?


 
Palladin ©   (2003-07-13 14:15) [6]

в том что Sender точно TButton
тебе уже написали между прочим выше
if Sender is TButton then ляля else мля...

ситуация бывает такова что обработчик может быть повешен на событие у кучи компонентов, более того, компоненты могут быть не только TButton
а для частных случаев пойдет и это
if Sender=TButton then


 
KSergey ©   (2003-07-13 14:58) [7]

SergP, вам прямой ход вот сюда
http://www.delphikingdom.com/helloworld/runtime_comp.htm

И остальные статьи раздела почитайте - ооочень много интересного почерпнете.

PS: еще раз попрошу у всех прощения за один и тот же текст и ссылку раз в неделю. Но буду продолжать это делать, т.к. считаю правильным.



Страницы: 1 вся ветка

Текущий архив: 2003.07.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
3-77795
rosl
2003-07-03 04:51
2003.07.24
запрос в Query


1-77875
Дома
2003-07-13 23:08
2003.07.24
2 вопроса (RichEdit и TabControl)


3-77739
MakNik
2003-06-27 09:34
2003.07.24
как в DBCtrlGrid сделать кнопу


14-78047
paxer
2003-07-09 19:00
2003.07.24
А есть ли Embedded для MySQL?


1-77874
Shishalov
2003-07-13 13:04
2003.07.24
Глюк с Cursor у TChart