Delphi-PRAXiS
Seite 1 von 3  1 23      

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 24. Apr 2008 15:14


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:
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.
Im Code habe ich das Problem schon markiert.
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.

mkinzler 24. Apr 2008 15:16

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

Dunkel 24. Apr 2008 15:29

Re: Wie arbeite ich mit "Klassen"-Listen
 
Delphi-Referenz durchsuchenTObjectList

bluesbear 24. Apr 2008 15:34

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 :(

Brainshock 24. Apr 2008 16:05

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.

Ralf Kaiser 24. Apr 2008 16:11

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

Zitat von Brainshock
Da es sich nur um eine Klasse (nämlich TSatz) handelt, kann man sogar auf eine TCollection gehen.

Eben nicht. Dann müsste TSatz von TCollectionItem abgeleitet sein. :wink:

EccoBravo 24. Apr 2008 17:41

Re: Wie arbeite ich mit "Klassen"-Listen
 
Wie mache ich das in meinem Falle?

Für TObjectList brauche ich

Delphi-Quellcode:
Uses Contnrs ...
Wenn ich in meinem Code:

Delphi-Quellcode:
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.
Jetzt könnt Ihr Euch sicherlich vorstellen, wie wenig Ahnung ich von TObjectList habe.

Ich will im Programm über einen IndexInteger auf einzelne Datensätze der Liste zugreifen.

Delphi-Quellcode:
Satz[i] := ...;

... := Satz[j];
Ja, Unwissenheit schützt vor Dummheit nicht,

Vielleicht Könnt Ihr mir da weiterhin helfen

Danke, Grüße ...

E. B.

Pfoto 24. Apr 2008 17:51

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

um auf die einzelnen Objekte zugreifen zu können,
machst du einfach das hier:

Delphi-Quellcode:
 
  TSatz(Satzliste.Items[1]).Eigenschaft:= 'bla';
TObjectlist gibt standardmäßig auch den Speicher
der Objekte wieder frei.

Edit:
Zitat:

Zitat von EccoBravo
SatzListe := TObject.Create; // hier bin ich
for i := 0 to maxSatzZahl do // ebenfalls unsicher
SatzListe.Add(TAstz.Create); // ...

Du erstellt in deinem Beispiel ein Objekt und
nicht die Objektliste, aber ansonsten ist
die Vorgehensweise richtig.

Gruß
Pfoto

Die Muhkuh 24. Apr 2008 17:54

Re: Wie arbeite ich mit "Klassen"-Listen
 
Dann typisieren wir die Liste noch und können uns das casten sparen ;)

Luckie 25. Apr 2008 08:06

Re: Wie arbeite ich mit "Klassen"-Listen
 
Siehe hier: Container-Klassen in Delphi


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

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