Moin !
Ich habe hier eine merkwürdige Sache und mir fehlt die Erklärung
Also wir haben eine Anwendung mit
MDI Fenstern. Wenn nun ein
MDI Fenster geschlossen wird über X dann möchte ich den Inhalt des darin befindlichen TChart in eine Datei sichern. Da das aber mitunter etwas dauern kann würde ich das gerne mit einem Thread tun.
Ich habe deshalb folgendes gemacht:
Delphi-Quellcode:
procedure TChild_Grafik.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var SaveThread : TSaveThread;
begin
if IsActive then begin
CanClose := False;
ShowMessage('Sorry, aber die Grafik is aktiv !!');
end else begin
if ThreadDone = False then begin
CanClose := False;
// Datei Speichern
SaveThread := TSaveThread.Create(True); { create suspended – secondprocess does not run yet }
SaveThread.FreeOnTerminate := True; { don't need to cleanup after terminate }
SaveThread.Priority := tpLower; // set the priority to lower than normal
SaveThread.ChartForm := Child_Grafik;
SaveThread.Resume; { now run the thread }
end else
CanClose := True;
end;
end;
Das ist der Aufruf des Threads und das Verhindern dass das Fenster voreilig geschlossen wird ...
Das ist dann der Thread bzw. die Definition:
Delphi-Quellcode:
type
TSaveThread = class(TThread)
private
{ private-Deklarationen }
ChartForm : TForm;
protected
procedure Execute; override;
end;
Und das ist Execute:
Delphi-Quellcode:
procedure TSaveThread.Execute;
begin
SaveChartToXMLFile(TCustomChart(TChild_Grafik(ChartForm).MDIChart),
'Save Tests\' + 'Name.TEE',
True,
True );
Child_Grafik.Close;
end;
Das verwirrende ist nun aber das ChartForm = NIL ist. Und insofern kann ich dann auch nicht auf das Chart zugreifen. Auch wenn ich das Formular beim Speichern direkt angebe kriege ich eine Zugriffverletzung weil das Formular scheinbar = NIL ist also nicht existiert.
Wo liegt denn hier der Hase begraben
Und allen ein frohes neues Jahr 2009