Ich möchte meine Lösung kurz vorstellen:
Meine Klasse sieht jetzt so aus:
Delphi-Quellcode:
TTestThread = class(TThread)
private
{ Private-Deklarationen }
protected
Msg: string;
DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons;
HelpCtx: Longint;
DlgResult: Integer;
procedure ThreadDlg();
procedure Execute; override;
public
function ThreadDlgExecute(const InMsg: string; InDlgType: TMsgDlgType;
InButtons: TMsgDlgButtons; InHelpCtx: Longint):integer;
end;
Die Funktionen:
Delphi-Quellcode:
procedure TTestThread.ThreadDlg();
begin
DlgResult:=MessageDlg(Msg, DlgType, Buttons, HelpCtx);
end;
function TTestThread.ThreadDlgExecute(const InMsg: string; InDlgType: TMsgDlgType;
InButtons: TMsgDlgButtons; InHelpCtx: Longint):integer;
begin
Msg:=InMsg;
DlgType:=InDlgType;
Buttons:=InButtons;
HelpCtx:=InHelpCtx;
Synchronize(ThreadDlg);
result:=DlgResult;
end;
Das schöne daran ist, dass ich nur den Funktionsaufruf geringfügig ändern muss:
MessageDlg('Fehlfunktion!',mtError ,[mbOK],0);
in
form1.Thread.ThreadDlgExecute('Fehlfunktion!',mtError ,[mbOK],0);
und
ich kann die Funktion auch von außerhalb des Threads aufrufen und es geht trotzdem.
Was meint Ihr
Kann man das so machen, oder ist das "unsauber"
Gruß und besten Dank schon mal für die konstruktive Kritik....
StTüff