Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.007 c
1-77821
stkatch
2003-07-09 16:36
2003.07.24
Как узнать Handle текущего потока (Thread)


7-78170
Jura
2003-05-14 11:56
2003.07.24
портCOM где лоханулся


3-77758
big_bugzy
2003-07-01 20:06
2003.07.24
Помогите разобраться Insufficient key column information


14-78132
Dale
2003-07-09 10:02
2003.07.24
MDI - интерфейс


1-77932
OlegNOE
2003-07-10 15:30
2003.07.24
Рамка вокруг ячейки





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский