Ich muss auch noch schnell zurück rudern! Das Problem an meinem Code ist, dass das (Window-)
Handle fehlt, an welches die Nachricht geschickt werden kann. Denn nur dann wird die
WndProc()
angesprungen.
Hier die funktionierende Version.
Delphi-Quellcode:
const
WM_MY_MESSAGE = WM_USER + 100;
type
TTest = class(TObject)
private
FHandle : HWND;
procedure WndProc(var Msg: TMessage);
procedure OnMyMessage(var Msg: TMessage); message WM_MY_MESSAGE;
public
constructor Create(); reintroduce;
destructor Destroy(); override;
end;
procedure TTest.WndProc(var Msg: TMessage);
begin
Dispatch(Msg);
end;
procedure TTest.OnStartupMessage(var Msg: TMessage);
begin
if (Msg.Msg = WM_MY_MESSAGE) then
begin
end;
end;
constructor TTest.Create();
begin
inherited Create();
FHandle := Classes.AllocateHWnd(Self.WndProc);
end;
destructor TTest.Destroy();
begin
DeallocateHWnd(FHandle);
inherited Destroy();
end;
-- EDIT: Dann bau halt eine passende if-Abfrage in die WndProc-Methode ein.
Kann ich dann ganz auf
procedure OnMyMessage(var Msg: TMessage); message WM_MY_MESSAGE;
verzichten?
Verwende Delphi 5.
AllocateHWnd
kennt der Compiler nicht...
Da das Thema immer noch aktuell ist, möchte ich diesen Post noch einmal aufleben lassen.
Wie kann ich denn den Lösungsansatz von s.h.a.r.k ohne
AllocateHWnd
unter Delphi 5 realisieren?