![]() |
Komponenten-Entwicklung: xyz[i].name
Hallo,
bin Anfänger in Komponentenentwicklung und würde jetzt gerne eine Struktur erzeugen, so dass ich darauf mit
Code:
etc darauf zugreifen kann.
componentname.xyz[i].name;
componentname.xyz[i].id 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 |
Re: Komponenten-Entwcilung: xyz[i].name
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'; |
Re: Komponenten-Entwcilung: xyz[i].name
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:
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.
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; |
Re: Komponenten-Entwcilung: xyz[i].name
Hallo, das letzte soll auch ein record sein, habe es so mal hinbekommen(alles unwichtige weggelassen):
Code:
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?
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; Herzlichen Dank lkz633 |
Re: Komponenten-Entwcilung: xyz[i].name
Hab das jetzt mit
Code:
hinbekommen, das ich mit
property contacts[Index : Integer]: TContactItem read Getcontacts write Setcontacts;
Code:
darauf zugreifen kann, jedoch geht
contacts[1].name
Code:
auch. Warum?
contacts.name
Dadurch ist jetzt aber
Code:
rausgefallen, dies hätte ich aber gerne, so dass ich autom. auch Eigenschaften wie Index und Count habe.
tcontactlist=class(tlist)
Wie kann ich diese beiden Vorstellungen kombinieren? Gruss lkz633 |
Re: Komponenten-Entwcilung: xyz[i].name
Hallo,
das bekommst Du so hin (achte darauf das default hinter den Semikolon steht)
Delphi-Quellcode:
Den Vorschlag von lkz633 anstatt Records Objekte und anstatt dyn. Array's TList zu verwenden kann ich voll unterstützen.
property Items[Index : Integer]: tcontactitem read GetItems write SetItems; default;
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 ![]() 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 |
Re: Komponenten-Entwcilung: xyz[i].name
:wall: :wall:
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 |
Re: Komponenten-Entwcilung: xyz[i].name
Kriegs irgendwie doch nicht gebacken......
Brauch ich tContactList noch oder nicht? Und wiso kann ich auch immer contacs.name benutzen? Max |
Re: Komponenten-Entwcilung: xyz[i].name
Hallo,
es scheint so, also ob Du Deinen Source geändert hast.Poste doch mal den kompletten Source. |
Re: Komponenten-Entwcilung: xyz[i].name
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 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