Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie arbeite ich mit "Klassen"-Listen (https://www.delphipraxis.net/112620-wie-arbeite-ich-mit-klassen-listen.html)

EccoBravo 25. Apr 2008 11:46

Re: Wie arbeite ich mit "Klassen"-Listen
 
Hallo Pfoto,

Wie erstelle ich dann eine Objektliste und kein Object?

Danke

E. B.

angos 25. Apr 2008 12:02

Re: Wie arbeite ich mit "Klassen"-Listen
 
Hi,

hoffe das hilft dir.


Delphi-Quellcode:

type
  TMyObject = class(TObject)
  private
    FNAme: String;
  public
    property Name: String read FName write FName;
  end;

type
  TMyObjectList = class(TObjectList)
  private
    function GetItem(ndx: Integer): TMyObject;
    procedure SetItem(ndx: Integer; AValue: TMyObject);
  public
    property items[ndx: Integer]:TMyObject read GetItem write SetItem;
   
  end;
 
 
implementation

function TMyObjectList.GetItem(ndx: Integer): TMyObject;
begin
  Result := TMyObject(inherited items[ndx]);
end;

procedure TMyObjectList.SetItem(ndx: Integer; AValue: TMyObject);
begin
  items[ndx] := AValue;
end;
Mit dem Konstrukt kannst du dann zb sowas machen
Delphi-Quellcode:
procedure irgendwas;
var
 aList: TMyObjectList;
begin
  aList := TMyOBjectList.Create;
  aList.Add(TMyObject.Create);

  aList.items[0].Name := 'Hello World';
end;
Grüße

NickelM 25. Apr 2008 12:13

Re: Wie arbeite ich mit "Klassen"-Listen
 
Hi,

Ich hab das bei meinem Spiel sogemacht

Delphi-Quellcode:
//als erstes von TCollectionItem ableiten
//beispiel von mir
TLager = class(TCollectionItem)
//eigene Eigenschaften
end;

//dann hab ich eine Klasse wo die Variable gespeichert ist
TSchiff = class(TGlFreeForm) //einge klasse von meiner Engien hatt nicht damit zutun
private
FLagerliste : TCollection //kann auch eine Variable sein
published
property Lagerliste : TCollection read FLagerliste write FLagerliste;
end;

//im Creater dann
FLagerliste := TCollection.Create(TLager) //die abgeleitete TCollectionItem Klasse
//dann for-Schleife
for I := 0 to 4 do
with FLagerliste.Add as TLager do //kannst du direkt auf die neue Klasse zugreifen
//sachen, die du verändern willst
So ich hoffe ich habe es richtig verstahnden, was du willst und wenn, dann hoffe ich das es dir hilft.

EccoBravo 25. Apr 2008 14:39

Re: Wie arbeite ich mit "Klassen"-Listen
 
Hallo angos und Danke an alle,

angos,
soweit so gut, compilieren soweit ohne Mecker,
angos, Deine Lösung gefällt mir am besten.

beim Ausführen des Programms kommt dann aber eine Meldung;

Zitat:

Im Project EB_Pat_Foto_Project1.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei der Adresse 00419F9E in Modul EB_Pat_FotoProject1.exe'. 'Lesen von Adresse 00000008' aufgetreten.
Erste Frage:
Ich weiss nicht, was da los ist (Antwort auf diese Frage kann ich wohl nicht erwarten)

Zweite Frage:
Wie kann ich bei Form1.close die Objectliste wieder frei geben?

Also nochmals vielen Dank.
Ihr tragt nicht nur mit Töpfen Licht ins Dunkle.

Grüße

E. B.

Relicted 25. Apr 2008 14:49

Re: Wie arbeite ich mit "Klassen"-Listen
 
ich habe mal kurz mein minitool angeschmissen.

Delphi-Quellcode:
unit SatzList;                                                                
                                                                                       
interface                                                                              
                                                                                       
uses                                                                                  
  Contnrs,                                                                            
  Satz;                                                                      
                                                                                       
type                                                                                  
  TSatzList = class( TObjectList )                                            
  protected                                                                            
    //* Protected functions..                                                          
    function GetItem(Index: Integer): TSatz; reintroduce;                    
    procedure SetItem(Index: Integer; const Value: TSatz); reintroduce;      
  public                                                                              
    //* Constructors.. don't forget to call "inherited"                              
    //constructor Create; overload;                                                    
    //constructor Create(AOwnsObjects: Boolean); overload;                            
                                                                                       
    //* List Functions & Propertys                                                    
    function Add(AObject: TSatz): Integer; reintroduce;                      
    function Extract(Item: TSatz): TSatz; reintroduce;              
    function Remove(AObject: TSatz): Integer; reintroduce;                    
    function IndexOf(AObject: TSatz): Integer; reintroduce;                  
    procedure Insert(Index: Integer; AObject: TSatz); reintroduce;            
    function First: TSatz; reintroduce;                                      
    function Last: TSatz; reintroduce;                                        
                                                                                       
    property Items[Index: Integer]: TSatz read GetItem write SetItem; default;
                                                                                       
    //* Insert your own functions here...                                              
  end;                                                                                
                                                                                       
implementation                                                                        
                                                                                       
{ TSatzList }                                                                 
                                                                                       
function TSatzList.Add(AObject: TSatz): Integer;                    
begin                                                                                  
  result := inherited Add( AObject );                                                  
end;                                                                                  
                                                                                       
function TSatzList.Extract(Item: TSatz): TSatz;            
begin                                                                                  
  result := inherited Extract( Item ) as TSatz;                              
end;                                                                                  
                                                                                       
function TSatzList.First: TSatz;                                    
begin                                                                                  
  result := inherited First as TSatz;                                        
end;                                                                                  
                                                                                       
function TSatzList.GetItem(Index: Integer): TSatz;                  
begin                                                                                  
  result := inherited GetItem( Index ) as TSatz;                              
end;                                                                                  
                                                                                       
function TSatzList.IndexOf(AObject: TSatz): Integer;                
begin                                                                                  
  result := inherited IndexOf( AObject );                                              
end;                                                                                  
                                                                                       
procedure TSatzList.Insert(Index: Integer; AObject: TSatz);          
begin                                                                                  
  inherited Insert(Index,AObject);                                                    
end;                                                                                  
                                                                                       
function TSatzList.Last: TSatz;                                      
begin                                                                                  
  result := inherited Last as TSatz;                                          
end;                                                                                  
                                                                                       
function TSatzList.Remove(AObject: TSatz): Integer;                  
begin                                                                                  
  result := inherited Remove(AObject);                                                
end;                                                                                  
                                                                                       
procedure TSatzList.SetItem(Index: Integer;                                  
  const Value: TSatz);                                                        
begin                                                                                  
  inherited SetItem(Index,Value);                                                      
end;                                                                                  
                                                                                       
end.
That's the way i alway do. eine typisierte TObjectList. Finde ist das einfachste was man machen kann.
habe mir das tool "mal eben" geschrieben weil ich keine lust auf das dauernde ersetzen etc hatte. basisklasse eingeben start drücken fertig werden :-) daher mal schnell die "lösung" bereitstell

gruß
reli

Luckie 25. Apr 2008 14:52

Re: Wie arbeite ich mit "Klassen"-Listen
 
Zitat:

Zitat von Luckie

Das scheint irgendwie jeder zu irgnorieren. :?

Relicted 25. Apr 2008 14:53

Re: Wie arbeite ich mit "Klassen"-Listen
 
Zitat:

Erste Frage:
Ich weiss nicht, was da los ist (Antwort auf diese Frage kann ich wohl nicht erwarten)
entweder ist die liste oder das objekt was du da rein gepackt hast nicht initialisiert worden. oder du greifst auf kA position 4 zu, hast aber nur 4 objekte in der liste (0..3) ohne meine glaskugel komm ich da gerade auch ned weiter.

Zitat:

Zweite Frage:
Wie kann ich bei Form1.close die Objectliste wieder frei geben?
die liste einfach über die variable mit
Delphi-Quellcode:
FreeAndNil( FMeineListe );
freigeben.

gruß
reli


edit: Luckie das is doch oversized :-p *duck*

Luckie 25. Apr 2008 15:01

Re: Wie arbeite ich mit "Klassen"-Listen
 
Das ist nicht oversized, das ist genau das, was ihr heir die ganze zeit zu erklären versucht. ;)

Relicted 25. Apr 2008 15:08

Re: Wie arbeite ich mit "Klassen"-Listen
 
ah sorry. ja ich hab dir gerade unrecht getan. ich hatte noch im hinterkopf dass hier jemand an einem "generics for win32" ähnlichem gerüst gearbeitet hat. oder es jedenfalls hier diskutiert wurde. und als ich dann kurz den thread überflogen habe sah ich den D.NET ansatz von elvis und ich dachte mir: "generics sind genau das richtige was ein anfänger braucht - bei uns in der firma hatten bei der schulung von bernd ua schon einige alteingesessene leute probleme mit den dingern" und äußerte mich deshalb mit oversized. aber du hast recht. das ist genau was er braucht und wie immer auf die gute luckie art erklärt.

EccoBravo 25. Apr 2008 16:45

Re: Wie arbeite ich mit "Klassen"-Listen
 
Prima allerseits,

es funktioniert,
Danke für alle für die Hilfe.

Der Vorschlag von angos war mir am sympatischten,
Den Fehler habe ich übringens auch gefunden, die Initialisierung der SatzList:TSatzList in der Form.Create war am Emde der Methode und mußte an den Anfang der Methode, weil in dieser schon gebraucht.

Nun habe ich die Vorzüge des RAD2007 Together voll genossen.
Nachdem ich das alles fertig hatte habe ich mit einem Federstreich zuerst die Klasse TSatz in eine neue Unit ausgelagert und dann auch die ganze Klasse TSatzList.
Nun ist das eigentliche Programm ein kleiner Vers geworden und läßt sich prima pflegen.

Nun bin ich zufrieden und gehe nach haus.

Euch allen ein schönes Wochenende

E. B.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 Uhr.
Seite 2 von 3     12 3      

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