RRYTY писал(а):Учебник, в данном случае, нужен по FreePascal.
Безусловно, язык знать получше мне бы не помешало.
Но всё же сущности типа Self, Sender, Tag и т. д. и т. п. больше относятся к Delphi / Lazarus / VCL. Всегда плохо понимал, что всё это значит и как его использовать. Но до сей поры и не требовалось.
svk12 писал(а):- Код: Выделить всё
procedure TForm1.LabelClick(Sender :TObject);
begin
label_index := Self.Tag;
end;
Self - объект, которому принадлежит метод, в данном случае - экземпляр класса TForm1.
Объект, вызвавший обработчик, передаётся через параметр Sender.
Спасибо всем за разъяснения, из них многое стало понятным.
Добавлено спустя 40 минут 11 секунд:Почитал статьи на тему Self и Sender.
Насколько я понял, записи
- Код: Выделить всё
procedure TForm1.LabelClick(Sender :TObject);
begin
label_index := Tag;
end;
и
- Код: Выделить всё
procedure TForm1.LabelClick(Sender :TObject);
begin
label_index := Self.Tag;
end;
полностью равносильны. Просто обычно случаев Self не указывается (опускается) при манипуляциях внутри метода этого класса, указываются просто свойства / методы класса (например, класса формы). Self - это как $this в php
А если нам нужно внутри метода класса использовать свойство объекта другого класса (например, TLabel), мы используем конструкцию вида
- Код: Выделить всё
label_index := (Sender as TLabel).Tag;
или
- Код: Выделить всё
label_index := TLabel(Sender).Tag;
для чего и нужен параметр Sender в методе класса.