Как использовать поля класса в CallBack функции?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как использовать поля класса в CallBack функции?

Сообщение resident » 18.06.2013 15:53:23

Есть класс
Код: Выделить всё
type
  TWndFinder = class
    private
      fNames: TStringList; // массив названий окон 
      ....
    public
      property Names: TStringList read fNames;
      procedure FindWindow;
      ....

Процедура FindWindow вызывает функцию обратного вызова EnumCallBack, в которой я хочу заполнить поле fNames.
Код: Выделить всё
procedure TWndFinder.FindWindow;
  begin
     ....
    EnumWindows (@EnumCallBack, 0);
  end; 


Код: Выделить всё
function EnumCallBack(H: HWND; lP: lParam): BOOL; stdcall;
  begin
     ....
     fNames.Add(Wnd);
     ....
  end;

Здесь компилятор не признает fNames. Как бы ему показать это поле? :)
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Как использовать поля класса в CallBack функции?

Сообщение Sergei I. Gorelkin » 18.06.2013 16:47:30

Код: Выделить всё
procedure TWndFinder.FindWindow; 
  begin 
     .... 
    EnumWindows (@EnumCallBack, Self);
   end;

function EnumCallBack(H: HWND; lP: lParam): BOOL; stdcall;
  var
    this: TWndFinder absolute lp;
  begin
     ....
     this.fNames.Add(Wnd);
     ....
  end;
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Как использовать поля класса в CallBack функции?

Сообщение resident » 18.06.2013 17:19:23

Sergei I. Gorelkin писал(а):
Код: Выделить всё
procedure TWndFinder.FindWindow; 
  begin 
     .... 
    EnumWindows (@EnumCallBack, Self);
   end;

function EnumCallBack(H: HWND; lP: lParam): BOOL; stdcall;
  var
    this: TWndFinder absolute lp;
  begin
     ....
     this.fNames.Add(Wnd);
     ....
  end;


Спасиб :)
Только в точности как у Вас компилятор ругался, а получилось вот так:
Код: Выделить всё
EnumWindows (@EnumCallBack, LParam(Self));
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 247

Рейтинг@Mail.ru