AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Frage zu OOP - zwei Listen

Ein Thema von benwen · begonnen am 17. Sep 2006 · letzter Beitrag vom 21. Sep 2006
 
benwen

Registriert seit: 11. Sep 2006
17 Beiträge
 
Delphi 7 Enterprise
 
#1

Frage zu OOP - zwei Listen

  Alt 17. Sep 2006, 20:43
Hallo alle zusammen!

In meinem Programm verwende ich zwei Listen:
- die erste Liste enhält die Grunddaten -> TElementList;
- die zweite Liste enthält die daraus gebildeten Graphikkomponenten (z.N. TNode, TBorder) -> TGraphicObjectList;

Während des Programmablaufs wird aus den Grunddaten ein Knoten-Kanten-Modell gebildet und gezeichnet. Zur Erklärung kurz die Struktur der verwendeten Klassen:

Delphi-Quellcode:

  TElement = class
    Color:TColor;
    Show: boolean;
    top: integer;
    layerID : integer;
    pos, absPos, length: real;
    elemID, elemType: string;
  public
     (...)
  end;

  TElementList = class(TList)
  private
    function GetElement(index: integer): TElement;
    (...)
  public
    (...)
    property Items[index: integer]: TElement Read GetElement;
  end;

TGraphicObject = class(TElement)
  S: TElement;
  Width: integer;
  Height: integer;
  Left: integer;
  TempFillColor: TCOlor;
  BorderPolygon: TBorderPolygon;
  BorderCircle: TRect;
  Marked: boolean;
  FillColor: TColor;
  Angle: extended;
  GraphicType: TGraphicType;
  BorderRect: TRect;
  //(und weitere Grafieigenschaften)
  procedure Paint(RefCanvas: TCanvas; ClipRect: TRect; BackgroundColor: TColor);
public
  procedure GetData(Source: TElement); virtual;
end;

TNode = class(TGraphicObject)
  nodeType: TNodeType;
  nodeID: string;
  (...)
public
  procedure GetData(Source: TElement); override;
  constructor Create(NType: TNodeType);
  procedure Paint(RefCanvas: TCanvas; ClipRect: TRect; BackgroundColor: TColor);
end;

TBorder = class(TGraphicObject)
  startNode, endNode: TNode;
  length: real;
  borderType: TBorderType;
public
  constructor Create(StartNode, EndNode: TNode; BorderType: TBorderType);
  procedure Paint(RefCanvas: TCanvas; ClipRect: TRect; BackgroundColor: TColor);
  procedure GetData(Source: TElement); override;
end;

(...u.a. Graphikobjecte...)

TGraphicObjectList = class(TList)
  FSource: TElementList;
public
  property Items[index: integer]: TGraphicObject Read GetGraphicObject;
  procedure Getdata(Source: TElementList);
  procedure SetData;
  procedure Paint(RefCanvas: TCanvas; BackgroundColor: TColor; ClipRect: TRect);
end;

implementation

procedure TGraphicObject.GetData(Source: TElement);
begin
  self.S := Source;
  //genau um diese Grundeigenschaften geht es. kann ich diese nicht als Verweis/Zeiger auf das Element in der ElementList verwenden??)
  pos := Source.Pos;
  absPos := Source.AbsPos;
  elemID := Source.elemID;
  elemType := Source.elemType;
  trackID := Source.trackID;
  long := Source.long;
  lat := Source.lat;
  alt := Source.alt;
  length := Source.length;
  dir := Source.dir;
  Show := Source.Show;
  layerID := Source.layerID;
  top := Source.top;

end;

constructor TNode.Create(NType: TNodeType);
begin
  GraphicType := gtCircle;
  NodeType := NType;
 // FillColor := NColor;
  //TempFillColor := NColor;
  Width := 15;
  Height := Width;
  Marked := False;
end;

procedure TNode.GetData(Source: TElement);
begin
  inherited;
  nodeID := 'blabla';
end;

(...das ähnliche nochmal mit TBorder usw...)

procedure TGraphicObjectList.Getdata(Source: TElementList);
var
  i: integer;
begin
  Clear;
  FSource := Source;
  for I := 0 to Source.Count - 1 do
    begin
      if Items[i].elemType = 'startthen
      begin
        Add(TNode.Create(ntStart));
        (Items[Count-1] as TNode).GetData(Source.Items[i]);
      end;
      (das gleiche mit TBorder u.a.)
    end;
end;
Ich hoffe das Grundprinzip ist mit diesem kleinen Ausschnittes deutlich geworden. Nun habe ich ein Problem damit, dass die Eigenschaften von TElement in beiden Listen "gespeichert" werden. Ich möchte aber bei der Erstellung der Grafikobjekte (TGraphicObject) nur auf die Daten der TElementList beziehen...wie kann ich das am besten realisieren?
Danke schonmal für Eure Antworten!!
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:16 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