Zitat von
rab0r:
Und wie bekomm ich die
Dll dazu auf das Event zu listenen?
Du brauchst das:
Delphi-Quellcode:
unit MessageThread;
interface
uses classes, windows, messages;
type TMessageThread=class(TThread)
protected
procedure execute;
override;
private
FWndHandle:HWND;
procedure wndProc(
var msg:TMessage);
public
procedure Terminate;
//neue Terminate-Methode
property WndHandle:HWND
read FwndHandle;
// Handle des Fensters
end;
implementation
procedure TMessageThread.execute;
var msg:TMsg;
begin
FwndHandle:=allocatehwnd(wndProc);
//Fenster erstellen
try
while getmessage(msg,0,0,0)
do //MessageSchleife
begin
translatemessage(msg);
dispatchmessage(msg);
end;
finally
deallocatehwnd(FwndHandle);
//Fenster löschen
end;
end;
procedure TMessagethread.wndProc(
var msg:TMessage);
begin
try
self.dispatch(msg);
//Message an entspr. deklarierte Methoden verteilen
if msg.result=0
then
msg.result:=defwindowproc(FwndHandle,msg.Msg,msg.WParam,msg.LParam);
except
//do something!! messagebox(...
end;
end;
procedure TMEssageThread.Terminate;
begin
//da in der MessageSchelife nicht auf Terminate reagiert wird,
//beenden wir sie gleich direkt
Postmessage(FwndHandle,WM_Quit,0,0);
inherited;
end;
Und kannst davon ableiten:
Delphi-Quellcode:
type Txyz=class(TMessageThread)
procedure WMUser(var msg:TMessage); message WM_User;
//...
end;
procedure Txyz.WMUser(var msg:TMessage);
begin
//...
msg.Result:=1; //wenn Message verarbeitet
end;
Jetzt musst du den Thread nur noch erstellen und kannst in die Klasse auch noch mehr reinbauen (Felder andere Methoden...)
Wenn du das in die
DLL reinpackst würde ich auch gleich das Thread erstellen und löschen mit der DLLProc-Variable erledigen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.