![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как лучше передать ссылку на экземпляр класса? [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