AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Class und Record

Ein Thema von mfs · begonnen am 1. Jun 2006 · letzter Beitrag vom 1. Jun 2006
Antwort Antwort
mfs

Registriert seit: 9. Mai 2006
35 Beiträge
 
#1

Class und Record

  Alt 1. Jun 2006, 20:28
Hallo,
könnte mir jemand bitte einen Tipp geben?

Ich hab folgendes Problem: ich hab in meinem Programm folgende beide Klassen (s. unten), die funktionieren einwandfrei:

--------------- Meine Klassen ------------------
Delphi-Quellcode:
type
TAttributClass = class
  private
    { Private-Deklarationen }
    
  protected
    { Protected-Deklarationen }

  public
    { Public-Deklarationen }
    Name: String;
    Typ: String;
    Position:integer;
    Laenge:integer;
    Werte:string;
    Pflicht :Boolean;
    Wiederholen:string;
  end;

type
  TKategorieClass = class
  private
    { Private-Deklarationen }
    
  protected
    { Protected-Deklarationen }

  public
    { Public-Deklarationen }
    Name: String;
    AttributListe:TList;
  end;
----------------------------------------------------

Die möchte ich aber anstatt den Klassen zwei "records" machen, in so etwa:


Delphi-Quellcode:
type Attribute = record
           Name:String;
           Typ: String;
             .....
end;
type Kategorie = record
           Name: String;
           AttributListe:TList;
end;

var user:Array of Kategorie;

Aber dann kann ich nicht mehr die Liste "AttributListe" erzeugen und auf sie zugreifen, was mache ich da falsch? Wie kann ich ein neues Element (user) in die Liste hinzufügen?

Danke für jede Hilfe...

[edit=Dax][delphi]-Tags hinzugefügt. In Zukunft bitte selbst machen Mfg, Dax[/edit]
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Class und Record

  Alt 1. Jun 2006, 20:30
Zitat:
Aber dann kann ich nicht mehr die Liste "AttributListe" erzeugen und auf sie zugreifen
Wo instantiierst du die TList-Klasse? Kommt ein Fehler, welcher?
Markus Kinzler
  Mit Zitat antworten Zitat
1. Jun 2006, 20:38
Dieses Thema wurde von "Dax" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Object-Pascal / Delphi-Language" verschoben.
Ist kein Schnipsel für die Codelib
mfs

Registriert seit: 9. Mai 2006
35 Beiträge
 
#4

Re: Class und Record

  Alt 1. Jun 2006, 20:52
ich initialisiere sie in der Procedure in dem ich die eine Liste mit von allen usern erzeugen möchte also in der "Attributliste"

Was ich mach will sieht ungefähr so aus:

if Attributliste= nil then
Attributliste:= TList.Create
else Attributliste.Clear;
.
.
.

user[0].name:=....
user[0].typ:=....
.
.
user[n].name:=....
user[n].typ:=....

AttributListe.Add(user);

Bin ich auf dem richtigen Weg?

Wichtig ist, dass ich keinen Zeiger benutze ist das machbar?
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#5

Re: Class und Record

  Alt 1. Jun 2006, 20:57
Indem du von TList ableitest und alle Prozeduren/Funktionen, die mit deinem Record auskömmen müssen, darauf trimmst diesen Record anzunehmen. .Add(const{da ansonsten der Record kopiert wird} user: Attribute) müsste dann nur noch inherited Add(@user); aufrufen - für die anderen Methoden analog.

PS: Delphi-Tags!
  Mit Zitat antworten Zitat
mfs

Registriert seit: 9. Mai 2006
35 Beiträge
 
#6

Re: Class und Record

  Alt 1. Jun 2006, 21:06
Danke für die Hilfe.. Da ich aber noch relativ Anfänger bin, verstehe nicht alles was Du meinst.

Würdest Du bitte deswegen vielleicht an meinem Code etwas ändern oder mir einen Link bzw. ein Bsp. geben, was mir weiterhilfen könnte!!
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Re: Class und Record

  Alt 1. Jun 2006, 21:21
Wenn du von TList ableitest, damit deine Liste Records statt Pointern nimmt, tust du das:
Delphi-Quellcode:
  TRecordList = class(TList)
  private
    function getRec(Index: Integer): Attribute;
    procedure SetRec(Index: Integer; const Value: Attribute);
  public
    property Items[Index: Integer]: Attribute read getRec write SetRec; default;
    function Add(const Item: Attribute): Integer;
    function Extract(const Item: Attribute): Attribute;
    function First: Attribute;
    function IndexOf(const Item: Attribute): Integer;
    procedure Insert(Index: Integer; const Item: Attribute);
    function Last: Attribute;
    function Remove(const Item: Attribute): Integer;
  end;

{ TRecordList }

function TRecordList.Extract(const Item: Attribute): Attribute;
begin
  Result := Attribute(inherited Extract(@Item));
end;

function TRecordList.Add(const Item: Attribute): Integer;
begin
  Result := inherited Add(@Item);
end;

function TRecordList.First: Attribute;
begin
  Result := Attribute(inherited First^);
end;

function TRecordList.getRec(Index: Integer): Attribute;
begin
  Result := Attribute(inherited Get(Index)^);
end;

function TRecordList.IndexOf(const Item: Attribute): Integer;
begin
  Result := inherited IndexOf(@Item);
end;

function TRecordList.Last: Attribute;
begin
  Result := Attribute(inherited Last^);
end;

function TRecordList.Remove(const Item: Attribute): Integer;
begin
  Result := inherited Remove(@Item);
end;

procedure TRecordList.Insert(Index: Integer; const Item: Attribute);
begin
  inherited Insert(Index, @Item);
end;

procedure TRecordList.SetRec(Index: Integer; const Value: Attribute);
begin
  inherited Put(Index, @Value);
end;
Ich denke du siehst, das alle Methoden der Klasse nun einen anderen Typen als Parameter haben (nämlich Attribute anstatt von Pointer), was dich die Klasse für deine Records benutzen lässt. Du kannst es also völlig transparent benutzen

Das inherited bedeutet, das dort nicht nochmal die selbe Methode aufgerufen wird, sondern die der Basisklasse (also TList). Weil TList aber unbedingt Pointer haben will, müssen wir noch ein wenig friemeln mit den @'s und ^'s.
  Mit Zitat antworten Zitat
mfs

Registriert seit: 9. Mai 2006
35 Beiträge
 
#8

Re: Class und Record

  Alt 1. Jun 2006, 21:33
Super .. Danke schön ..

Damit kann ich mit Sicherheit anfangen

Beste Güsse
mfs
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:32 Uhr.
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