![]() |
Property zusammensetzen
Hallo habe ein kleines Problem, und zwar möchte ich folgendes machen:
Ich habe eine for Schleife:
Delphi-Quellcode:
Weiters hab ich eine Klasse namens TUser, in der verschiedene Informationen gespeichert sind.
for vI := 1 to 5 do begin
Nun kann man einem User mehrere Server zuweisen, diese heißen in der Klasse Server1 - Server5. Ich möchte in der Schleife alle Properties angefangen von Server1 bis Server5 durchgehen, aber weiß nicht, wie ich das formulieren muss. Wahrscheinlich ist es ganz einfach und ich komm ned drauf :) |
Re: Property zusammensetzen
muss man sich die komponente so vorstellen?
Delphi-Quellcode:
von welchem Typ ist Server1 bis Server5.
TYourComponent = class(TComponent);
public property Server1: TKlassex read...; property Server2: TKlassex read...; property Server3: TKlassex read...; property Server4: TKlassex read...; property Server5: TKlassex read...; end; wenn es Objecte sind würde es mit GetObjectProp funktionieren |
Re: Property zusammensetzen
Warum nicht gleich so?
Delphi-Quellcode:
oder
property Servers : TServerCollection read ...
... for Server in aUser.Servers do
Delphi-Quellcode:
Erstere wäre die hübsche Lösung, geht aber erst ab D2005. ;)
property Server[aIndex : Integer] : TServer read ...
... for i := 0 to aUser.ServerCount - 1 do |
Re: Property zusammensetzen
Nein das ganze sieht so aus:
Delphi-Quellcode:
Ich habe die 5 Properties fix vorgegeben, da nie mehr als 5 existieren dürfen.
type TUser = class
... public property Server1: integer read FServer1 write FServer1; property Server2: integer read FServer2 write FServer2; property Server3: integer read FServer3 write FServer3; property Server4: integer read FServer4 write FServer4; property Server5: integer read FServer5 write FServer5; @Robert_G: Deine untere Lösung sieht interessant aus, müsste mal testen ob es so funktioniert wie ich jetzt meine... Ich progge mit Delphi 7 deshalb geht die obere nicht :) Edit: Wie muss ich das denn schreiben:
Delphi-Quellcode:
Hab da ja nur fixe Variablen FServer1, FServer2 usw.
property Server[aIndex : Integer] : TServer read ?? write ??;
|
Re: Property zusammensetzen
ich würde auch die untere Variante von Robert bevorzugen.
Wenn du es jedoch wie jetzt lassen willst kommst du mit GetOrdProp an die Werte ran. |
Re: Property zusammensetzen
Delphi-Quellcode:
-> [Ctrl + Schift + C] drücken.
type TSomeEnum = (slFirst, slSecond, slThird, slForth);
... property Server[aIndex : TSomeEnum] : TServer;
Delphi-Quellcode:
function getServer(aIndex : TSomeEnum) : TServer;
begin case aIndex of slFirst : result := Server1; slSecond : result := Server2; slThird : result := Server3; slForth : result := Server4; else result := nil; end; end;
Delphi-Quellcode:
Ehrlich gesagt finde ich es ziemlich hässlich und verstehe den Sinn der 5 Felder nicht.....
for i := slFirst to slForth do
Server := aUser.Server[i]; |
Re: Property zusammensetzen
Gar nicht übel, Robert, vielleicht mit einer kleinen Anpassung:
Delphi-Quellcode:
type
TSomeEnum = (slFirst, slSecond, slThird, slFourth); TMYClass = class private FServers: array[TSomeEnum] of TServer; function GetServers(AIndex: TSomeEnum): TServer; public property Server[AIndex : TSomeEnum] : TServer read GetServers; property Server1: TServer index slFirst read GetServers; property Server2: TServer index slSecond read GetServers; property Server3: TServer index slThird read GetServers; property Server4: TServer index slFourth read GetServers; end; function TMYClass.GetServers(AIndex: TSomeEnum): TServer; begin Result := FServers[AIndex]; end; |
Re: Property zusammensetzen
Hihi, das wäre dann wohl der Kompromiss zwischen 1 Feld, aber rückwärts kompatiblem Interface. ;)
|
Re: Property zusammensetzen
Danke für eure Ansätze, habs nun ein wenig anders gemacht, da ich ja ein Array von Integers brauche:
Delphi-Quellcode:
Danke :)
type TUser = class
private Server: array[0..4] of integer; function GetServer(Index: integer): integer; public property Server[Idx: integer]: integer read GetServer; end; function TUser.GetServer(Index: integer): integer; begin Result := FServer[Index]; end; |
Re: Property zusammensetzen
So jetzt hab ich aber noch ein Problem damit. Und zwar muss ich in die Property
Delphi-Quellcode:
auch schreiben können (also ins Array). Nur wie kann ich das lösen?
Server[Idx: integer]
Hab mir dann gedacht, vielleicht gehts so, aber so kennt er Idx nicht...
Delphi-Quellcode:
:|
property Server[Idx: integer]: integer read GetServer write FServer[Idx];
Edit: Lösung schon gefunden:
Delphi-Quellcode:
property Server[Idx: integer]: integer read GetServer write WriteServer;
procedure WriteServer(Index: integer; Value: integer);
Delphi-Quellcode:
procedure TUser.WriteServer(Index: integer; Value: integer);
begin FServer[Index] := Value; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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