Sender tobject

Sender: TObject

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







У мене є кілька компонентів (обробники подій у них загальні).
Наприклад є кілька кнопок з одним обробником подій:

procedure TForm1.Button1Click (Sender: TObject);
begin

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

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

Можна і простіше, адже ти точно знаєш які будуть потрапляти в обробник?

if Sender = Button1 then.

2 Real
Я створюю компоненти в Рантайм, таким чином:






buttons: array [1..10] of tbutton;
.


чи можу я в такому випадку порівнювати так:
for i: = 1 to 10 do
begin
if sender = buttons [i] then. ;
end;
?

або можна все ж звернутися до властивостей компонента не використовуючи їх імена, а використовуючи лише sender, типу так.
var z: integer;
.

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


> 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 // при повній впевненості

Ну не пам'ятаю я точно як у мене написано. Тексту під руками немає.
До того ж я тільки на днях почав пробувати щось створювати в Рантайм, тому і міг помилитися не маючи тексту під руками.
Та й кнопки я для прикладу привіт, насправді це інший компонент, але суть від цього не змінюється Але щось типу того.

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

А щодо цього велике спасибі. Мене саме цей варіант і цікавив.
Тільки що означає "при повній впевненості". Тобто у чому?

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

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

І інші статті розділу почитайте - дуууже багато цікавого почерпнете.

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