![]() |
Wie arbeite ich mit "Klassen"-Listen
Hallo,
Euer erster Schritt, mir in oop zu helfen war prima. Nun gleich zu einer exotischen Anwendung von Objekten, und zwas in einer Liste. Der folgende Code soll die Frage Euch verdeutlichen:
Delphi-Quellcode:
Im Code habe ich das Problem schon markiert.
unit EB_Pat_Foto_Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, IniFiles, Dialogs, StdCtrls, ExtCtrls, FileCtrl, ShellAPI, SDL_ColSel, SDL_Thumbnails, ComCtrls, ShellCtrls; type ... TSatz = class(TObject) Bild: TImage; BildName: string; BildNurName: string; BildNurPath: string; BildNurExt: string; FileName: string; FileNurName: string; FileNurPath: string; FileNurExt: string; Datum: string; Notiz: string; Checked: boolean; private Fgeb: string; FPatName: string; FID: string; FInhalt: string; function GetID: string; function GetPatName: string; function GetGeb: string; function GetInhalt: string; procedure Setgeb(const Value: string); procedure SetID(const Value: string); procedure SetPatName(const Value: string); procedure SetInhalt(const Value: string); public property PatName: string read GetPatName write SetPatName; property geb: string read Getgeb write Setgeb; property ID: string read GetID write SetID; property Inhalt: string read GetInhalt write SetInhalt; end; var ... Satz: array of TSatz; // dieses wird im Folgenden // Probleme machen ... implementation uses ... ; {$R *.dfm} //.............................................................................. procedure TForm1.FormCreate(Sender: TObject); var i: integer; Fehler: Word; DatumStr: string; begin ... Satz := TSatz.create; // und das mag der Compiler nicht // wegen "array of TSatz" // Instanzendeklaration setlength(Satz, 50); ... end; ... end. Von der Klasse TSatz will ich ein dynamisches Array instanzieren und beim Instanz.Create gibt es Compiler-Mecker. Wie kann ich dieses Problem wohl am besten lösen? Gibt es da nicht irgend eine andere Lösung mit Listen oder so ? Danke für Hilfe E. B. |
Re: Wie arbeite ich mit "Klassen"-Listen
Delphi-Quellcode:
inc(anz);
SetLength( satz, anz); Satz[anz-1] := TSatz.create; // und das mag der Compiler nicht // wegen "array of TSatz" // Instanzendeklaration |
Re: Wie arbeite ich mit "Klassen"-Listen
|
Re: Wie arbeite ich mit "Klassen"-Listen
Hallo EccoBravo,
mit Listen und so geht das natürlich auch. Guck mal in der Hilfe nach TObjectList. Mein Vorschlag: In Form1 deklarierst du FSatzListe : TObjectList; In TForm1.FormCreate erzeugst du dann die Objektinstanz dazu. Sätze in die Liste einfügen: FSatzListe.Add(TSatz.Create); P.S.: ich war schon wieder zu langsam :( |
Re: Wie arbeite ich mit "Klassen"-Listen
Da es sich nur um eine Klasse (nämlich TSatz) handelt, kann man sogar auf eine TCollection gehen.
|
Re: Wie arbeite ich mit "Klassen"-Listen
Zitat:
|
Re: Wie arbeite ich mit "Klassen"-Listen
Wie mache ich das in meinem Falle?
Für TObjectList brauche ich
Delphi-Quellcode:
Wenn ich in meinem Code:
Uses Contnrs ...
Delphi-Quellcode:
Jetzt könnt Ihr Euch sicherlich vorstellen, wie wenig Ahnung ich von TObjectList habe.
unit EB_Pat_Foto_Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, IniFiles, Dialogs, StdCtrls, ExtCtrls, FileCtrl, ShellAPI, SDL_ColSel, SDL_Thumbnails, ComCtrls, ShellCtrls, Contnrs; type ... TSatz = class(TObject) Bild: TImage; BildName: string; BildNurName: string; BildNurPath: string; BildNurExt: string; FileName: string; FileNurName: string; FileNurPath: string; FileNurExt: string; Datum: string; Notiz: string; Checked: boolean; private Fgeb: string; FPatName: string; FID: string; FInhalt: string; function GetID: string; function GetPatName: string; function GetGeb: string; function GetInhalt: string; procedure Setgeb(const Value: string); procedure SetID(const Value: string); procedure SetPatName(const Value: string); procedure SetInhalt(const Value: string); public property PatName: string read GetPatName write SetPatName; property geb: string read Getgeb write Setgeb; property ID: string read GetID write SetID; property Inhalt: string read GetInhalt write SetInhalt; end; var ... Satz: TSatz; // hier beginnen meine SatzListe: TObjectList; // Unsicherheiten ... implementation uses ... ; {$R *.dfm} //.............................................................................. procedure TForm1.FormCreate(Sender: TObject); var i: integer; Fehler: Word; DatumStr: string; begin ... SatzListe := TObject.Create; // hier bin ich for i := 0 to maxSatzZahl do // ebenfalls unsicher SatzListe.Add(TAstz.Create); // ... ... end; ... ... procedure TForm1.E_geborenExit(Sender:TObject); begin Satz[1].geb := E_geboren.Text; // hier meckert der Compiler E2149 !!!! end; // schon beim compilieren ... ... end. Ich will im Programm über einen IndexInteger auf einzelne Datensätze der Liste zugreifen.
Delphi-Quellcode:
Ja, Unwissenheit schützt vor Dummheit nicht,
Satz[i] := ...;
... := Satz[j]; Vielleicht Könnt Ihr mir da weiterhin helfen Danke, Grüße ... E. B. |
Re: Wie arbeite ich mit "Klassen"-Listen
Hallo,
um auf die einzelnen Objekte zugreifen zu können, machst du einfach das hier:
Delphi-Quellcode:
TObjectlist gibt standardmäßig auch den SpeicherTSatz(Satzliste.Items[1]).Eigenschaft:= 'bla'; der Objekte wieder frei. Edit: Zitat:
nicht die Objektliste, aber ansonsten ist die Vorgehensweise richtig. Gruß Pfoto |
Re: Wie arbeite ich mit "Klassen"-Listen
Dann typisieren wir die Liste noch und können uns das casten sparen ;)
|
Re: Wie arbeite ich mit "Klassen"-Listen
Siehe hier:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 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