Ein herzliches Hallo an alle,
Ich würde gern einen Stammbaum grafisch und interaktiv ausgeben. Jedes Element soll anklickbar sein.
Ich dachte mir, dass ich dazu zwei Klassen brauche:
TFamilyTree (abgeleitet von TCanvas) und
TTreeItem.
TFamilyTree hat folgende Eigenschaften, da ich
bis zu 4 Generationen (optional) abbilden möchte:
- Proband: TTreeItem
- Children: TObjectList (TTreeItem)
- Father: TTreeItem
- Mother: TTreeItem
- GrandPaA: TTreeItem
- GrandPaB: TTreeItem
- GrandMaA: TTreeItem
- GrandMaB: TreeItem
- Offset: TBitmap
Später könnten auch noch eine Liste mit den Partnern (Spouses) und Geschwistern (Siblings) hinzugefügt werden. Es geht aber erstmal ums Prinzip.
TTreeItem hat folgende Eigenschaften:
- ID: Integer
- Offset: TBitmap
- Width: Integer = 200
- Height: Integer = 75
Nun soll
TFamilyTree beispielsweise nie größer als 800x600 Pixel sein. Die Größe des
Offsets soll sich dynamisch generieren. Dazu muss folgendes gecheckt werden:
- gibt es einen Probanden?
- hat der Proband Eltern? Einen Teil, oder beide (Breite würde sich verdoppeln!)
- hat der Proband Kinder? (Breite generiert sich dynamisch aus der Anzahl der Kinder + 20 Pixeln Abstand dazwischen)
- so in etwa, mit den Großeltern wäre es dasselbe, wobei in der 1. Generation da ja maximal 4 TTreeItems nebeneinander stünden
Hat ein Proband nun sehr viele Kinder, wir das
Offset schnell breiter, als 800 Pixel.
Mich würde nun interessieren, wie man möglichst sinnvoll und WIE die Breite und Höhe des
Offsets vorab berechnen kann und wie man bei einer festen Breite und Höhe von
TFamilyTree diesen via
Scrollbars scrollen kann, aber so, dass man die Objekte immer noch richtig anklicken kann (also eine Koordinatenfrage!).
Hat jemand etwas ähnliches schon einmal versucht? Könnt ihr mir folgen? Habe ich mir die richtigen Gedanken gemacht?
Danke Euch im Voraus.