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
 
hansklok

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

AW: konzeptionelle Gedanken optische Darstellung Stammbaum

  Alt 14. Mai 2018, 13: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 14:31 Uhr)
  Mit Zitat antworten Zitat
 


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 10:32 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