Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Eigene Komponete mit Feldern für Livebinding anzeigen? (https://www.delphipraxis.net/183406-eigene-komponete-mit-feldern-fuer-livebinding-anzeigen.html)

Mavarik 7. Jan 2015 15:08

Eigene Komponete mit Feldern für Livebinding anzeigen?
 
Hallo Zusammen!

Ich habe eine eigene Komponente (FMX) erzeugt.

Delphi-Quellcode:
type
  TMyEdit = class(TEdit)
    private
     FC : string;
    public
      property CoolesFeld : String read FC write FC;
  end;
Der Livebinding Designer hat ja die Felder von TEdit (Text) sofort sichtbar.
Wie bringe ich es Ihm bei, sofort mein Feld auch darzustellen ohne jedes mal mein Feld über den Dialog erst sichtbar zu schalten?

Mavarik

mkinzler 7. Jan 2015 15:27

AW: Eigene Komponete mit Feldern für Livebinding anzeigen?
 
Das Zauberwort heisst RTTI

http://blogs.embarcadero.com/jimtier...12/10/01/31653

Stevie 7. Jan 2015 15:44

AW: Eigene Komponete mit Feldern für Livebinding anzeigen?
 
Delphi-Quellcode:
  Data.Bind.Components.RegisterObservableMember(
    TArray<TClass>.Create(TMyEdit), 'CoolesFeld', 'FMX');
Allerdings kann man nur eine Property angeben, du überschreibst also damit die Text Property von TEdit.

Mavarik 7. Jan 2015 15:54

AW: Eigene Komponete mit Feldern für Livebinding anzeigen?
 
Ahh genau...

Danke... Das hatte ich schon in einer anderen Komponente verwendet...

Was ist nicht so ganz verstehe ist das TAG

[ObservableMember('Position')]

den ein
Delphi-Quellcode:
  Data.Bind.Components.RegisterObservableMember(TArray<TClass>.Create(TMyEdit), 'CooleFeld', 'FMX');

Reicht schon um es im VisialLiveBinder sofort zu zeigen.. und ein TEdit hat ja die Observer Geschichte schon dabei...

Oder?

Mavarik

Mavarik 7. Jan 2015 15:55

AW: Eigene Komponete mit Feldern für Livebinding anzeigen?
 
Zitat:

Zitat von Stevie (Beitrag 1285793)
Delphi-Quellcode:
  Data.Bind.Components.RegisterObservableMember(
    TArray<TClass>.Create(TMyEdit), 'CoolesFeld', 'FMX');
Allerdings kann man nur eine Property angeben, du überschreibst also damit die Text Property von TEdit.

OK und wenn ich 10 Property's habe?

Stevie 7. Jan 2015 16:26

AW: Eigene Komponete mit Feldern für Livebinding anzeigen?
 
Properties

ObservableMemberAttribute über der Klasse sollte dir den Code ersparen, richtig.

Aber wie gesagt, ist das so implementiert, dass das dann die DefaultProperty fürs Binding ist, welche afaik vom VLB Designer genutzt wird.
Zumindest darüber kannst du ihm nicht mehr als eine Eigenschaft mitgeben. Meine Vermutung ist, dass das nur über explizites ... anklicken geht, mehr als eine Eigenschaft anzuzeigen.

Mavarik 7. Jan 2015 18:02

AW: Eigene Komponete mit Feldern für Livebinding anzeigen?
 
Zitat:

Zitat von Stevie (Beitrag 1285802)
Properties

ObservableMemberAttribute über der Klasse sollte dir den Code ersparen, richtig.

Aber wie gesagt, ist das so implementiert, dass das dann die DefaultProperty fürs Binding ist, welche afaik vom VLB Designer genutzt wird.
Zumindest darüber kannst du ihm nicht mehr als eine Eigenschaft mitgeben. Meine Vermutung ist, dass das nur über explizites ... anklicken geht, mehr als eine Eigenschaft anzuzeigen.

Naja die PrototypeBindSource kann es sogar on the fly, wenn Du ein neues Feld erzeugst ist es sofort da!

Stevie 7. Jan 2015 20:13

AW: Eigene Komponete mit Feldern für Livebinding anzeigen?
 
Zitat:

Zitat von Mavarik (Beitrag 1285815)
Zitat:

Zitat von Stevie (Beitrag 1285802)
Properties

ObservableMemberAttribute über der Klasse sollte dir den Code ersparen, richtig.

Aber wie gesagt, ist das so implementiert, dass das dann die DefaultProperty fürs Binding ist, welche afaik vom VLB Designer genutzt wird.
Zumindest darüber kannst du ihm nicht mehr als eine Eigenschaft mitgeben. Meine Vermutung ist, dass das nur über explizites ... anklicken geht, mehr als eine Eigenschaft anzuzeigen.

Naja die PrototypeBindSource kann es sogar on the fly, wenn Du ein neues Feld erzeugst ist es sofort da!

Dann schau doch selber in die Sourcen der PrototypeBindSource :D
Aber ich vermute eher, dass es im Designer Code steckt, ob er dort eine Eigenschaft anzeigt oder mehrere.

Edit: Hab mal in den VLB Designer geschaut. Die Einträge, die man bei ner PBS sieht, sind TGeneratorFieldDef Instanzen der PBS (sieht man auch im OI, wenn man sie anklickt).
Die werden etwas anders gehandhabt, als simple Eigenschaften von nem TEdit.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 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 by Thomas Breitkreuz