AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign konzeptionelle Gedanken optische Darstellung Stammbaum
Thema durchsuchen
Ansicht
Themen-Optionen

konzeptionelle Gedanken optische Darstellung Stammbaum

Ein Thema von hansklok · begonnen am 5. Aug 2015 · letzter Beitrag vom 14. Mai 2018
Antwort Antwort
Seite 3 von 4     123 4      
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#21

AW: konzeptionelle Gedanken optische Darstellung Stammbaum

  Alt 14. Mai 2018, 09:25
Ich betreibe Ahnenforschung seit 2013 und verstehe also das, was du da machen willst.

Mal abgesehen von der Datenstruktur, die mit dem beispielhaften TFamilyTree und TPerson erstmal völlig ausreichend ist (Adoptivkinder und andere Spezialfälle würde ich mir wirklich für später aufsparen), was genau bereitet dir Kopfzerbrechen?

Das reine Zeichnen an und für sich, also Kästchen in der und der Farbe mit Schrift können wir dir anhand von Delphi-Code zeigen, aber wahrscheinlich nicht anhand von Bespielen mit Xojo (wenn du damit noch entwickelst).

Wie man etwas anordnen und zeichen kann - also die Frage nach dem Konzept - wäre es gut sich Inspiration bei Ahnenblatt, MyHeritage, Ancestry oder eine der 13264 anderen Stammbaumprogrammen zu holen und das einfach mal nachzuzeichnen.
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#22

AW: konzeptionelle Gedanken optische Darstellung Stammbaum

  Alt 14. Mai 2018, 12:23
Diese TFamilyTree Klasse soll vor der grafischen Ausgabe automatisch die benötigte Breite und Höhe des Baums anhand seiner Graphen (Partner, Geschwister, Kinder) und die Anzahl der Generationen in ein Bitmap zeichnen. Anhand der Größe des Bitmap kann man ja dann auch die Größe des Canvas einstellen. Was mich interessiert ist also, wie man das ganze ohne viel manuelles Zutun mathematisch arrangiert.

Delphi-Code geht in Ordnung für mich, die Syntax kann ich lesen und verstehen.

Und wie ich mir das optisch vorstelle, davon habe ich im ersten Beitrag auf Seite 2 ein Bild gepostet.

Geändert von hansklok (14. Mai 2018 um 12:27 Uhr)
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#23

AW: konzeptionelle Gedanken optische Darstellung Stammbaum

  Alt 14. Mai 2018, 12:54
Die Struktur von SirRufo scheint sehr gut. Vielleicht kann man anhand derer die dynamische Berechnung der Positionen der einzelnen Elemente und der sich daraus ergebenden Gesamtbreite und -höhe erklären.
Was mir dort aber noch etwas Kopfzerbrechen bereitet, wie kann man dann mit dieser Struktur mittels MouseMove Event die aktuelle Person abfragen? Denn es gibt ja nicht nur reine TPerson, sondern in anderen Klassen enthaltene TPerson.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#24

AW: konzeptionelle Gedanken optische Darstellung Stammbaum

  Alt 14. Mai 2018, 13:34
Ich möchte dir nicht zu Nahe treten, aber vielleicht ist das Vorhaben auch etwas über deinen Möglichkeiten.
Fang mal ganz klein an. Du brauchst eine Datenstruktur, die erstmal Eltern und Kinder aufnehmen kann. Die haben wir gegeben.
Diese füllst du erstmal mit Daten und dann machen wir den allereinfachsten Fall:

Wir haben zwei Elternteile und meinetwegen vier Kinder. Schreibe auf den Canvas oben zentriert die Namen der Eltern (Erst Vater, dann Mutter) und in der nächsten "Zeile" (ich nenne es mal so) die Namen der Kinder. Reine Textausgabe. Kästchen, Verbindungslinien und Anfassen und Verschieben heben wir uns mal für später auf.

Wenn du das hast, melde dich wieder.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#25

AW: konzeptionelle Gedanken optische Darstellung Stammbaum

  Alt 14. Mai 2018, 13:44
Vielleicht noch als Hinweis:
Weder die verknüpfende Baumstruktur, noch die einzelnen Personen-Klassen sollten irgendwelche Methoden haben die was grafisches machen, wie Draw zum Beispiel.

Stattdessen baue dir eine weitere Klasse, z.B. namens TGraphBuilder, der du einen Canvas/Bitmap gibst und dazu die Personenliste, die du darstellen möchtest.
Schon wird vieles klarer und einfacher.
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#26

AW: konzeptionelle Gedanken optische Darstellung Stammbaum

  Alt 14. Mai 2018, 14:28
Wenn du das hast, melde dich wieder.
OK, here we go.

Delphi-Quellcode:
unit Test;

interface

uses
  System.Generics.Collections;

type
  TPerson = class
  public
    Name: String;
    X, Y: Integer;
    constructor Create(name: String);
    procedure SetKoordinaten(x, y: Integer);
  end;

  TFamilie = class
  public
    Vater: TPerson;
    Mutter: TPerson;
    Kinder: TList<TPerson>;
    constructor Create(vater: TPerson, mutter: TPerson);
  end;
  
  TGraphBuilder = class
  public
    Familie: TFamilie;
    Picture: TCanvas;
    constructor Create(familie: TFamilie)
    procedure Draw;
  end;
  
  Const
    Abstand: Integer = 50;
    Breite: Integer = 100;
    Hoehe: Integer = 40;

implementation

// TPerson
constructor TPerson.Create(name: String);
begin
  inherited;
  Name = name;
end;

procedure SetKoordinaten(x, y: Integer);
begin
  X = x;
  Y = y;
end;

// TFamilie
constructor TFamilie.Create(vater: TPerson, mutter: TPerson);
begin
  inherited;
  Vater = vater;
  Mutter = mutter;
  Kinder = TList.Create;
end;

// TGraphBuilder
constructor TGraphBuilder.Create(familie: TFamilie);
begin
  inherited;
  Familie = familie;
end;

procedure TGraphBuilder.Draw;
var
  i: Integer;
begin
  Familie.Vater.SetKoordinaten(0, 0);
  Familie.Mutter.SetKoordinaten(Vater.X + Breite + Abstand, 0);
  
  // Vater/Mutter zeichnen
  Picture.Rectangle(Vater.X, Vater.Y, Vater.X + Breite, Vater.Y + Hoehe);
  Picture.Rectangle(Mutter.X, Vater.Y, Mutter.X + Breite, Mutter.Y + Hoehe);
  
  // Kinder
  for i:= Low(Familie.Kinder) To High(Familie.Kinder)
  do begin
    if i = 0 then
      Kinder(i).SetKoordinaten(i * Breite, Vater.Y + Hoehe + Abstand);
    else
      Kinder(i).SetKoordinaten(i * Breite + Abstand, Vater.Y + Hoehe + Abstand);
    end;
    Picture.Rectangle(Kinder(i).X, Kinder(i).Y, Kinder(i).X + Breite, Kinder(i).Y + Hoehe);
    Picture.Textout(Kinder(i).X, Kinder(i).Y, Kinder(i).Name);
  end;
end;

end.
Und die Test-Daten:
Delphi-Quellcode:
procedure GeneriereTestDaten;
var
  familie: TFamilie;
  vater, mutter, proband, kind2, kind3, kind4: TPerson
  graph: TGraphBuilder;
begin
  // Eltern
  vater = TPerson.Create('Vater Mustermann');
  mutter = TPerson.Create('Mutter Musterfrau');
  // Proband
  proband = TPerson.Create('Max Mustermann');
  // Geschwister
  kind2 = TPerson.Create('Heidi Mustermann')
  kind3 = TPerson.Create('Friedrich Mustermann')
  kind4 = TPerson.Create('Jonas Mustermann')
  
  // Familie
  familie = TFamilie.Create(vater, mutter)
  familie.Kinder.Add(proband)
  familie.Kinder.Add(kind2)
  familie.Kinder.Add(kind3)
  familie.Kinder.Add(kind4)
  
  // Familie zeichnen
  graph = TGraphBuilder.Create(familie);
  graph.Picture = Canvas1;
  graph.Draw;
end;

Geändert von hansklok (14. Mai 2018 um 15:31 Uhr)
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.447 Beiträge
 
Delphi 11 Alexandria
 
#27

AW: konzeptionelle Gedanken optische Darstellung Stammbaum

  Alt 14. Mai 2018, 14:57
Der Code compiliert sicher nicht.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#28

AW: konzeptionelle Gedanken optische Darstellung Stammbaum

  Alt 14. Mai 2018, 15:07
Der Code compiliert sicher nicht.
Ja, und wirklich wertvoll wird der Beitrag erst, wenn Du auch schreibst, warum der Code Deiner Ansicht nach nicht kompiliert werden kann. Möglicherweise möchtest Du auf die doppelten Anführungszeichen bei den Strings hinaus.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.447 Beiträge
 
Delphi 11 Alexandria
 
#29

AW: konzeptionelle Gedanken optische Darstellung Stammbaum

  Alt 14. Mai 2018, 15:12
Hm, ich sehe jetzt nicht warum mein Beitrag wertvoller werden würde wenn ich angebe warum er nicht compiliert. Der Poster kann es ja selber versuchen und stellt es so schneller fest.
Wie dem auch sei - ich sah nur das "TCanvas", das nirgendwo definiert wurde.
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#30

AW: konzeptionelle Gedanken optische Darstellung Stammbaum

  Alt 14. Mai 2018, 15:33
Der Code compiliert sicher nicht.
Es handelt sich um Pseudo-Code, um einen Strukturentwurf. Im Beitrag steht, dass ich lange nicht mit Delphi entwickelt habe! Bitte bleiben Sie fair! Ich habe mich hier an das Forum gewandt, da ich Unterstützung erhoffe.

Canvas1 ist ein Canvas auf einer TForm.

Vielen Dank.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 19:56 Uhr.
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