Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Property zusammensetzen (https://www.delphipraxis.net/51823-property-zusammensetzen.html)

Killer 19. Aug 2005 15:59


Property zusammensetzen
 
Hallo habe ein kleines Problem, und zwar möchte ich folgendes machen:

Ich habe eine for Schleife:
Delphi-Quellcode:
for vI := 1 to 5 do begin
Weiters hab ich eine Klasse namens TUser, in der verschiedene Informationen gespeichert sind.
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 :)

SirThornberry 19. Aug 2005 16:02

Re: Property zusammensetzen
 
muss man sich die komponente so vorstellen?
Delphi-Quellcode:
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;
von welchem Typ ist Server1 bis Server5.

wenn es Objecte sind würde es mit GetObjectProp funktionieren

Robert_G 19. Aug 2005 16:10

Re: Property zusammensetzen
 
Warum nicht gleich so?
Delphi-Quellcode:
property Servers : TServerCollection read ...
...
for Server in aUser.Servers do
oder
Delphi-Quellcode:
property Server[aIndex : Integer] : TServer read ...
...
for i := 0 to aUser.ServerCount - 1 do
Erstere wäre die hübsche Lösung, geht aber erst ab D2005. ;)

Killer 19. Aug 2005 16:14

Re: Property zusammensetzen
 
Nein das ganze sieht so aus:
Delphi-Quellcode:
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;
Ich habe die 5 Properties fix vorgegeben, da nie mehr als 5 existieren dürfen.

@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:
property Server[aIndex : Integer] : TServer read ?? write ??;
Hab da ja nur fixe Variablen FServer1, FServer2 usw.

SirThornberry 19. Aug 2005 16:18

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.

Robert_G 19. Aug 2005 16:27

Re: Property zusammensetzen
 
Delphi-Quellcode:
type TSomeEnum = (slFirst, slSecond, slThird, slForth);
...
  property Server[aIndex : TSomeEnum] : TServer;
-> [Ctrl + Schift + C] drücken.
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:
for i := slFirst to slForth do
  Server := aUser.Server[i];
Ehrlich gesagt finde ich es ziemlich hässlich und verstehe den Sinn der 5 Felder nicht.....

choose 19. Aug 2005 16:50

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;

Robert_G 19. Aug 2005 17:12

Re: Property zusammensetzen
 
Hihi, das wäre dann wohl der Kompromiss zwischen 1 Feld, aber rückwärts kompatiblem Interface. ;)

Killer 19. Aug 2005 19:23

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:
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;
Danke :)

Killer 21. Aug 2005 16:31

Re: Property zusammensetzen
 
So jetzt hab ich aber noch ein Problem damit. Und zwar muss ich in die Property
Delphi-Quellcode:
Server[Idx: integer]
auch schreiben können (also ins Array). Nur wie kann ich das lösen?

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.
Seite 1 von 2  1 2      

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