AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TObjectlist in TObjectList

Ein Thema von mimi · begonnen am 25. Jun 2006 · letzter Beitrag vom 2. Jul 2006
 
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: TObjectlist in TObjectList

  Alt 2. Jul 2006, 08:32
HI,
ich hab ehrlich gesagt keine richtige Idee was deine Frage an einigen Stellen betrifft:

Zitat von mimi:
Delphi-Quellcode:
  TStyle = record
    obj1:TObjectList;
    .....
  end;
und nun habe ich eine weiter tList um das object zu verwalten. das heißt so eine art Object Baum.
Eine weitere TList? Wo ist denn die erste TList?
Um das Objekt zu verwalten? Wo ist denn das Objekt? Ein Record ist kein Objekt!

Zitat von mimi:
jetzt hat jedes object ein objl Tobjectliste wo alle objecte reinkommen
Sorry, der Teil ist mir völlig unklar. Was ist denn ein objl Tobjectliste?

An sich würde ich dir hier zu etwas ObjektOrientierung (OO) raten. Für eine solche "Hierachie" und soetwas wie den Bau eines Containers eignet die sich sehr gut. Du kannst einfach eine Basisklasse für alle Grafikobjekte und eine für alle "Container" schaffen. Die Klasse der Container sollte dabei von der Klasse der Grafikobjekte erben. Die hat dann einfach nur die Eigenschaft, zusätztlich Elemente zu Speichern.

Delphi-Quellcode:
type
  TGrafikBasisKlasse = class(TObject)
    private
      FXPosition : Integer;
      FYPosition : Integer;
      ...
    protected
      draw; virtual; abstract;
      setXPosition(const x : Integer);
      setYPosition(const y : Integer);
      ...
    public
      property XPosition : Integer read FXPosition write setXPosition;
      property YPosition : Integer read FYPosition write setYPosition;
      ...
  end;

  TGrafikContainerBasisKlasse = class(TGrafikBasisKlasse)
    private
      FContainedObjects : TObjectList;
    protected
      setXPosition(const x : Integer); override;
      setYPosition(const Y : Integer); override;
      addGraphicObject(const GraphicObject : TGrafikBasisKlasse);
      removeGraphicObject(const GraphicObject : TGrafikBasisKlasse);
    public
  end;
So ganz grob (entschuldige, merke gerade dass meine Variablenbenennung ganz furchtbar ist, durchmischt deutsch/englisch).
Natürlich soll das jeztt keine vollständige Klasse sein, müsstest du entsprechend erweitern. Wichtig ist es die grobe Struktur zu verstehen. Alle Objekte die du verwendest sollten von TGrafikBasisKlasse erben. Sind sie zu dem auch noch ein Container, erben sie entsprechend von TGrafikContainerBasisKlasse (und damit implizit auch von TGrafikBasisKlasse). Also kannst du immer den in ein TGrafikBasisKlasse Objekt casten und die hier vorgegebenen Funktionen nutzen.
Wenn nun setXPosition aufgerufen wird, musst du die x Position deiner Komponente ändern und neu zeichnen. Hierzu kann jede deiner Komponenten (die du ableitest) einfach die draw Methode überschreiben, wo es sich hinzeichnet geht ja aus den gespeicherten Koordinaten hervor.
Hast du einen Container (etwas dass von TGrafikContainerBasisKlasse erbt), so brauchst du hier nicht mehr zu tun, als die Methode, die diesen Container bewegt zu überschreiben. Deine überschriebene Methode ruft dann einfach ihren Vorgänger auf (schließlich muss auch dein Container an der richtigen Stelle gezeichnet werden) und muss danach nur noch alle ELemente bewegen, die in der eigenen Liste drin stehen.

Delphi-Quellcode:
TGrafikContainerBasisKlasse.setXPosition(const x : Integer);
var diffX : Integer;
    i : Integer;
begin
  diffX := x - self.XPosition;
  
  inherited setXPosition(x);
  
  if self.FContainedObjects.Count > 0 then
  begin
    for i := 0 to self.FCountaindedObjects.Count - 1 do
    begin
      // eine Methode move wäre hier sinnvoller als das
      TGrafikBasisKlasse(self.FContainedObjects[i]).setXPosition(TGrafikBasisKlasse(self.FContainedObjects[i].XPosition) + diffX);
    end; // for i := 0 to self.FCountaindedObjects.Count - 1
  end; // if self.FContainedObjects.Count > 0
end;
Wie gesagt, es sind nur Anregungen, bei der konkreten Umsetzung musst du schauen. Wenn du es so oder ähnlich machst, denke ich solltest du kein Problem bekommen. Werde mir trotzdem gleich noch deinen Code anschauen, vielleicht sehe ich ja dort den Fehler.

Gruß Der Unwissende
  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 03:55 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