Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TTabControl - Tabs auf Stringlist umleiten? (https://www.delphipraxis.net/190656-ttabcontrol-tabs-auf-stringlist-umleiten.html)

idefix2 22. Okt 2016 18:49

TTabControl - Tabs auf Stringlist umleiten?
 
Hallo, noch eine Frage zu TTabControl - die betrifft wahrscheinlich analog auch andere Komponenten.

Ich habe derzeit in meinem Programm eine Stringliste "Sheets".
Zu jedem String der Stringliste gibt es den gleichen String in TabControl1.Tabs, und in der Stringliste zusätzich ein Objekt, das die Daten enthält, die im entsprechenden Tab angezeigt werden.
Die Zweigleisigkeit ist mühsam, wenn in Sheets Strings geändert oder gelöscht werden oder neu dazukommen. Kann ich einfach mit tabcontrol1.tabs:=sheets dem tabcontrol die Stringliste direkt unterjubeln, oder könnte das in der Folge zu Problemen führen?

himitsu 22. Okt 2016 18:54

AW: TTabControl - Tabs auf Stringlist umleiten?
 
Zitat:

Zitat von idefix2 (Beitrag 1351752)
Kann ich einfach mit tabcontrol1.tabs:=sheets dem tabcontrol die Stringliste direkt unterjubeln, oder könnte das in der Folge zu Problemen führen?

Es werden da nur die Strings durch TStrings kopiert ... es wird nicht das ganze TStrings-Objekt übernommen, sondern nur der Text-Inhalt.

Ob bei TTabControl.Items die Objects überhaupt implementiert sind, weiß ich nicht.
z.B. Bei TComboBox sind sie es, denn da wird Objects in die Windows-COMBOXOX umgeleitet, aber bei TMemo nicht, da es dort keine Zeilen-Objekte gibt.


Soooo, du gibst deiner TStringList ein OnChanged-Event und da drin wird GUI/TTabControl aktualisiert.
Strings werden auch nur in deinem Daten-Objekt geändert und niemals in der GUI.

idefix2 22. Okt 2016 19:23

AW: TTabControl - Tabs auf Stringlist umleiten?
 
Die Property tabs ist vom Typ TStrings und unterstützt selbst keine Objekte. Aber wenn ich dort den Zeiger auf eine Stringlist zeigen lasse, dann würde die Stringlist das ja können.

Die Frage ist, ob etwas dagegen spricht, die property "Tabs" direkt auf die Stringliste zeigen zu lassen, in der die Datenmanipulation erfolgt. Was ist der Vorteil eines separaten "strings"-Objekts, in dem alle Änderungen der Stringliste 1:1 nachgebildet werden, bzw. welche Probleme könnten andererseits auftreten, wenn man den TStrings Zeiger des tabcontrols direkt auf die entsprechende Stringliste zeigen lässt? Die Bearbeitung der Daten erfolgt dann ja weiterhin in meiner "Sheets" Stringliste.

edit:
Mir dämmert gerade, dass ich ein ähnliches Problem an anderer Stelle schon hatte. Die Zuweisung auf die Property Tabs dürfte wahrscheinlich auch bei dieser Komponente über einen Setter erfolgen, der eben nicht den Zeiger umsetzt, sondern statt dessen die Strings kopiert. Da wird mir also nichts übrig bleiben als über das onchanged-Event zu gehen, wie du es vorgeschlagen hast.

idefix2 22. Okt 2016 20:02

AW: TTabControl - Tabs auf Stringlist umleiten?
 
Ist es eigentlich möglich, die Onchange-routine als anonyme Methode zuzuweisen? Wenn ja, wie schaut das aus? "Procedure(sender: Tobject) of object" schluckt die Syntaxprüfung bei der Zuweisung nicht.

himitsu 23. Okt 2016 12:29

AW: TTabControl - Tabs auf Stringlist umleiten?
 
Nein.

Variablen vom Typ "procedure of object" nehmen immer nur Methoden und Klassenmethoden an,
Variablen vom Typ "procedure" nehmen nur Prozeduren und statische Klassenmethoden an
und Variablen vom Typ "reference to procedure" nehmen Alles an.

Eventmethoden der VCL/RTL/FMX sind fast immer nur "procedure of object".

sh17 24. Okt 2016 05:44

AW: TTabControl - Tabs auf Stringlist umleiten?
 
Probier mal https://github.com/norgepaul/TChromeTabs

Das ist quasi nur die Tab-Leiste, die Du mit dem pro Tab enthaltenen Data-Feld an Deine Liste binden kannst. Je nachdem, was für ein Tab gewählt wird, blendest Du drunter den passenden Inhalt ein. Das können z.B. auch verschiedene Frames sein.

Jim Carrey 24. Okt 2016 10:14

AW: TTabControl - Tabs auf Stringlist umleiten?
 
Ich sehe das etwas anders.
Warum direkt eine neue Komponente verwenden, die zudem (wahrscheinlich) auch noch anders aussieht?

Zitat:

Die Zweigleisigkeit ist mühsam, wenn in Sheets Strings geändert oder gelöscht werden oder neu dazukommen
So oft wird sich da wahrscheinlich nichts ändern.
Die Zeit, die man für das Ändern benötigt, ist wahrscheinlich geringer, als die Zeit die man benötigt jetzt alles in eine neue Komponente zu basteln die man nicht kennt.

Wenn du so etwas in der Art machst, hast du schon weniger Mühe:

Delphi-Quellcode:
// ... FormCreate
begin
 // gehen wir davon aus, dass sheets schon erstellt wurde
 // .....
 for i := 0 to sheets.count - 1 do
  begin
   sheets.tabs[i] := sheets.Strings[i];
  end;
end;
Wenn du etwas in der StringListe änderst, ändern sich zeitgleich die Titel der Tabs. Eine Änderung weniger zu erledigen beim Ändern der StringListe.

ConnorMcLeod 24. Okt 2016 10:19

AW: TTabControl - Tabs auf Stringlist umleiten?
 
Wir benötigen endlich ein VirtualTabControl! ;-)

himitsu 24. Okt 2016 11:23

AW: TTabControl - Tabs auf Stringlist umleiten?
 
Nimm den VirtuialTreeView, mach eine ganz große Spalte und eine Zeile rein, über die ganze Anzeige und da dann virtuell den gewünschten Inhalt rein. :stupid:

Jim Carrey 24. Okt 2016 12:53

AW: TTabControl - Tabs auf Stringlist umleiten?
 
Zitat:

Zitat von himitsu (Beitrag 1351876)
Nimm den VirtuialTreeView, mach eine ganz große Spalte und eine Zeile rein, über die ganze Anzeige und da dann virtuell den gewünschten Inhalt rein. :stupid:

Ich benutze auch immer Benzin zum Kochen :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 Uhr.
Seite 1 von 2  1 2      

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