Mit Hilfe von DSharp kann man von TComponent abgeleitete Klassen sehr einfach um Properties erweitern:
Delphi-Quellcode:
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.
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.