Главная страница
    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.011 c
1-77915
reer
2003-07-10 12:49
2003.07.24
Может быть есть готовое решение?


14-78155
Wonder
2003-07-09 13:48
2003.07.24
По мотивам событий в Москве в Тушино


3-77773
mihmax
2003-06-19 16:00
2003.07.24
BDE не видит MS SQL


14-78048
Suntechnic
2003-07-09 18:49
2003.07.24
Как народ развлекается с помощью Google...


3-77714
Alfred77777
2003-06-30 09:39
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский