Einzelnen Beitrag anzeigen

moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

Zugriff auf Formular aus Thread ?

  Alt 1. Jan 2009, 12:55
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
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat