Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как лучше передать ссылку на экземпляр класса? [D7, XP]


Andy BitOff ©   (2009-06-09 13:50:00) 

Точнее даже не как лучше, а как вообще это сделать =)

TMyKeyPressEvent = procedure(Sender: TObject; var Key: Word; Shift: TShiftState) of object;

type
TMyClass = class
private
  FonKeyPress: TMyKeyPressEvent;
  procedure PressKey(var aMsg: TMsg);
public
  property onKeyPress: TMyKeyPressEvent read FonKeyPress write FonKeyPress;

implementation

function WndProc(Wnd: HWND; message: UINT; wParam: Integer; lParam: Integer) : Integer; stdcall;
begin
case message of
  WM_KEYDOWN: begin
    TMyClass( Здесь_должна_быть_ссылка_на_нужный_экземпляр_класса).PressKey(msg);
  end;
 else
   result := DefWindowProc(Wnd, message, wParam, lParam);
 end;
end;

procedure TMyClass.PressKey(var aMsg: TMsg);
var
a: Word;
begin
if Assigned(FonKeyPress) then begin
  a := aMsg.lParam;
  FonKeyPress(Self, a, KeysToShiftState(aMsg.wParam));
  aMsg.lParam := a;
end;
end;


Код в общих чертах...
Понятно, что, если экземпляров несколько, то обработчик сообщений должен знать экземпляр.

Сумбурно как-то... =(


Игорь Шевченко   (2009-06-09 15:06:00) [1]


> И как нас это спасет?


также, как GWL_USERDATA


Andy BitOff   (2009-06-09 14:32:00) [2]


> Игорь Шевченко ©   (09.06.09 14:16) [6]
> 2. сохранить экземпляр класса в GWL_USERDATA у hwnd при обработке WM_CREATE

Спасибо. Работает.


Andy BitOff   (2009-06-09 14:21:00) [3]


> Игорь Шевченко ©   (09.06.09 14:16) [6]
> 1. завести глобальную переменную

И как нас это спасет?


> 2. сохранить экземпляр класса в GWL_USERDATA у hwnd при
> обработке WM_CREATE

Посмотрю. Спасибо.


Игорь Шевченко   (2009-06-09 14:16:00) [4]

1. завести глобальную переменную
2. сохранить экземпляр класса в GWL_USERDATA у hwnd при обработке WM_CREATE


Медвежонок Пятачок   (2009-06-09 14:15:00) [5]

если не сам шлешь, то и едиснтвенный экземпляр тебе не передать.
если же сам, то в одном из параметров передавай ссылку на tlist а уже в него добавляй экземпляры.
если оба параметра заняты, можно создать рекорд из трех полей.
в два первых перенести оригинальные параметры, в третий - ссылку на тлист со списком экземпляров


Andy BitOff   (2009-06-09 14:12:00) [6]


> Медвежонок Пятачок ©   (09.06.09 14:07) [3]
> не понял я чего как

Как "передавать через лист в lparam or wparam"? Я же сам не шлю сообщения? И что такое "лист" в этом контексте.


Медвежонок Пятачок   (2009-06-09 14:07:00) [7]

не понял я чего как


Andy BitOff   (2009-06-09 14:02:00) [8]


> Медвежонок Пятачок ©   (09.06.09 13:53) [1]

Как? Для таймера я так и делаю, но там при установке таймера можно задать. А для WM_KEYDOWN как?


Медвежонок Пятачок   (2009-06-09 13:53:00) [9]

если их много, передавать через лист в lparam or wparam


Наверх

Титульная страница Поиск, карта сайта Написать письмо