Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.02;
Скачать: CL | DM;

Вниз

Как лучше передать ссылку на экземпляр класса?   Найти похожие ветки 

 
Andy BitOff ©   (2009-06-09 13:50) [0]

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

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 13:53) [1]

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


 
Andy BitOff ©   (2009-06-09 14:02) [2]


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

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


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

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


 
Andy BitOff ©   (2009-06-09 14:12) [4]


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

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


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

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


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

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


 
Andy BitOff ©   (2009-06-09 14:21) [7]


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

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


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

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


 
Andy BitOff ©   (2009-06-09 14:32) [8]


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

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


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


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


также, как GWL_USERDATA



Страницы: 1 вся ветка

Текущий архив: 2009.08.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
2-1244113576
Iriss
2009-06-04 15:06
2009.08.02
Clipboard Кодировка


3-1225226858
jiny
2008-10-28 23:47
2009.08.02
DBGridEh & поддержка Unicode


15-1243629004
Юрий
2009-05-30 00:30
2009.08.02
С днем рождения ! 30 мая 2009 суббота


15-1243369805
Юрий
2009-05-27 00:30
2009.08.02
С днем рождения ! 27 мая 2009 среда


15-1243590539
pasha_golub
2009-05-29 13:48
2009.08.02
Изменение published свойств компонентов