Пример:
Так работает:
Код: Выделить всё
newButton.OnClick := @ChangeTool;Так не работает:
Код: Выделить всё
newButton.OnClick := ChangeTool;Модератор: Модераторы
Код: Выделить всё
newButton.OnClick := @ChangeTool;Код: Выделить всё
newButton.OnClick := ChangeTool;Tsuyu писал(а):В чем разница между обычным вызовом и вызовом (по ссылке?) ?
Пример:
Так работает:
Код: Выделить всё
newButton.OnClick := @ChangeTool;
Так не работает:
Код: Выделить всё
newButton.OnClick := ChangeTool;
Лекс Айрин писал(а):Tsuyuя не знаю как определено ChangeTool, но очень похоже, что это не процедура, а ссылка на нее, соответственно, второй вариант и не должен быть верным. Ведь не всегда ссылка ведет на процедуру. она может быть равна и nul.
Код: Выделить всё
procedure TMainWindow.ChangeTool(Sender: TObject);
begin
CurToolIndex := (Sender as TSpeedButton).Tag;
end; Код: Выделить всё
property OnClick: TNotifyEvent read FOnClick write FOnClick; Код: Выделить всё
TNotifyEvent = procedure(Sender: TObject) of object;
FOnClick: TNotifyEvent; Код: Выделить всё
function F: pointer;
var p: pointer;
p := F; // вызов функции или взятие адреса?
// В C-подобных языках это разрешается обязательностью пустых скобок: p = F — ссылка на функцию, p = F() — вызов.runewalsh писал(а):Это просто разный синтаксис для одного и того же.