AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Design mit (fast) gleichen Tabsheets vereinfachen
Thema durchsuchen
Ansicht
Themen-Optionen

Design mit (fast) gleichen Tabsheets vereinfachen

Ein Thema von Dalai · begonnen am 25. Okt 2023 · letzter Beitrag vom 1. Nov 2023
Antwort Antwort
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#1

Design mit (fast) gleichen Tabsheets vereinfachen

  Alt 25. Okt 2023, 17:01
Hallo ihr.

Ich hoffe, mir kann jemand bei diesem Design-Problem helfen.

Erstmal zu den Fakten.
Gegeben ist ein PageControl, auf dem sich aktuell 7 TabSheets befinden. Jedes der TabSheets sieht ungefähr so aus wie im angehangenen Bild. Die Komponenten auf diesen TabSheets - Panel, GroupBoxen und Splitter - sind identisch. Der einzige Unterschied zwischen den TabSheets sind die in den GroupBoxen plazierten ListViews. Einige haben nur eine Spalte, andere haben zwei oder vier. Die Spaltenbreiten und deren Titel sind ebenfalls unterschiedlich. Außerdem gibt es bei den ListViews verschiedene Alignments aufgrund der Splitter: die links positionierten ListViews haben alLeft, die beiden rechts positionierten haben alClient, um den Rest des Platzes auszufüllen.

Nun zur Problemstellung.
Ein weiteres TabSheet hinzuzufügen, ist ziemlich aufwendig, weil alle Komponenten kopiert werden müssen. Das muss zwar nicht einzeln erfolgen, weil direkt auf dem TabSheet zwei Panel und ein Splitter liegen und somit nur diese "Container" kopiert werden müssen. Aber benannt werden müssen die Kopien trotzdem noch.

Nun dachte ich, man könnte das mit Frames vereinfachen. Leider funktioniert das nicht so, wie ich mir das vorstelle. Ich kann die bei meinen Tests mit Frames aufgetretenen Probleme gern genauer ausführen, aber da der Text eh schon recht lang ist, belasse ich es vorerst dabei. Aber ich weiß noch nicht so recht zu beurteilen, ob Frames überhaupt der richtige oder geeignete Weg sind.

Wie würdet ihr das angehen? ListViews, bzw. generell Komponenten, zur Laufzeit erzeugen will ich wegen des Aufwands aufgrund der unterschiedlichen Eigenschaften (Anzahl+Breite+Titel der Spalten, Alignment etc.) vermeiden.

Grüße
Dalai
Angehängte Grafiken
Dateityp: png DP_TabSheet_ListViews+Splitter.png (5,9 KB, 66x aufgerufen)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.191 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Design mit (fast) gleichen Tabsheets vereinfachen

  Alt 25. Okt 2023, 17:11
Frames sind genau dafür gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.667 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Design mit (fast) gleichen Tabsheets vereinfachen

  Alt 25. Okt 2023, 17:28
Tabs dynamisch erzeugen und jeweils einen Frame dort einblenden. Diese Frames können ggf. identisch sein und nur mit unterschiedlichen Parametern initialisiert werden oder sie können von einem Basis-Frame abgeleitet werden, der alles enthält, was die Frames gemeinsam haben. Ich bin persönlich kein großer Fan von visueller Vererbung und würde deshalb versuchen, mit nur einem Frame auszukommen und die unterschiedliche Verhaltensweise mittels Callbacks oder Events implementieren, aber das ist größtenteils Geschmacksache.

Hinweis: Falls Du dieselbe Frame-Klasse mehrfach erzeugst, musst Du danach entweder deren Namen auf '' oder auf einen eindeutigen String setzen, sonst mosert die VCL was von doppelten Controlnamen.
Thomas Mueller
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
386 Beiträge
 
#4

AW: Design mit (fast) gleichen Tabsheets vereinfachen

  Alt 25. Okt 2023, 18:17
Hi,

I did the following many times:
1) You need two frames, one have everything except the difference which in this case your ListView, the other frame will have all your ListViews, these ListViews should not have alClient and it doesn't matter how they are positioned on that frame, TTabTampleteFrame and TListViewsFrame.
2) Don't inherit the frame TTabTampleteFrame, just register its class and create it at runtime, so you don't need to waste time with naming.
3) The frame with ListViews (TListViewsFrame) can be created any time you want, you need one copy of it, and you will change the parent for each ListView to its according TabSheet/Frame, and set the alignment, position, etc..
4) It is easier and more usable to have variables declared as the first frame TTabTampleteFrame or the tab inside it if you want, then just put with only ":=" the created frame to it (or tabsheet or even the listview.. it depends on your code and what you need), and continue to use it as you have them designed separately.
5) The point of variables is to remove the need to use any indexing, so double think what are you will need to access in them in specific as variables will give you that, other controls in the template frame will be a little harder to access.

Hope that help, and hope it was clear.
Kas
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
386 Beiträge
 
#5

AW: Design mit (fast) gleichen Tabsheets vereinfachen

  Alt 25. Okt 2023, 18:22
Small adjustment:
you can have a form instead of a frame for your ListViews, and let it being auto created the project, that is simpler.
Kas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.325 Beiträge
 
Delphi 12 Athens
 
#6

AW: Design mit (fast) gleichen Tabsheets vereinfachen

  Alt 25. Okt 2023, 18:40
Einfacher ... nicht wirklich. (fast gleich aufwändig)

Aber dafür sind Forms problematischer, vor allem was die Fokus-Steuerung betrifft.
Ein Therapeut entspricht 1024 Gigapeut.
  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 18:00 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