Du musst in dem Thread ein Fenster erstellen (allocatehwnd) und dann eine Messageschleife (GetMessage, Dispatchmessage) aufbauen.
Also Beispielsweise so (ohne zu wissen, was drumherum passiert)
Delphi-Quellcode:
type TmyThread=class(TThread)
private
Fwnd:hwnd;
procedure WndProc(var Msg:TMessage);
procedure MMInDone (Var Msg : Tmessage); Message MM_WIM_DATA;
protected
procedure Execute; override;
[...]
procedure TmyThread.Execute;
var msg:Tmsg;
begin
Fwnd:=allocatehwnd(WndProc); //hier ist jetzt dein Windowhandle für MMAudio
try
[weitere Initialisierungen]
while getMessage(msg,0,0,0) do //warten auf Message
DispatchMessage(msg); //verteilen auf das entsprechende Fenster (gibt hier allerdings eh nur eins)
finally
Deallocatehwnd(Fwnd);
end;
end;
procedure wndProc(...);
begin
dispatch(msg); //verteilen auf die Methoden mit der entsprechenden Message -->MMInDone
end;
GEtMessage legt den Thread schlafen, bis eine neue Message ankommt. Wenn du das nicht willst, musst du peekMessage verwenden. Die while-Schleife wird verlassen, wenn du WM_Quit sendest (Achte darauf, dass du das zum terminieren des Threads brauchst -->Methode Terminate überschreiben)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.