Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Wann ist die Zeit für eine eigene VCL-Komponente gekommen?

  Alt 17. Jun 2013, 17:14
Und wenn ich gut aufgepasst habe, dann sieht man diese Sachen im Objektinspektor nur, wenn sie den Sichtbarkeitsmodifikator published haben, richtig?
Exakt.

Ok, wenn man mich zwingt:
erste Variante: http://www.delphipraxis.net/162362-m...s-preview.html
aktuell: http://www.delphipraxis.net/173360-s...framework.html

Da ich immer noch viel Delphi-Standardklassen nicht kenne, weiß ich bsp. nicht, inwiefern man hier mit einem normalen Observer-Pattern arbeiten könnte (hier fehlen mir wieder die Interfaces ) oder es doch etwas komplizierter wird.
Bei mir ist es wohl noch etwas einfacher, da ich ja nur stumpf etwas beobachten will, Änderungen an den Objekten soll die Komponente keine vornehmen können. Nur etwas anzeigen.
Ich glaube ein klassisches Beispiel findet man in dem Zusammenspiel von TDataSource->TDataSet->TCustomConnection ? Das schaue ich mir mal näher an...
Richtig, aber evtl. für Dich nicht notwendig. Die Frage ist, wie komplex Du es brauchst.

Beispiel TDataAmpel und TVisibleAmpel.
Wenn TVisibleAmpel eine Eigenschaft TDataAmpel hat, kann sie jederzeit auf deren Farbwert zugreifen und sich neu zeichnen.
Machst Du das in einem Timer ist nix weiter notwendig als VAmpel1.DAmpel := DAmpel1 auszuführen. Das würde schon reichen.
Willst Du keinen Timer verwenden muss DAmpel wissen, in welcher/n VAmpel/n sie verwendet wird (Observer bzw. RegisterListe) und muss bei Datenänderungen ihre VAmpeln informieren.
Alternativ kann ein "Vermittler" alle VAmpeln informieren, wenn in einer DAmpel eine Änderung erfolgt.
Wenn Du eine 1:1 Beziehung hast, kannst Du es Dir natürlich leicht machen und VAmpel und DAmpel gegenseitig miteinander bekannt machen.
In jedem Fall muss man beachten, dass die sichtbaren Controls darüber informiert werden, wenn das gebundene Datenobjekt aufgelöst wird.

Ich weise meinen sichtbaren Controls ein Objekt zu und einen Eigenschaftsnamen. Der Objekttyp muss dem sichtbaren Control dabei nicht bekannt sein.
Im Prinzip etwa:
VAmpel1.Ctrl.Object := DAmpel1; VAmpel1.Ctrl.PropName := 'Color'; bzw. real:
VAmpel1.Ctrl.ObjName := '#EineId_Oder_ComponentName.Color';
Die Auflösung erfolgt dann zur Laufzeit. Datenänderungen durch das Control oder durch die BusinessLogic werden in beide Richtungen über ein Framework automatisch übermittelt.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (17. Jun 2013 um 17:19 Uhr)
  Mit Zitat antworten Zitat