![]() |
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? |
AW: TTabControl - Tabs auf Stringlist umleiten?
Zitat:
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. |
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. |
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.
|
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". |
AW: TTabControl - Tabs auf Stringlist umleiten?
Probier mal
![]() 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. |
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 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:
Wenn du etwas in der StringListe änderst, ändern sich zeitgleich die Titel der Tabs. Eine Änderung weniger zu erledigen beim Ändern der StringListe.
// ... 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; |
AW: TTabControl - Tabs auf Stringlist umleiten?
Wir benötigen endlich ein VirtualTabControl! ;-)
|
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:
|
AW: TTabControl - Tabs auf Stringlist umleiten?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz