У меня вопрос по синтаксису, что-то не могу разобраться... Почему такой код нормально компилируется:
procedure TForm1.FormCreate(Sender: TObject);
var
Method: TNotifyEvent;
begin
Method:=FormCreate;
if @OnCreate = @Method then beep;
end;
А такой (по сути - то же самое) - нет.
procedure TForm1.FormCreate(Sender: TObject);
begin
if @OnCreate = @FormCreate then beep;
end;
PS: Если во втором примере @FormCreate заменить на @TForm1.FormCreate, компилятор его проглотит, но меня явное указание класса не устраивает. В общем случае, вместо метода FormCreate хотелось бы использовать виртуальный метод, адрес которого будет зависеть от Self и на момент компиляции не известен.
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
13-01-2008 05:10
>>>Как сделать чтобы работало вопрос не стоит
Честно говоря, из первоначальной формулировки вопроса это не было очевидно. Последняя фраза в вопросе воспринимается как раз наоборот. Хотя конечно возможно, что это только мне так показалось.
Может я и ошибаюсь, но вряд-ли Вам кто-нибудь ответит - просто потому, что на этот сайт вряд-ли заходят авторы дельфийского компилятора:)) В принципе понятно, что методы - часть класса, но почему в данном случае компилятор не хочет делать неявное преобразование объектной ссылке в указатель на ее класс( а он это делает при любом обычном вызове метода объекта), я не знаю.
Хотя может я и ошибаюсь и кто-нибудь все это разъяснит, тогда мне тоже будет интересно почитать.
Да это понятно... Как сделать чтобы работало вопрос не стоит. Вопрос в том, "что во втором примере синтаксически неправильно?" Может на раздел справки кто носом ткнет или так объяснит, так как я что-то не понимаю...
В общем случае, вместо метода FormCreate хотелось бы использовать виртуальный метод, адрес которого будет зависеть от Self и на момент компиляции не известен.
var
Method: TNotifyEvent;
Method:= FormCreate;
if @OnCreate = @Method then beep;
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.