Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11855
Последний выпуск: 19.06.2015

Как задать WinApi функции параметром указатель на метод из моего класса?

47K
30 июня 2010 года
vol-jin
5 / / 25.06.2009
Возможно вопрос не правильно озвучен. Но в любом случае это думаю поможет:

Код:
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;
14
30 июня 2010 года
Phodopus
3.3K / / 19.06.2008
Указатель на не class-метод передать в качестве callback нельзя.
3.6K
30 июня 2010 года
0nni
326 / / 24.06.2008
Указатель на метод класса можно получить таким образом
 
Код:
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;


Но тогда получится что
 
Код:
procedure Tdata.goal;
begin
 //[COLOR="Red"]self = nil[/COLOR]
end;


Как видишь один лишний параметр и от этого ни куда не деться.

Чуть не забыл, в последних версия версиях таки появилась возможность создавать статичные методы:
http://www.gunsmoker.ru/2008/12/static-delphi.html
7
30 июня 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: 0nni

Чуть не забыл, в последних версия версиях таки появилась возможность создавать статичные методы:
http://www.gunsmoker.ru/2008/12/static-delphi.html


Это слово еще в Delphi 5 было...

5
30 июня 2010 года
George
4.1K / / 05.01.2007
Я их активно с 2009ой версии пользую. Удобно, че уж. :)
3.6K
30 июня 2010 года
0nni
326 / / 24.06.2008
Цитата: hardcase
Это слово еще в Delphi 5 было...


Сейчас D7 запустил специально, нет там такого, может ты про билдер?

7
30 июня 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: 0nni
Сейчас D7 запустил специально, нет там такого, может ты про билдер?


Извиняюсь, не дочитал.
Да, модификатора static для классовых функций-процедур небыло (имхо оно в принципе лишнее).

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог