Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2016, 12:52   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию суперклассинг

Здравствуйте.
Сделал свой класс. Он создает и отрисовывает CHILD-окно WinAPI.
Код:
type
  testclass = class(TObject)
    public
      window : HWND;
end;

var
t : array of testclass;

setlenth(t,10);
for i:=0 to 9 do
begin  
  t[i] := testclass.create;
  setwindowlong(t.window, gwl_wndproc, <процедура>)
end;
В цикле создаю несколько таких классов и делаю суперклассинг окна. В оконной процедуре ловлю события, например WM_LBUTTONDOWN. Как узнать, какой экземпляр класса послал событие?
BLACK_RAIN вне форума Ответить с цитированием
Старый 05.03.2016, 13:38   #2
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 273
По умолчанию

В оконную процедуру передаётся дескриптор окна...
Filka вне форума Ответить с цитированием
Старый 05.03.2016, 13:53   #3
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Filka Посмотреть сообщение
В оконную процедуру передаётся дескриптор окна...
и как узнать, какому экземпляру из массива оно принадлежит?
BLACK_RAIN вне форума Ответить с цитированием
Старый 05.03.2016, 13:56   #4
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 273
По умолчанию

Код:
var
  Idx, I: Integer;

for I := Low(t) to High(t) do
begin  
  if t[i].window = hwnd then
  begin
    Idx := I;
    break; 
  end;
end;
---
Код:
function WndToIdx(AWnd: HWND): Integer;
var
  I: Integer;
begin
  for I := Low(t) to High(t) do
  begin
    if t[I].window = AWnd then
    begin
      Result := I;
      Exit;
    end;
  end;
  Result := -1;
end;

Последний раз редактировалось Filka; 05.03.2016 в 14:40.
Filka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц