Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wert direkt an Unterobjekt weiterreichen (https://www.delphipraxis.net/45242-wert-direkt-unterobjekt-weiterreichen.html)

jfheins 2. Mai 2005 21:39


Wert direkt an Unterobjekt weiterreichen
 
Kann ich einen Wert direkt an ein Unterobjekt weiterreichen, statt jedemal ein Wrapperfunktion scheiben zu müssen ?

Also ich habe z.B.
Delphi-Quellcode:
TFMyClass = class(TCustomControl)
  private
    MeineTolleCombobox: TComboBox;
Und möchte sowas machen:
Delphi-Quellcode:
published
    property Text: String read MeineTolleComboBox.Text write MeineTolleComboBox.Text;
Geht aber nicht (Undefinierter Bezeichner TMeineTolle...)

Muss ich für jede Property, die ich "weitergeben" möchte, eine Wrapperfunktion schreiben ? :shock:

Oder geht das so, wie ich mir das gedacht habe ?

Dax 2. Mai 2005 22:19

Re: Wert direkt an Unterobjekt weiterreichen
 
Eventuell geht das über Interfaces und Method Resolution Clauses.. frag morgen nochmal, ich geh jetzt pennen.. :wink:

shmia 3. Mai 2005 07:43

Re: Wert direkt an Unterobjekt weiterreichen
 
Zitat:

Zitat von jfheins
Kann ich einen Wert direkt an ein Unterobjekt weiterreichen, statt jedemal ein Wrapperfunktion scheiben zu müssen ?

Nein, du musst jedesmal eine Wrapperfunktion schreiben.
Die Idee von Dax wird nicht funktionieren, da die VCL keine Interface benützt.

Robert_G 3. Mai 2005 10:32

Re: Wert direkt an Unterobjekt weiterreichen
 
Zitat:

Zitat von shmia
Zitat:

Zitat von jfheins
Kann ich einen Wert direkt an ein Unterobjekt weiterreichen, statt jedemal ein Wrapperfunktion scheiben zu müssen ?

Nein, du musst jedesmal eine Wrapperfunktion schreiben.
Die Idee von Dax wird nicht funktionieren, da die VCL keine Interface benützt.

Hmpf? :gruebel: Schon TComponent implementiert Interfaces, deshalb kann man Controls so einfach eins "drüberstülpen". ;)

Das Problem ließe sich mit minimalem Code lösen... Wenn nicht fast sämtliche Properties in fast sämtlichen Controls bekloppte private Getter/Setter hätten. :roll:

Mit protected Accessors wäre es nur das hier:
Delphi-Quellcode:
type
   ITextProperty = interface
      function getText(): TCaption;
      procedure setText(const Value: TCaption);

      property Text: TCaption read getText write setText;
   end;


type
   TTextProperty = class
   private
      fText: TCaption;
   protected
      function getText(): TCaption;
      procedure setText(const Value: TCaption);
   published
      property Text: TCaption read getText write setText;
   end;


type
   TSomeClass = class(TInterfacedObject, ITextProperty)
   private
      fTextProperty: TTextProperty;
   protected
      property TextProperty: TTextProperty read fTextProperty implements ITextProperty;
   public
      constructor Create(); virtual;
      destructor Destroy(); override;
   end;
In deinem Falle ließe sich eine ComboBox(Du könntest TTextProperty durch TComboBox ersetzen ;) ) also von selbst dazu zu übereden ITextProperty für dich in deiner Klasse zu implementieren. Wenn die Property Text in TControl nicht so besch***en implementiert sein würde. :kotz:

DP-Maintenance 3. Mai 2005 10:50

DP-Maintenance
 
Dieses Thema wurde von "sakura" von "VCL / WinForms / Controls" nach "Object-Pascal / Delphi-Language" verschoben.

jfheins 3. Mai 2005 12:17

Re: Wert direkt an Unterobjekt weiterreichen
 
Wenn ich das jetzt richtig verstanden hab' geht es also nicht, weil die alle private Getter und Setter haben ...

Dann muss ich halt für alles und jeden eine Wrapperfunktion schreiben ... Naja :?

Dax 3. Mai 2005 12:58

Re: Wert direkt an Unterobjekt weiterreichen
 
Aber: Wenn du ja eh Delphi Professional hast, hast du automatisch die Saucen der VCL. Wenn du dir die Mühe machen willst, kannst du ja die Getter/Setter der Properties, die du brauchst, nach protected schieben und Roberts Code nehmen ;)

Robert_G 3. Mai 2005 13:18

Re: Wert direkt an Unterobjekt weiterreichen
 
Zitat:

Zitat von Dax
Aber: Wenn du ja eh Delphi Professional hast, hast du automatisch die Saucen der VCL. Wenn du dir die Mühe machen willst, kannst du ja die Getter/Setter der Properties, die du brauchst, nach protected schieben und Roberts Code nehmen ;)

Das bedeutet aber, dass der Code nur bei ihm kompostierbar ist. ;)

Will er es wirklich ändern, sollte er das TListItem gleich mit ändern. Mit der Originalversion ist es schlichtweg unmöglich irgendwas sinnvolles mit TListView anzufangen.
Dank private accessors bringt dir nämlich eine Ableitung von TListItem fast keinerlei Vorteil. :kotz:
Und was bringt dir eine ListView-Ableitung ohne spezielle Items, die man an Objekte binden kann? :gruebel:

Ob es in Delphi 2006 eine VCL geben wir, bei der es einem nicht den Magen verdreht? :gruebel:


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