Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TList generische Liste Fehler beim deklarieren RTTI (https://www.delphipraxis.net/162188-tlist-generische-liste-fehler-beim-deklarieren-rtti.html)

jaenicke 12. Aug 2011 10:08

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Zitat:

Zitat von shmia (Beitrag 1116374)
Bei einer Klasse gäbe es dagegen die Methoden LoadFromStream() und SaveToStream().

Bei einem Record genauso, wenn man das möchte.

Uwe Raabe 12. Aug 2011 11:11

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Zitat:

Zitat von shmia (Beitrag 1116374)
Ich muss nur immer wieder feststellen dass selbst altgediente Hasen manchmal nicht beweglich genug sind vom Record auf eine Klasse zu wechseln.

Und ich muss immer wieder feststellen, daß manche Hasen nicht beweglich genug sind, die Techniken neuerer Delphi-Versionen einzusetzen. Dazu gehören, neben einer Fülle anderer Dinge, auch Methoden in Records.

H3llsing 12. Aug 2011 13:45

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Zitat:

Zitat von H3llsing (Beitrag 1116363)
OOP ist mir schon geläufig aber genau wie Uwe es schon gesagt hat, geht es in meinem Fall nur mit dem Record besser =)

Ich glaub das ist jetzt nicht mehr so ganz zutreffend!

Mitlerweile sind etliche Funktionen und Proceduren hinzugekommen und ich denke die Verwaltung durch eine Klasse wäre mitlerweile der bessere weg.

Da ich in Delphi bisher nur wenig mit Klassen gearbeitet habe würde ich gerne wissen
wie man das ganze mit soeinem Array Record realisiert.

Delphi-Quellcode:
//Methoden
function getZuordnungen():Tar_zuordnung; //holt alle Zuordnungen aus DB und liefert Array of TZuordnung zurück
procedure fillCombobox(ar_zuordnung:Tar_zuordnung); //füllt die ComboBox mit den Zuordnungsnamen

procedure verbindeFeld(); //verbindet die beiden Treeview Datenfelder miteinander und Speichert Zuordnungswerte in DB
procedure entferneFeld(TV:ttreeview); //entfernt die Verbindungen
procedure ladeVerbindungen(ar_zuordnung :Tar_Zuordnung;id:integer);//fügt Unterknoten mit den vorhanden Zuordnungswerten in die Treeviews ein

Wie realisiert man das ?

Mein Ansatz:
Delphi-Quellcode:
unit uZuordnungsklasse;

interface

uses Classes;
type
  TZuordnungRec = record
    zuorndungsname     :string;
    trennzeichen       :string;
    zuordnungsdatei    :string;
    distributor        :string;
    ...
  end;

type Tar_ZuordnungRec = array of TZuordnungRec;
type
  TZuordnung = class
    Constructor create;
    Destructor destroy;
    private
      ZO = TzuordnungRec;
    public
     //zugriffsmethoden
end;



implementation

end.

DeddyH 12. Aug 2011 13:48

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Lass den Record weg und mache aus seinen Feldern Properties Deiner Klasse. Verwalten kannst Du sie dann über eine TObjectList. Wenn diese die Objekte beim Entfernen automatisch freigeben soll, lässt Du deren OwnsObjects-Eigenschaft auf true, ansonsten eben umstellen.

H3llsing 12. Aug 2011 14:26

AW: TList generische Liste Fehler beim deklarieren RTTI
 
okay ich versuch mich mal dran =)
hab bisher noch nicht mit Tobjektlist gearbeitet aber DelphiTreff hat ja immer n Tutorial parat.

also müsst ich so mein Gerüst umbaun ?
Delphi-Quellcode:
type
  TZuordnung = class
    Constructor create; override;
    Destructor destroy; override;
    private
      Fzuorndungsname     :string;
      Ftrennzeichen       :string;
      Fzuordnungsdatei    :string;
      Fdistributor        :string;
      ...
    public
     
     // methoden

     //propertys
      property zuorndungsname     :string read Fzuorndungsname write Fzuorndungsname;
      property trennzeichen       :string read Ftrennzeichen write Ftrennzeichen;
      property zuordnungsdatei    :string read Fzuordnungsdatei write Fzuordnungsdatei;
      property distributor        :string read Fdistributor write Fdistributor;
      ...

end;
und wo werden dann meine instancen der Objektlist hinzugefügt?
Muss die Objektlist Global defininiert werden, damit ich von mehreren Buttons drauf zugreifen kann ? ?

oder wird einfach eine Methode GetZuordnungen :Tobjektlist, die mir alle Zuordnungen in klassen in die Objektlist packen und zurückgibt ausreichen ?!

DeddyH 12. Aug 2011 14:34

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Schon ganz gut. Wenn die Buttons alle auf demselben Formular liegen, würde ich die Liste als privates Feld des Formulars deklarieren.
Delphi-Quellcode:
uses Contnrs; //oder Generics.Collections für eine generische TObjectList

type
  TZuordnung = class  
  private
    FZuordnungsname: string;
    //usw.
  public
    constructor Create;
    destructor Destroy; override;
    property Zuordnungsname: string read FZuordnungsname write FZuordnungsname;
  end;

  TDeinForm = class(TForm)
  private
    FListe: TObjectList;
...

procedure TDeinForm.btnNeueZuordnungClick(Sender: TObject);
var
  Zuordnung: TZuordnung;
begin
  Zuordnung := TZuordnung.Create;
  Zuordnung.Zuordnungsname := 'Ding Dong, die Hex ist tot';
  FListe.Add(Zuordnung);
end;
So geht das prinzipiell. FListe muss natürlich noch erzeugt und später freigegeben werden (z.B. im OnCreate/OnDestroy).

Stevie 12. Aug 2011 14:44

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Zitat:

Zitat von H3llsing (Beitrag 1116452)
hab bisher noch nicht mit Tobjektlist gearbeitet aber DelphiTreff hat ja immer n Tutorial parat.

Oh, bitte nicht! Da du Delphi 2010 hast, benutz die TObjectList<T> aus der Generics.Collections.pas

H3llsing 12. Aug 2011 15:20

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Wieso kracht es hier ?

Delphi-Quellcode:
uses Generics.Collections,uZuordnungsklassen ...;

type
  TfrmZuordnung = class(TForm)
  ...
  private
    FListe: TObjectList<Tzuordnung>;
     ...
  end;


procedure TfrmZuordnung.FormCreate(Sender: TObject);
begin
  Fliste.create(); //hier kommt AV ?!
end;

DeddyH 12. Aug 2011 15:23

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Dass Dir das noch passiert.
Delphi-Quellcode:
var Dings: TDings;
Dings := TDings.Create;

H3llsing 12. Aug 2011 15:27

AW: TList generische Liste Fehler beim deklarieren RTTI
 
*HUST* ja wollts grad wieder wegmachen :D
Der tag ist schonwieder viel zu lang ;)

wird mal Zeit für 5 minuten pause!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 Uhr.
Seite 2 von 4     12 34      

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