Einzelnen Beitrag anzeigen

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