Registriert seit: 19. Jan 2003
732 Beiträge
Turbo Delphi für Win32
|
Re: Message beim ThreadEnde
13. Apr 2007, 00:36
Ich hab hier noch ein kleines Programm rumliegen, wo ich Windows Messages zur Thread-MainWindow-Komminikation verwendet habe... vielleicht bringt es dir ja was.
Delphi-Quellcode:
//Die eigene Windows-Botschaft. WM_APP + x ist für die Intra-Prozess-Kommunikation gedacht.
const
WM_THREADUPDATE = WM_APP + 2404;
...
//Das Objekt, das mit lParam übergeben wird.
type
TThreadMessage = class(TObject)
private
FErrorCode: Integer;
FMessageStr: String;
public
constructor Create(ErrCode: Integer; Msg: String);
published
property ErrorCode: Integer read FErrorCode write FErrorCode;
property MessageStr: String read FMessageStr write FMessageStr;
end;
...
//Versenden der Nachricht aus TThread.Execute
try
Response := HTTP.Post(POSTUrl, Formdata);
PostMessage(MainWindowHandle, WM_THREADUPDATE, 0,
Integer(TThreadMessage.Create(ERR_OK, Response)));
except
on E: Exception do begin
PostMessage(MainWindowHandle, WM_THREADUPDATE, 0,
Integer(TThreadMessage.Create(ERR_POST, E. Message)));
end;
end;
Delphi-Quellcode:
//Verarbeiten der Nachricht des Threads im Hauptfenster.
TfrmMain = class(TForm)
...
private
procedure UpdateView(var Msg: TMessage); message WM_THREADUPDATE;
...
end;
...
procedure TfrmMain.UpdateView(var Msg: TMessage);
var
ThreadMsg: TThreadMessage;
begin
ThreadMsg := TThreadMessage(Msg.LParam);
case ThreadMsg.ErrorCode of
ERR_OK: ...
ERR_POST: ...
end;
ThreadMsg.Free; <-- wichtig
end;
Gruß,
Dani
Dani H. At Least I Can Say I Tried
|
|
Zitat
|