So, in dieser Lösung übergebe ich dem Zusatzformular die Rechenroutine. Das Formular erzeugt einen Thread, führt in diesem Thread die Rechenroutine aus und zeigt ein "Lebenszeichen" an
Delphi-Quellcode:
type
TMsgProcedure = procedure of object;
TMsgThread = class(TThread)
private
protected
Working : Boolean;
procedure Execute; override;
public
ExecProc : TMsgProcedure;
end;
TFormWorkMessage = class(TForm)
LabelMsgText: TLabel;
Label1: TLabel;
Image1: TImage;
ImageList1: TImageList;
Timer1: TTimer;
private
{ Private-Deklarationen }
ImgIndex : Integer;
MyThread : TMsgThread;
public
{ Public-Deklarationen }
procedure ShowMessageAndExec(MsgText:String;ExecProc:TMsgProcedure);
end;
var
FormWorkMessage: TFormWorkMessage;
implementation
{$R *.dfm}
{ TFormWorkMessage }
procedure TMsgThread.Execute;
begin
Working:=TRUE;
Self.ExecProc;
Working:=FALSE;
end;
procedure TFormWorkMessage.ShowMessageAndExec(MsgText: String;
ExecProc:TMsgProcedure);
begin
ImgIndex:=1;
LabelMsgText.Caption:=MsgText;
// Thread für die Rechenoperation initialisieren
MyThread:=TMsgThread.Create(TRUE);
MyThread.ExecProc:=ExecProc;
MyThread.Resume;
Self.Show;
// "lebenszeichen" Anzeigen und warten bis der Thread fertig ist
repeat
ImageList1.GetBitmap(ImgIndex,Image1.Picture.Bitmap);
if ImgIndex<ImageList1.Count-1 then
Inc(ImgIndex)
else ImgIndex:=0;
Self.Repaint;
Sleep(250);
until not MyThread.Working;
// ordnungsgemäß beenden
MyThread.Terminate;
MyThread.WaitFor;
MyThread.Free;
Self.Close;
end;
Meinungen?