Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Klassen-Eigenschaft als Array (https://www.delphipraxis.net/101820-klassen-eigenschaft-als-array.html)

RWarnecke 18. Okt 2007 16:31


Klassen-Eigenschaft als Array
 
Hallo zusammen,

ich probiere mich gerade an Klassen. Ich habe mich schon durch ein paar Tutorials gewühlt. Eine Klasse zu erzeugen mit Eigenschaften und so weiter funktioniert auch wunderbar. Ich habe die Klasse wie folgt erstellt :
Delphi-Quellcode:
  TSample = class(TObject)
  private
    FWert1 : integer;
    FWert2 : integer;
  public
    constructor Create;
    property Wert1: integer read FWert1;
    property Wert2: integer read FWert2;
    procedure GetInfos;
  end;

constructor Create;
begin
  GetInfos;
end;

procedure GetInfos;
begin
  FWert1 := FWert1 + random(10);
  FWert2 := FWert2 + (Random(10) + FWert1);
end;
Wenn ich das ganze jetzt in mehrmals aufrufe, dann werden die Werte hintereinander geschrieben. Nun möchte ich die Ergebnisse von FWert1 und FWert2 in ein Array schreiben, so das die Eigenschaft Wert1 und Wert2 als array of integer ist. Wie mache ich aus der einfachen Integer-Wert-Eigenschaft ein Array Of Integer ?

sirius 18. Okt 2007 16:39

Re: Klassen-Eigenschaft als Array
 
z.B. über funktionen:
Delphi-Quellcode:
TSample = class(TObject)
  private
    FWert1 : integer;
    FWert2 : integer;
    function getWert(i:integer);
  public
    constructor Create;
    property Wert[i:integer]: integer read getWert;
    procedure GetInfos;
  end;

function TSample.getWert(i:integer);
begin
  case i of
    1: result:=FWert1;
    2: result:=FWert2;
    else raise Exception.create('Idiot');
  end;
end;
Da kann man natürlich auch die Variablen in ein Array legen.

Edit: kleiner Fehler behoben

dominikkv 18. Okt 2007 16:41

Re: Klassen-Eigenschaft als Array
 
Meinst du das so:

Delphi-Quellcode:
TSample = class(TObject)
  private
    FWert1 : integer;
    FWert2 : integer;
    function GetWert(idx: Integer): Integer;
  public
    constructor Create;
    property Wert[idx: Integer]: Integer read GetWert;
    procedure GetInfos;
  end;

function TSample.GetWert(idx: Integer): Integer;
begin
  case idx of
    0: result := FWert1;
    1: result := FWert2;
  end;
end;
@roter kasten:
och mennoooo :/ du warst schneller

sirius 18. Okt 2007 16:42

Re: Klassen-Eigenschaft als Array
 
Zitat:

@roter kasten:
och mennoooo :/ du warst schneller
aber du richtiger :drunken:

heiopei 18. Okt 2007 16:46

Re: Klassen-Eigenschaft als Array
 
hallo,

zuerst solltest du einen Typ TIntArray definieren:

type TIntArray = array of Integer;
Dann brauchst du ein Feld FIntArray: TIntArray. Jetzt musst du noch das Property definieren:

property IntArray[index: Integer]: TIntArray read GetInteger;

GetInteger ist dabei eine Getter-Funktion, die wie folgt definiert ist:

function GetInteger(Index: Integer): Integer;

Die Implementation für GetInteger sollte dan so lauten:

function TDeineKlasse.GetInteger(Index: Integer):Integer;
begin
if FIntArray <> nil then
if Length(FIntArray) < Index then
result := FIntArray[Index];
end;

Hoffe der Code ist selbstsprechend genug!

mfg,
heiopei

PS: du kannst auch mehrdimensionale Properties definieren, indem du statt FIntArray[Index: Integer] z.B. FIntArray[Breite, Tiefe: Integer] schreibst!

dominikkv 18. Okt 2007 17:41

Re: Klassen-Eigenschaft als Array
 
Zitat:

Zitat von sirius
Zitat:

@roter kasten:
och mennoooo :/ du warst schneller
aber du richtiger :drunken:

deine function hat immernoch keinen rückgabewert :zwinker:

sirius 18. Okt 2007 17:42

Re: Klassen-Eigenschaft als Array
 
Zitat:

Zitat von dominikkv
deine function hat immernoch keinen rückgabewert :zwinker:

Das braucht die nicht, die ist viel klüger als deine :P

dominikkv 18. Okt 2007 17:48

Re: Klassen-Eigenschaft als Array
 
Zitat:

Zitat von sirius
Zitat:

Zitat von dominikkv
deine function hat immernoch keinen rückgabewert :zwinker:

Das braucht die nicht, die ist viel klüger als deine :P

ich meine das hier:
Delphi-Quellcode:
function getWert(i:integer);
Zitat:

[DCC Fehler] Unit1.pas(23): E2023 Funktion benötigt Ergebnistyp

RWarnecke 19. Okt 2007 15:00

Re: Klassen-Eigenschaft als Array
 
Zitat:

Zitat von heiopei
hallo,

zuerst solltest du einen Typ TIntArray definieren:

type TIntArray = array of Integer;
Dann brauchst du ein Feld FIntArray: TIntArray. Jetzt musst du noch das Property definieren:

property IntArray[index: Integer]: TIntArray read GetInteger;

GetInteger ist dabei eine Getter-Funktion, die wie folgt definiert ist:

function GetInteger(Index: Integer): Integer;

Die Implementation für GetInteger sollte dan so lauten:

function TDeineKlasse.GetInteger(Index: Integer):Integer;
begin
if FIntArray <> nil then
if Length(FIntArray) < Index then
result := FIntArray[Index];
end;

Hoffe der Code ist selbstsprechend genug!

mfg,
heiopei

PS: du kannst auch mehrdimensionale Properties definieren, indem du statt FIntArray[Index: Integer] z.B. FIntArray[Breite, Tiefe: Integer] schreibst!

Das hat mir sehr weitergeholfen. Danke. Jetzt ist nur noch die Frage, muss ich für jeden Eigenschaftsarray eine eigene Funktion schreiben ?

heiopei 19. Okt 2007 15:13

Re: Klassen-Eigenschaft als Array
 
Hallo,
ja ich glaube schon, da du ja immer wissen musst, auf welches Feld du zugreifen musst, aus dem der Wert jeweils gelesen werden soll.

Es kann aber sein, das du noch was mit der Direktive "index" machen kannst. Erkundige dich mal in der OH, ich selbst hab das noch nie verwendet, ich weis nur das es das gibt.

mfg,
heiopei


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.
Seite 1 von 2  1 2      

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