Tdata = class(Tdatamain)
procedure goal;
procedure create;
end;
implementation
procedure Tdata.goal;
begin
// :D
end;
procedure Tdata.create;
begin
// Это не работает.
// а хотелось бы что то подобное
winapi_procedure(@self.goal); // для винапи_процедуры нужно "A pointer to the function"
end;
Как задать WinApi функции параметром указатель на метод из моего класса?
Возможно вопрос не правильно озвучен. Но в любом случае это думаю поможет:
Указатель на не class-метод передать в качестве callback нельзя.
Код:
winapi_procedure(@Tdata.goal)
Но что бы вызвать его, как обычную процедуру делать вот так:
Код:
procedure winapi_procedure(PCallBack : Pointer);
type
PGoalProc = procedure(sender : TObject);
var
Proc : PGoalProc;
begin
Proc := PCallBack;
Proc([COLOR="Red"]nil[/COLOR]);
end;
type
PGoalProc = procedure(sender : TObject);
var
Proc : PGoalProc;
begin
Proc := PCallBack;
Proc([COLOR="Red"]nil[/COLOR]);
end;
Но тогда получится что
Код:
procedure Tdata.goal;
begin
//[COLOR="Red"]self = nil[/COLOR]
end;
begin
//[COLOR="Red"]self = nil[/COLOR]
end;
Как видишь один лишний параметр и от этого ни куда не деться.
Чуть не забыл, в последних версия версиях таки появилась возможность создавать статичные методы:
http://www.gunsmoker.ru/2008/12/static-delphi.html
Цитата: 0nni
Чуть не забыл, в последних версия версиях таки появилась возможность создавать статичные методы:
http://www.gunsmoker.ru/2008/12/static-delphi.html
Это слово еще в Delphi 5 было...
Я их активно с 2009ой версии пользую. Удобно, че уж. :)
Цитата: hardcase
Это слово еще в Delphi 5 было...
Сейчас D7 запустил специально, нет там такого, может ты про билдер?
Цитата: 0nni
Сейчас D7 запустил специально, нет там такого, может ты про билдер?
Извиняюсь, не дочитал.
Да, модификатора static для классовых функций-процедур небыло (имхо оно в принципе лишнее).