Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Variablen einer Klasse mittels propertys zur Verfügung stellen (https://www.delphipraxis.net/165578-variablen-einer-klasse-mittels-propertys-zur-verfuegung-stellen.html)

Bjoerk 6. Jan 2012 13:14

Variablen einer Klasse mittels propertys zur Verfügung stellen
 
Wie kann man denn Variablen einer Klasse eine anderen Klasse mittels property‘s zur Verfügung stellen, so geht’s schon mal nicht.:cry:

Delphi-Quellcode:
  TCustomGrafik = class(TGrafik)
  public
    AInteger: integer;
  end;
  TForm1 = class(TForm)
  public
    Grafik: TCustomGrafik;
    property AInteger: integer read Grafik.AInteger write Grafik.AInteger;
  end;

DeddyH 6. Jan 2012 13:26

AW: Variablen einer Klasse mittels propertys zur Verfügung stellen
 
Delphi-Quellcode:
TCustomGrafik = class(TGrafik)
  public
    AInteger: integer;
  end;
 
  TForm1 = class(TForm)
  private
    FGrafik: TCustomGrafik;
    procedure SetAInteger(Value: integer);
    function GetAInteger: integer;
  public
    property AInteger: integer read GetAInteger write SetAInteger;
  end;
 
procedure TForm1.SetAInteger(Value: integer);
begin
  FGrafik.AInteger := Value;
end;

function TForm1.GetAInteger: integer;
begin
  Result := FGrafik.AInteger;
end;

Bjoerk 6. Jan 2012 13:38

AW: Variablen einer Klasse mittels propertys zur Verfügung stellen
 
Okay, hab' ich schon befürchtet, daß ich jetzt ungefähr 85000 neue getter und setter brauche...

divBy0 6. Jan 2012 13:40

AW: Variablen einer Klasse mittels propertys zur Verfügung stellen
 
Gehört nicht in die Klasse TCustomGrafik?

Delphi-Quellcode:
TCustomGrafik = class(TGrafik)
  private
    FAInteger: integer;
  public
    property AInteger: integer read FAInteger write FAInteger;
  end;

DeddyH 6. Jan 2012 13:43

AW: Variablen einer Klasse mittels propertys zur Verfügung stellen
 
Sehe ich auch so, war aber zu faul, das zu ändern :zwinker:

Bjoerk 6. Jan 2012 13:49

AW: Variablen einer Klasse mittels propertys zur Verfügung stellen
 
Sehe ich grundsätzlich auch so, dann geht aber noch nichtmal ein Inc usw.. Bin mit den propertys von Delphi etwas unglücklich...

DeddyH 6. Jan 2012 13:52

AW: Variablen einer Klasse mittels propertys zur Verfügung stellen
 
Zitat:

Zitat von Bjoerk (Beitrag 1144662)
Okay, hab' ich schon befürchtet, daß ich jetzt ungefähr 85000 neue getter und setter brauche...

Du nutzt aber hoffentlich die Klassenvervollständigung (CTRL-SHIFT-C), sonst tippt man sich ja den Wolf.

Bjoerk 6. Jan 2012 13:55

AW: Variablen einer Klasse mittels propertys zur Verfügung stellen
 
Ja, nutze ich (gelegentlich) übers Kontextmenü, weil ich mir den Shortcut nie merken kann..

Stevie 6. Jan 2012 15:04

AW: Variablen einer Klasse mittels propertys zur Verfügung stellen
 
Gibt es einen Grund, die Properties von TGraphic über das Form zu Verfügung zu stellen, anstatt sie direkt von dem Graphic Objekt zu benutzen, welches dann nur über eine Property vom Form zur Verfügung gestellt wird?

DeddyH 6. Jan 2012 15:06

AW: Variablen einer Klasse mittels propertys zur Verfügung stellen
 
Es kommt IMHO darauf an, wer die Instanz zur Verfügung stellt.

Stevie 6. Jan 2012 15:25

AW: Variablen einer Klasse mittels propertys zur Verfügung stellen
 
Zitat:

Zitat von DeddyH (Beitrag 1144682)
Es kommt IMHO darauf an, wer die Instanz zur Verfügung stellt.

Deshalb war diese Frage auch an den TE gerichtet. :wink:

DeddyH 6. Jan 2012 15:27

AW: Variablen einer Klasse mittels propertys zur Verfügung stellen
 
Achso :lol:

SirThornberry 6. Jan 2012 16:57

AW: Variablen einer Klasse mittels propertys zur Verfügung stellen
 
Zitat:

Zitat von Bjoerk (Beitrag 1144662)
Okay, hab' ich schon befürchtet, daß ich jetzt ungefähr 85000 neue getter und setter brauche...

Nicht zwangsläufig:
Delphi-Quellcode:
TCustomGrafik = class(TGrafik)
   public
     AInteger1: integer;
     AInteger2: integer;
     AInteger3: integer;
   end;
   TForm1 = class(TForm)
   protected
     fGrafik: TCustomGrafik;
     function GetIntVar(aIndex: Integer): Integer; virtual;
     procedure SetIntVar(aIndex: Integer; aValue: Integer); virtual;
   public
     property AInteger1: integer Index 0 read GetIntVar write SetIntVar;
     property AInteger2: integer Index 1 read GetIntVar write SetIntVar;
     property AInteger3: integer Index 2 read GetIntVar write SetIntVar;
   end;

implementation

function TForm1.GetIntVar(aIndex: Integer): Integer;
begin
  case aIndex of
    0: result := fGrafik.AInteger1;
    1: result := fGrafik.AInteger2;
    2: result := fGrafik.AInteger3;
    else raise Exception.Create('Invalid Index');
  end;
end;

procedure TForm1.SetIntVar(aIndex: Integer; aValue: Integer);
begin
  case aIndex of
    0: fGrafik.AInteger1 := aValue;
    1: fGrafik.AInteger2 := aValue;
    2: fGrafik.AInteger3 := aValue;
    else raise Exception.Create('Invalid Index');
  end;
end;
Aber wie bereits erwähnt wurde ist die objektorientierte Variante besser (also über FormInstanz.Grafik.Property)

Bjoerk 6. Jan 2012 18:37

AW: Variablen einer Klasse mittels propertys zur Verfügung stellen
 
Zitat:

Zitat von Stevie (Beitrag 1144684)
Zitat:

Zitat von DeddyH (Beitrag 1144682)
Es kommt IMHO darauf an, wer die Instanz zur Verfügung stellt.

Deshalb war diese Frage auch an den TE gerichtet. :wink:

Sorry, komm' erst jetzt wieder dazu zu antworten, hab‘ die ganze Zeit daran gearbeitet.

Nein da gibt es keinen besonderen Grund, ist historisch begründetet. Ob jetzt von TForm nach TGrafik oder umgekehrt wäre mir eigentlich egal. Die Form stellt ein Image und Flags zur Verfügung, die TGraphik braucht, mehr nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:35 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