Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi PageControl mit Tabsheets zur Laufzeit erzeugen (https://www.delphipraxis.net/116534-pagecontrol-mit-tabsheets-zur-laufzeit-erzeugen.html)

S20000 1. Jul 2008 12:47


PageControl mit Tabsheets zur Laufzeit erzeugen
 
Hallo zusammen,

ich habe folgendes Problem. Mein Formular besteht aus einem Pagecontrol
dessen Anzahl von Tabsheets erst zur Laufzeit bestimmt wird.
Es sind maximal 300 Tabsheets die erzeugt werden.

Meine Idee ist bisher, 300 Tabsheets zu erzeugen und abhängig davon
wieviele gebraucht werden, die übrigen Tab-Köpfe auszublenden.

Da gibt es doch bestimmt eine sauberere Methode?!

Gruß
Sebastian

Sherlock 1. Jul 2008 12:58

Re: PageControl mit Tabsheets zur Laufzeit erzeugen
 
...und das sagt die Delphi Hilfe dazu:

Zitat:

Zur Laufzeit fügen Sie neue Seiten hinzu, indem Sie das Objekt für die Seite erzeugen und seine Eigenschaft PageControl angeben:

Delphi-Quellcode:
NewTabSheet = TTabSheet.Create(PageControl1);
NewTabSheet.PageControl := PageControl1;

Ich würde also dann ein neues Tabsheet erzeugen, wenn eines gebraucht wird, und nicht vorsorglich 300 anlegen...

Aber bist Du sicher, daß Du das mit PageControls machen möchtest? Wären Delphi-Referenz durchsuchenTTabControls nicht besser geeignet?

Sherlock

toms 1. Jul 2008 12:59

Re: PageControl mit Tabsheets zur Laufzeit erzeugen
 
Ich würde nur jene Tabsheets erzeugen, welche wirklich gebraucht werden.

S20000 1. Jul 2008 14:25

Re: PageControl mit Tabsheets zur Laufzeit erzeugen
 
TTabControl habe ich noch nie benutzt. Wenn das besser/flexibler
ist nehme ich das. Ich nehme an, dass erstellen der
Tabs zur Laufzeit ist auch hier möglich?!

marabu 1. Jul 2008 14:26

Re: PageControl mit Tabsheets zur Laufzeit erzeugen
 
Hallo Sebastian,

selbst wenn es nur 30 TabSheets wären, läge ein Design-Fehler vor.

Kannst du deinen Anwendungsfall ein wenig beschreiben?

Freundliche Grüße

S20000 1. Jul 2008 14:33

Re: PageControl mit Tabsheets zur Laufzeit erzeugen
 
KLar. Jedes Sheet soll einen StringGrid beinhalten.
Auf diese Weise stelle ich themengebundene Variablen/Messwerte dar, die durch
die verschiedenen Tabs gruppiert werden. Ich bin für Anregungen,
wie man das besser darstellen kann natürlich offen.

marabu 1. Jul 2008 14:41

Re: PageControl mit Tabsheets zur Laufzeit erzeugen
 
Wäre es da nicht geschickter, ein einziges StringGrid zu verwenden, dessen Inhalt und Layout über ein geeigneteres UI-Control gesteuert wird?

Wenn du bisher 300 Tabsheet-Titel für die Steuerung vorgesehen hast, so könnte ich mir diese hierarchisch aufbereitet in einem TreeView-Control vorstellen.

stifflersmom 1. Jul 2008 14:43

Re: PageControl mit Tabsheets zur Laufzeit erzeugen
 
Zitat:

Zitat von S20000
KLar. Jedes Sheet soll einen StringGrid beinhalten.
Auf diese Weise stelle ich themengebundene Variablen/Messwerte dar, die durch
die verschiedenen Tabs gruppiert werden. Ich bin für Anregungen,
wie man das besser darstellen kann natürlich offen.

Erstelle auf der linken Seite eine Stringlist,
die alle "Themen" Deiner Meßwerte aufzeigt.
In Abhängigkeit des gewählten Eintrages in Deiner Stringliste
wird in der Mitt ein StringGrid mit den dementsprechenden Daten gefüllt.

Vielleicht entspricht das nicht dem idealen Design-Guide,
dafür ist die Wartung UND Benutzung allerdings übersichtlich.

Moni

stifflersmom 1. Jul 2008 14:45

Re: PageControl mit Tabsheets zur Laufzeit erzeugen
 
Zitat:

Zitat von marabu
Wäre es da nicht geschickter, ein einziges StringGrid zu verwenden, dessen Inhalt und Layout über ein geeigneteres UI-Control gesteuert wird?

Wenn du bisher 300 Tabsheet-Titel für die Steuerung vorgesehen hast, so könnte ich mir diese hierarchisch aufbereitet in einem TreeView-Control vorstellen.

Stimmt, eine Tree-Komponente ist wesentlich besser
zum Gliedern geeignet, als einfach nur eine StringListe

S20000 1. Jul 2008 14:56

Re: PageControl mit Tabsheets zur Laufzeit erzeugen
 
Hi,
an das TreeView Element hatte ich auch schon gedacht.
Bleibt immer noch das Problem, dass Abhängig von
der Anwendung mehr oder weniger "Themen" in der
TreeView Liste vorhanden sein sollen.

Danke für eure Anregungen.
Sebastian

angos 1. Jul 2008 15:25

Re: PageControl mit Tabsheets zur Laufzeit erzeugen
 
Zitat:

Zitat von S20000
Hi,
an das TreeView Element hatte ich auch schon gedacht.
Bleibt immer noch das Problem, dass Abhängig von
der Anwendung mehr oder weniger "Themen" in der
TreeView Liste vorhanden sein sollen.

Danke für eure Anregungen.
Sebastian

hi,

wo genau liegt da das problem? du kannst den doch wunderbar während der Laufzeit mit neuen Einträgen versorgen und alte rauskicken

Gruß
Ansgar

alzaimar 1. Jul 2008 17:58

Re: PageControl mit Tabsheets zur Laufzeit erzeugen
 
Jedes Element einer TTreeView (TTreeNode) hat die Eigenschaft 'Data'. Dort kannst Du reinschreiben, was du willst. Also ein Objekt, einen Zeiger oder einfach eine Zahl.

Nummieriere also deine Themen durch, erzeuge die Baumstruktur und weise Node.Data die Themennummer zu. Im OnChange-Ereignis, das immer dann eintritt, wenn von einem Knoten zum nächsten gewechselt wird, aktualisierst du dann deine Messwerte entsprechend der Node.Data-Eigenschaft des neu selektierten Knotens.

Das ist wirklich sehr einfach.

S20000 2. Jul 2008 07:58

Re: PageControl mit Tabsheets zur Laufzeit erzeugen
 
Guten Morgen,

wie ich die StringGrid mit den einzelnen Knoten verknüpfe
ist soweit klar. Ich habe es jedoch noch nicht
hinbekommen, dass je nach Programmablauf entweder
nur 5 Nodes erscheinen oder 20 Nodes.

(Nicht für jeden Nutzer sollen alle Variablen sichtbar sein...)

alzaimar 2. Jul 2008 08:12

Re: PageControl mit Tabsheets zur Laufzeit erzeugen
 
Ich habe das so gelöst:

Ich habe eine unsichtbare Treeview, in der ich zur Designzeit alle verfügbaren Knoten habe. Weiterhin habe ich eine sichtbare Treeview, die aber leer ist. Und dann habe ich eine Tabelle, die für jeden Anwender regelt, welche Knoten-IDs er sehen darf, und welche nicht. Wenn ein Knoten sichtbar ist, sind auch alle seine direkten und indirekten Vorfahren sichtbar.

Beim Programmstart kopiere ich nun nur die Knoten in die sichtbare TreeView, die laut Benutzerrrechtetabelle auch sichtbar sind.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:51 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-2025 by Thomas Breitkreuz