![]() |
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:
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
type TCalcData= class(TObject)
private F_X: Double; function getValue: Double; procedure setValue(dd: Double); public property X: Double read getValue write setValue; end;
Delphi-Quellcode:
Das Box-Objekt schreibt Eingaben auch brav in sein internes Feld. Soweit so gut.
inpX := TInputBlock.Create;
inpX.Value := 10; inpX.ShowBox(...); 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 |
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(...); |
Re: Objekt-Eigenschaft mit anderem Objekt verbinden, evtl Ze
Hab gerade kein Delphi da, gebe also keine Garantie für syntaktische Richtigkeit:
Delphi-Quellcode:
Statt F_X und F_Y also ein Array und ein passender Aufzählungstyp um auf "X" und "Y" zuzugreifen.
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); Grüsse, Dirk |
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 17:48 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