Hallo,
in einer Klasse möchte ich u.a. ein
NonVCL Fenster anzeigen (also RegisterClassEx/CreateWindowEx).
Es gibt ja das bekannte Problem, dass als WndProc keine Methonde direkt angegeben werden kann (self Parameter). Hier im Forum gibt es auch mind. zwei Lösungen für das Problem. Ich habe jetzt eine etwas andere gefunden, die auf den ersten Blick funktioniert. Bin mir aber nicht sicher, ob ich evtl. ein Problem damit übersehe.
Aufs wesentliche gekürzt, sieht das jetzt so aus:
Delphi-Quellcode:
procedure TXYZClass.RegisterWindowClass;
function _WndProc(hWnd: HWND; uMsg: UINT;
wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
Message : TMessage;
Handled : Boolean;
begin
Message.Msg := uMsg;
Message.WParam := wParam;
Message.LParam := lParam;
self.WndProc(Message, Handled);
if Handled then
Result := 0
else
Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
end;
var
WCE: TWndClassEx;
begin
WCE.lpszClassName := 'TXYZWindowClass';
[...]
WCE.lpfnWndProc := @_WndProc;
RegisterClassEx(WCE);
end;
procedure TXYZClass.WndProc(const Message: TMessage; var Handled: Boolean);
begin
Handled := False;
if Message.Msg = WM_LBUTTONDOWN then
begin
ShowMessage('Left Mousebutton down.');
Handled := True;
end;
end;
PS: Dass das Fenster unbedingt vor der Klasse zerstört sein muss, ist soweit klar.