Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#15

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

  Alt 17. Jun 2013, 20:27
Also wenn ich mir deine Komponente so ansehe, dann würde ich die mal wie folgt beschreiben
Delphi-Quellcode:
unit MyControl;

TMyControlItem = class( ... )
  property Caption : string;
  property Color : TColor;
end;

TMyControl = class( ... )
published
  property BorderColor : TColor;
  property BorderWidth : Integer;
  property ItemCount : Integer;
  property Items[Index : Integer] : TMyControlItem;
end;
Dein DatenObjekt sieht nun wohl irgendwie so aus:
Delphi-Quellcode:
unit Data;

TDataChild = class
  property On : Boolean;
end;

TData = class
  // Sigalisierung bei Änderungen über einen Event
  property OnChange : TNotifyEvent;
  // oder eine Event-Liste ;)
  procedure AddOnChange( ANotify : TNotifyEvent );
  procedure RemOnChange( ANotify : TNotifyEvent );

  property On : Boolean;
  property ChildCount : Integer;
  property Childs[Index : Integer] : TDataChild;
end;
Für die Visualisierung baust du dir jetzt einfach einen abstrakten Presenter zwischen dem Objekt und irgendeinem Control
Delphi-Quellcode:
unit DataPresenter;

uses
  Data;

TDataPresenter = class abstract
  // Diese Methode soll aufgerufen werden, wenn Data sich ändert
  procedure DataChange( Sender : TObject ); virtual; abstract;
  property Data : TData;
end;
und konkret
Delphi-Quellcode:
unit MyControlDataPresenter;

uses
  DataPresenter,
  MyControl;

TMyControlDataPresenter = class( TDataPresenter )
  constructor Create( AControl : TMyControl );
  procedure DataChange( Sender : TObject ); override;
  property OnColor : TColor;
  property OffColor : TColor;
  property NilColor : TColor;
end;
P.S. Wenn du Spring4D im Einsatz hast, da gibt es Event<T> der einem einen MultiCast-Event auf die Schnelle hinzaubert

P.S.S. Im Anhang mal eine kleine Demo nach diesem Muster und der Präsentation in einem StringGrid
Angehängte Dateien
Dateityp: zip DataPresenter.zip (891,1 KB, 10x aufgerufen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (17. Jun 2013 um 21:36 Uhr)
  Mit Zitat antworten Zitat