AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TTabSheet dynamisch erstellt & nun nicht mehr löschbar
Thema durchsuchen
Ansicht
Themen-Optionen

TTabSheet dynamisch erstellt & nun nicht mehr löschbar

Ein Thema von Errraddicator · begonnen am 27. Jun 2008 · letzter Beitrag vom 27. Jun 2008
Antwort Antwort
Errraddicator

Registriert seit: 26. Jun 2008
161 Beiträge
 
Delphi 2007 Professional
 
#1

TTabSheet dynamisch erstellt & nun nicht mehr löschbar

  Alt 27. Jun 2008, 11:54
Hiho,

da bin ich schon wieder. *G*

Also jetzt habe ich nach wie vor x Formulare und jedes Formular enthält 1 Thread der Daten liest.
Unter Anderem erstellt dieser Fred auch anhand der Daten x Tabs in diesem Formular.

Das klappt auch wunderbar mit
Delphi-Quellcode:
    // read account list & build a tab for each account
    accList := buildAccountList(qryData, dbConnection);
    for accIndex := 0 to accList.Count - 1 do
    begin
      curAcc := accList[accIndex];

      newSheet := TTabSheet.Create(display.pagAccounts);
      newSheet.PageControl := display.pagAccounts;
      newSheet.Caption := FormatFloat('00000', curAcc.number) + ' ' + curAcc.text;
    end;
Jeder Tab wird mit entsprechendem Titel angezeigt usw.

Wenn ich das Fenster jetzt aber schließen möchte, erhalte ich folgende Meldung:
"Systemfehler! Code 1400: Ungültiges Fensterhandle"

Wenn ich die Tabs nicht erstelle bekomme ich den Fehler nicht mehr, d.h. es MUSS daran liegen.
Allerdings habe ich keine Vorstellung, woran es liegen könnte. *grübel*

Die Tabs werden wie gesagt richtig dargestellt und ich kann in diesen auch navigieren wie ich möchte.
Sobald ich aber ein Free() auf ein x-beliebiges dieser Tabs aufrufen möchte, stürzt er mir ab.

Hat wer ne Idee, woran das liegen könnte?


Bis denne und danke im Voraus

cu Patrick
  Mit Zitat antworten Zitat
Errraddicator

Registriert seit: 26. Jun 2008
161 Beiträge
 
Delphi 2007 Professional
 
#2

Re: TTabSheet dynamisch erstellt & nun nicht mehr löschb

  Alt 27. Jun 2008, 12:10
So, nach ein wenig Rumspielen bin ich jetzt auf den Trichter gekommen, dass das Problem evt. daran liegt dass der Thread (eine Klasse die logischerweise nix mit dem Formular an sich zu tun hat) das Tab erstellt.

Denn wenn ich einen Tab direkt inner IDE eingebe oder aber auch dynamisch im Form.Show() Event z.B. erstellt funktioniert alles einwandfrei.
Erstelle ich den Tab im externen Thread stürzt das Fenster ab.

Kann sowas sein?
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: TTabSheet dynamisch erstellt & nun nicht mehr löschb

  Alt 27. Jun 2008, 12:30
Wobei wir wieder beim sehr beliebten Thema "VCL und Threads" sind.
Die VCL ist nämlich nicht Threadsicher.

Niemals in einem Thread auf die VCL (Elemente eines Forms) direkt zugreifen.
Dies gilt auch, wenn Du einem Form ein Element (Tab in einem TabSheet) hinzufügen möchtest.
Selbiges auch, wenn Du "nur" die Caption eines Labels ändern möchtest.

Da muss man Synchronize verwenden.

Die Suche im Forum mit den Suchbegriffen "VCL und Threads" oder "Synchonize" wird Dir weiterhelfen.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Errraddicator

Registriert seit: 26. Jun 2008
161 Beiträge
 
Delphi 2007 Professional
 
#4

Re: TTabSheet dynamisch erstellt & nun nicht mehr löschb

  Alt 27. Jun 2008, 12:39
Hey Supi!
Hab jetzt in dem Formular eine Funktion "addTab" gemacht, die einen neuen Tab erzeugt und diese rufe ich dann aus dem Thread heraus mit "Synchronize" auf, dann passts.

Jetzt habe ich nur noch eine Frage dazu:
So wie das aussieht, kann ich dort ja nur sagen, welche Funktion er nehmen soll, gibt es auch eine Möglichkeit dieser Funktion dann Parameter mitzugeben, oder muss ich das z.B. über globale/lokale Variablen bzw. ganz anders lösen?
  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 21:13 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