Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekt-Eigenschaft mit anderem Objekt verbinden, evtl Zeiger (https://www.delphipraxis.net/150466-objekt-eigenschaft-mit-anderem-objekt-verbinden-evtl-zeiger.html)

jokeBB 17. Apr 2010 19:59


Objekt-Eigenschaft mit anderem Objekt verbinden, evtl Zeiger
 
Hallo,
wage mich bei einem neuen Programm jetzt erstmalig an OOP. Hat soweit zwar schon gut geklappt, aber jetzt stehe ich grade auf dem Schlauch....

Im Programm gibt es ein komplexes Berechnungsformular. Da ich die Daten an verschiedenen Stellen brauche, habe ich die Speicherung in ein zentrales Datenobjekt ausgelagert (separate Unit), sagen wir mal myData := TCalcData.Create mit (stark vereinfacht)

Delphi-Quellcode:
type TCalcData= class(TObject)
  private
    F_X: Double;
    function getValue: Double;
    procedure setValue(dd: Double);
  public
    property X: Double read getValue write setValue;
end;
Weil ich da recht viele spezielle Eingabefelder mit Text drumrum und bestimmtem Verhalten usw. brauche, habe ich mir auch ein Objekt InputBox, das im Kern ein Editfeld dynamisch generiert, geschrieben, auch ausgelagert in eine andere Unit. Mit wenig Zeilen kann ich mir jetzt viele Eingabefelder erzeugen, also in etwa

Delphi-Quellcode:
inpX := TInputBlock.Create;
inpX.Value := 10;
inpX.ShowBox(...);
Das Box-Objekt schreibt Eingaben auch brav in sein internes Feld. Soweit so gut.

Jetzt meine (Anfänger)frage: wie kann ich erreichen, dass dieses Eingabe-Objekt inpX gleich in myData.X schreibt, natürlich nicht hart, sondern das inpY dann in myData.Y usw. Ich könnte zwar das ganze Objekt myData übergeben, aber dann weiß ich ja noch nicht die richtige Eigenschaft X. Und ich will natürlich nicht nur einmalig den Double-WErt übergeben, sondern jede weitere Änderung soll im myData.X landen. Kann ich dem inpX irgendwie einen Zeiger auf myData.X mitgeben oder so ähnlich? Wie müsste man das definieren, mit Zeigern mache ich sonst gar nichts...

Wäre für Tipps dankbar...
Gruß, jokebb

mkinzler 17. Apr 2010 20:25

Re: Objekt-Eigenschaft mit anderem Objekt verbinden, evtl Ze
 
Delphi-Quellcode:
type TInputBlock= class(TObject)
  private
    FData: TCalcData;
    ...
  public
    constructor Create ( AData: TCalcData);
    procedure ShowBox( ...);
    ...
end;
...
constructor TInputBlock.Create ( AData: TCalcData);
begin
    FData := AData;
end;

Delphi-Quellcode:
inpX := TInputBlock.Create( <Datenobjekt>);
inpX.ShowBox(...);

Tryer 17. Apr 2010 20:39

Re: Objekt-Eigenschaft mit anderem Objekt verbinden, evtl Ze
 
Hab gerade kein Delphi da, gebe also keine Garantie für syntaktische Richtigkeit:
Delphi-Quellcode:
type
  TDataName = (X, Y, Z);

  TData = array [TDataName] of Double;

  TCalcData = class
  private
    FData: TData;
  protected
    function GetValue(Name: TDataName): Double;
    procedure SetValue(Name: TDataName; AValue: Double);
  public
    property Value[Name: TDataName]: Double read GetValue write SetValue; default;
  end;

  TInputBlock = class
  private
    FSource: TCalcData;
    FDataName: TDataName;
  protected
    procedure SetValue(Value: Double);
  public
    constructor Create(Source: TCalcData; DataName: TDataName);
  end;

..
  procedure TInputBlock.SetValue(Value: Double);
  begin
    if Value <> FSource[FDataName] then
      FSource[FData] := Value;
  end;
..

  InpX := TInputBlock.Create(MyCalcData, X);
Statt F_X und F_Y also ein Array und ein passender Aufzählungstyp um auf "X" und "Y" zuzugreifen.

Grüsse, Dirk

jokeBB 17. Apr 2010 21:43

Re: Objekt-Eigenschaft mit anderem Objekt verbinden, evtl Ze
 
Super, vielen Dank für die schnellen Antworten. Das mit dem Array ist eine gute Idee. Muss noch ein bißchen tüfteln, aber in die Richtung müsste es klappen (dann schließe ich die Frage).
Grüße, jokebb


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