Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.08.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
2-1244129220
Мелкий
2009-06-04 19:27
2009.08.02
Как перейти к n-ой записи ADOQuery?


15-1244147405
Юрий
2009-06-05 00:30
2009.08.02
С днем рождения ! 5 июня 2009 пятница


15-1243701266
pushkin42
2009-05-30 20:34
2009.08.02
IBX SQL протокол


15-1243584571
Клерк
2009-05-29 12:09
2009.08.02
Дизайн пользовательского интерфейса 2


2-1244113576
Iriss
2009-06-04 15:06
2009.08.02
Clipboard Кодировка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский