AGB  ·  Datenschutz  ·  Impressum  







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

Komponenten-Entwicklung: xyz[i].name

Ein Thema von lkz633 · begonnen am 17. Jan 2004 · letzter Beitrag vom 17. Jan 2004
Antwort Antwort
Seite 1 von 3  1 23      
lkz633

Registriert seit: 9. Jun 2002
Ort: Aachen
221 Beiträge
 
#1

Komponenten-Entwicklung: xyz[i].name

  Alt 17. Jan 2004, 14:54
Hallo,

bin Anfänger in Komponentenentwicklung und würde jetzt gerne eine Struktur erzeugen, so dass ich darauf mit

Code:
componentname.xyz[i].name;
componentname.xyz[i].id
etc darauf zugreifen kann.

Wie mache ich das am besten, es klappt einfach nicht.

Im construktor möchte ich dies auch dann komplett füllen, was muss ich alles erzeugen? Wahrscheinlich eine abgeleiteten Typ von Stringlist für das xyz?

Danke und Gruss
lkz633
  Mit Zitat antworten Zitat
Skiron

Registriert seit: 14. Dez 2003
153 Beiträge
 
#2

Re: Komponenten-Entwcilung: xyz[i].name

  Alt 17. Jan 2004, 15:25
du kannst folgendes Machen:

Delphi-Quellcode:
type
  Typ1 = record
    Name: string;
    ID: string;
  end;

  MeineComp = class
    xyz: array of Typ1;
  end;

//im constructor:
begin
  setLength(xyz, 4); //Oder wie viel du halt drinnenhaben willst
  //Dann kannst du alles initialisieren...
end;

//außerhalb der komponente:
var
  h: MeineComp;

//irgendwo in einer prozedur
  h.xyz[1].Name := 'xxx';
Mann zu Frau:
Zieh dich aus, wir müssen reden!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Komponenten-Entwcilung: xyz[i].name

  Alt 17. Jan 2004, 15:25
Moin lkz,

ist halt die Frage, ob xyz bei Dir wiederum ein Objekt, oder einfach nur ein Recordtyp sein soll.
In jedem Falle müsstest Du wohl ein (dynamisches) Array für xyz vorsehen

Beispiel:

Delphi-Quellcode:
type
  TMyRecord = packed record
    name : string;
    id : integer;
  end;

  TMyComponent = class(TObject)
  private
    FMyList : array of TMyRecord;
      function Getxyz(index: integer): TMyRecord;
      procedure Setxyz(index: integer; const Value: TMyRecord);
  public
    constructor Create;
    procedure Add(const AsName : string;AiId : integer);
    property xyz[index : integer] : TMyRecord read Getxyz write Setxyz;
  end;

implementation

{$R *.DFM}

{ TMyComponent }

procedure TMyComponent.Add(const AsName: string; AiId: integer);
begin
  SetLength(FMyList,length(FMyList)+1);
  FMyList[high(FMyList)].name := AsName;
  FMyList[high(FMyList)].Id := AiId;
end;

constructor TMyComponent.Create;
begin
  inherited;
  SetLength(FMyList,0);
end;

function TMyComponent.Getxyz(index: integer): TMyRecord;
begin
  Result := FMyList[index];
end;

procedure TMyComponent.Setxyz(index: integer; const Value: TMyRecord);
begin
  FMyList[index] := Value;
end;
Das Beispiel enthält keinerlei Sicherheitsprüfungen (Index), und das Array immer um einen Wert zu vergrössern, ist auch nicht besonders geschickt, aber es zeigt einen Weg auf, wie es grundsätzlich machbar wäre.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
lkz633

Registriert seit: 9. Jun 2002
Ort: Aachen
221 Beiträge
 
#4

Re: Komponenten-Entwcilung: xyz[i].name

  Alt 17. Jan 2004, 15:41
Hallo, das letzte soll auch ein record sein, habe es so mal hinbekommen(alles unwichtige weggelassen):

Code:
type tcontactitem = class
  private
    Fname: string;
    procedure Setname(const Value: string);
  public
  property name: string read Fname write Setname;
end;

type tContactItemList = class(TList)
  private
    function GetItems(Index: Integer): tcontactitem;
    procedure SetItems(Index: Integer; const Value: tcontactitem);
  public
    property Items[Index : Integer]: tcontactitem read GetItems write SetItems;
end;

type
  Toutextract = class(TComponent)
  private
    FOutlookVersion: outlookversion;
    Fcontacts: TContactItemList;
    procedure getcontacts;
    procedure Setcontacts(const Value: TContactItemList);
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    constructor create(AOwner: TComponent); override;
    destructor destroy;
    property contacts: TContactItemList read Fcontacts write Setcontacts;
  end;
Jetzt greife ich aber darauf zu mit outextract1.contacts.Items[1].name, ich will aber direkt outextract1.contacts[1].name, wie bekomme ich das denn hin?

Herzlichen Dank
lkz633
  Mit Zitat antworten Zitat
lkz633

Registriert seit: 9. Jun 2002
Ort: Aachen
221 Beiträge
 
#5

Re: Komponenten-Entwcilung: xyz[i].name

  Alt 17. Jan 2004, 16:07
Hab das jetzt mit
Code:
property contacts[Index : Integer]: TContactItem read Getcontacts write Setcontacts;
hinbekommen, das ich mit
Code:
contacts[1].name
darauf zugreifen kann, jedoch geht
Code:
contacts.name
auch. Warum?

Dadurch ist jetzt aber
Code:
tcontactlist=class(tlist)
rausgefallen, dies hätte ich aber gerne, so dass ich autom. auch Eigenschaften wie Index und Count habe.

Wie kann ich diese beiden Vorstellungen kombinieren?

Gruss lkz633
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Komponenten-Entwcilung: xyz[i].name

  Alt 17. Jan 2004, 16:25
Hallo,
das bekommst Du so hin (achte darauf das default hinter den Semikolon steht)
property Items[Index : Integer]: tcontactitem read GetItems write SetItems; default; Den Vorschlag von lkz633 anstatt Records Objekte und anstatt dyn. Array's TList zu verwenden kann ich voll unterstützen.
Meine Grundsatz lautet: Verwende niemals Records. Es sei denn irgendein API verlangt einen Record als Parameter

An der Stelle habe ich mal meinen Senf zum Thema Speichern von Records abgegeben
http://www.delphipraxis.net/internal...399&highlight=

Dabei habe ich einen entscheidenden Vorteil vergessen zu erwähnen.
Wenn eine Datei als File of Record gespeichert wird und der Record wird mit der nächsten Version des Programms erweitert können die alten Dateien nicht mehr ohne weiteres gelesen werden. Wenn jedoch Objekte in Verbindung mit Write-/ReadComponent verwendet werden ist das kein Problem
  Mit Zitat antworten Zitat
lkz633

Registriert seit: 9. Jun 2002
Ort: Aachen
221 Beiträge
 
#7

Re: Komponenten-Entwcilung: xyz[i].name

  Alt 17. Jan 2004, 16:31


Ich hatte es schon so, nur das default ist mir noch nie über den Weg gelaufen..Naja wieder was gelernt

Danke an alle die geholfen haben

Gruss lkz633
  Mit Zitat antworten Zitat
lkz633

Registriert seit: 9. Jun 2002
Ort: Aachen
221 Beiträge
 
#8

Re: Komponenten-Entwcilung: xyz[i].name

  Alt 17. Jan 2004, 16:44
Kriegs irgendwie doch nicht gebacken......

Brauch ich tContactList noch oder nicht? Und wiso kann ich auch immer contacs.name benutzen?

Max
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Komponenten-Entwcilung: xyz[i].name

  Alt 17. Jan 2004, 16:47
Hallo,
es scheint so, also ob Du Deinen Source geändert hast.Poste doch mal den kompletten Source.
  Mit Zitat antworten Zitat
lkz633

Registriert seit: 9. Jun 2002
Ort: Aachen
221 Beiträge
 
#10

Re: Komponenten-Entwcilung: xyz[i].name

  Alt 17. Jan 2004, 16:49
Den hab ich jetzt 5 mal hin und hergeändert....

Ich möchte halt 3 dinge erreichen:

- ich möchte mit contacts[1].name darauf zugreifen
- contacs.count sollte es auch geben
- contacs.name sollte aber nicht funktionieren

Geht das?

Max
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 23:28 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