![]() |
AW: class helper
Mit Hilfe von DSharp kann man von TComponent abgeleitete Klassen sehr einfach um Properties erweitern:
Delphi-Quellcode:
Dahinter steckt nicht viel mehr als ein Dictionary, in dem die Werte für die Instanzen gespeichert werden, inklusive FreeNotification, um die Werte für freigegebene Instanzen zu löschen.
unit ListBoxExtension;
interface uses DSharp.Core.DependencyProperty, StdCtrls; type TListBoxHelper = class helper for TListBox private class var FTestProperty: TDependencyProperty; class function GetTestProperty: TDependencyProperty; static; function GetTest: string; procedure SetTest(const Value: string); protected class property TestProperty: TDependencyProperty read GetTestProperty; public property Test: string read GetTest write SetTest; end; implementation { TListBoxHelper } function TListBoxHelper.GetTest: string; begin Result := TestProperty.GetValue(Self).AsString; end; class function TListBoxHelper.GetTestProperty: TDependencyProperty; begin if not Assigned(FTestProperty) then FTestProperty := TDependencyProperty.RegisterAttached('Test', TypeInfo(string), TListBox); Result := FTestProperty; end; procedure TListBoxHelper.SetTest(const Value: string); begin TestProperty.SetValue(Self, Value); end; end. |
AW: class helper
Zitat:
|
AW: class helper
Zitat:
|
AW: class helper
Hinweis: Der letzte Beitrag in diesem Thema ist älter als ein halbes Jahr.
Ich erlaube mir, trotzdem zu schreiben. Falls das nicht ok bist, einfach löschen :-) Ich sehe die Problematik, dass Instanzvariablen "angeblich" nicht erlaubt sind, nicht: Was hält mich denn davon ab, eine
Delphi-Quellcode:
-Klassenvariable zu deklarieren, die als Schlüssel eben die Instanz selbst hält?
TDictionary
Konkretes Beispiel: Ein TButtonHelper soll mir ermöglichen, dass jeder Button weiß, wann er das letzte mal geklickt worden ist:
Delphi-Quellcode:
In meiner Anwendung kann ich nun problemlos sagen
TButtonHelper = class helper for TButton
private class var lastPressedDictionary: TDictionary<TButton, TDateTime>; [...] property lastClicked: TDateTime read GetlastClicked write SetlastClicked; end;
Delphi-Quellcode:
. Natürlich ist das etwas aufwändiger als die Möglichkeit, einfache Instanzvariablen in einer Helper-Klasse zu haben, aber das beste, was ich kenne.
Button99.lastClicked := Now(); Button123.lastClicked := Yesterday();
In der Praxis habe ich bei VCL-Komponenten natürlich noch eine Art "enable/disableHelperFunctionality()" da man das TDictionary ja auch wieder abbauen sollte... |
AW: class helper
Zitat:
|
AW: class helper
Zitat:
Delphi-Quellcode:
aus DSharp zu machen.
TDependencyProperty
Gruß, Sven |
AW: class helper
Elaborieren Sie.
|
AW: class helper
Zitat:
|
AW: class helper
Zitat:
Zitat:
Delphi-Quellcode:
ableiten (wegen
TComponent
Delphi-Quellcode:
).
FreeNotification
Gruß, Sven |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:19 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