![]() |
Re: Wie arbeite ich mit "Klassen"-Listen
Hallo Pfoto,
Wie erstelle ich dann eine Objektliste und kein Object? Danke E. B. |
Re: Wie arbeite ich mit "Klassen"-Listen
Hi,
hoffe das hilft dir.
Delphi-Quellcode:
Mit dem Konstrukt kannst du dann zb sowas machentype 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;
Delphi-Quellcode:
Grüße
procedure irgendwas;
var aList: TMyObjectList; begin aList := TMyOBjectList.Create; aList.Add(TMyObject.Create); aList.items[0].Name := 'Hello World'; end; |
Re: Wie arbeite ich mit "Klassen"-Listen
Hi,
Ich hab das bei meinem Spiel sogemacht
Delphi-Quellcode:
So ich hoffe ich habe es richtig verstahnden, was du willst und wenn, dann hoffe ich das es dir hilft.
//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 |
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:
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. |
Re: Wie arbeite ich mit "Klassen"-Listen
ich habe mal kurz mein minitool angeschmissen.
Delphi-Quellcode:
That's the way i alway do. eine typisierte TObjectList. Finde ist das einfachste was man machen kann.
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. 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 |
Re: Wie arbeite ich mit "Klassen"-Listen
Zitat:
|
Re: Wie arbeite ich mit "Klassen"-Listen
Zitat:
Zitat:
Delphi-Quellcode:
freigeben.
FreeAndNil( FMeineListe );
gruß reli edit: Luckie das is doch oversized :-p *duck* |
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. ;)
|
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.
|
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. |
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