AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf Formular aus Thread ?

Ein Thema von moelski · begonnen am 1. Jan 2009 · letzter Beitrag vom 3. Jan 2009
Antwort Antwort
moelski

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

Zugriff auf Formular aus Thread ?

  Alt 1. Jan 2009, 11: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
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Zugriff auf Formular aus Thread ?

  Alt 1. Jan 2009, 12:37
Auf VCL Elemente des Hauptthreads kann man nur über die Methode Synchronize zugreifen, da die VCL nicht threadsafe ist. Such mal nach Synchronize in der Hilfe oder hier im Forum. Oder guck dir mal mein Threading Demo an und dort insbesondere die Demos: http://delphitutorials.michael-puff.de
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
moelski

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

Re: Zugriff auf Formular aus Thread ?

  Alt 1. Jan 2009, 20:27
Moin !

Hmm beisst sich da die Katze nich in den Schwanz?
Denn hier kann man folgendes lesen:
http://www.toolbox-mag.de/data/tx22003artikel1.pdf
Zitat:
Der Thread selbst läuft erst dann weiter, wenn der Methodenaufruf
zurückkehrt.
Bedeutet das nicht das meine Hauptanwendung dennoch mit dem Speichern blockiert wird? Weil genau das möchte ich ja verhindern
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Zugriff auf Formular aus Thread ?

  Alt 1. Jan 2009, 20:38
Ja, in dem Fall hast du hier ein Problem. Du müsstest erstmal eine Kopie des Diagramms (also eine Art Screenshot) haben.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
moelski

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

Re: Zugriff auf Formular aus Thread ?

  Alt 1. Jan 2009, 20:44
Moin !

Herrje ne Kopie ... Speichertechnisch aber nicht der Bringer, oder?

Wie würde ich das praktisch angehen? Dann müsste ich ja ein komplett neues TCHart Objekt erstellen. Nur wie kriegt der Thread davon was mit?

Gibt es nicht eine Möglichkeit mit dem vorhandenen Chart irgendwie zu arbeiten?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Zugriff auf Formular aus Thread ?

  Alt 1. Jan 2009, 20:54
das mag jetzt böse klingen aber ich glaube hier liegt ein Designproblem vor.
Das problem ist das du scheinbar Darstellung, Logic und Daten nicht von einander getrennt hast.
Das rächt sich jetzt und ist eigentlich nur vernünftig zu lösen in dem du das ganze voneinander trennst. Klingt grausam, ist aber so
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Zugriff auf Formular aus Thread ?

  Alt 1. Jan 2009, 20:56
Die Daten der Chart-Komponenten müssen ja auch irgendwie erstmal dorthin kommen. Wenn du die Daten vor der "Verteechartung" in einer passenden "GUI-Ent"kopelten Struktur speicherst (Stichwort: Trennung Datenhaltung von GUI) kannst du diese problemlos in einem Thread speichern.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
moelski

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

Re: Zugriff auf Formular aus Thread ?

  Alt 1. Jan 2009, 21:16
Moin !

Zitat:
Wenn du die Daten vor der "Verteechartung" in einer passenden "GUI-Ent"kopelten Struktur speicherst
Hmm die Idee war nur das wir direkt die Load / Save Funktion von TChart benutzen. Denn somit müssen wir das Rad nicht neu erfinden.

Zitat:
Das problem ist das du scheinbar Darstellung, Logic und Daten nicht von einander getrennt hast.
Das sehe ich jetzt nicht ganz so. Das TChart hält die Daten eh vor. Warum sollte ich sie nochmal zusätzlich irgendwo vorhalten?
Also ihr habt ja schon in gewisser Weise Recht, aber ich wollte das ganze Konstrukt nicht zu kompliziert haben.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Zugriff auf Formular aus Thread ?

  Alt 3. Jan 2009, 16:14
Zitat von moelski:
Warum sollte ich sie nochmal zusätzlich irgendwo vorhalten?
Das ist ja schon fast eine rekursive Frage zu diesem Thread. Die Antwort ist eben, weil du dann dieses Problem hier nicht hättest.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
moelski

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

Re: Zugriff auf Formular aus Thread ?

  Alt 3. Jan 2009, 16:24
Moin !

Ich habe das Problem jetzt gelöst. Das Speichern erfolgt über eine Kopie.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz