Zur Zeit gibt es leider noch keine Anpassung von DSharp an Spring4D Version 2. Ich verwende intensiv Bindungs und Presenter. Beides sind Perlen. Perlen muss man polieren, dass sie ihren ganz besonderen Glanz behalten.
Weis jemand ob es ein Update für DSharp geben wird?
Ich habe das DSharp/Bindings/SpinEdit Beispiel mal kurz an Spring4D Version 2 angepasst. Mit folgenden Änderungen im Control Binding ist es sofort gelaufen. Ist das der präferierte Weg für die Anpassung an Spring4D Version 2?
Delphi-Quellcode:
type
TSpinEdit = class(Spin.TSpinEdit, INotifyPropertyChanged)
strict private
FOnPropertyChanged: TPropertyChangedEventImpl;
protected
function GetOnPropertyChanged: IEvent<TPropertyChangedEvent>;
procedure DoPropertyChanged(const pmcPropertyName: String; pmUpdateTrigger: TUpdateTrigger);
protected
procedure Change; override;
procedure CMExit(var pmvMessage: TCMExit); message CM_EXIT;
public
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
published
property Value: Integer
read GetValue write SetValue;
end;
procedure TSpinEdit.AfterConstruction;
begin
inherited AfterConstruction;
FOnPropertyChanged := TPropertyChangedEventImpl.Create;
FOnPropertyChanged._AddRef;
end;
procedure TSpinEdit.BeforeDestruction;
begin
FOnPropertyChanged._Release;
FOnPropertyChanged := Nil;
inherited BeforeDestruction;
end;
function TSpinEdit.GetOnPropertyChanged: IEvent<TPropertyChangedEvent>;
begin
Result := FOnPropertyChanged;
end;
procedure TSpinEdit.DoPropertyChanged(const pmcPropertyName: String; pmUpdateTrigger: TUpdateTrigger);
begin
if FOnPropertyChanged = Nil then Exit; //=>
if FOnPropertyChanged.CanInvoke then
FOnPropertyChanged.Invoke(Self, TPropertyChangedEventArgsEx.Create(pmcPropertyName, pmUpdateTrigger) as IPropertyChangedEventArgs);
end;
procedure TSpinEdit.Change;
begin
inherited;
DoPropertyChanged('Text', utPropertyChanged);
DoPropertyChanged('Value', utPropertyChanged);
end;
procedure TSpinEdit.CMExit(var pmvMessage: TCMExit);
begin
SetValue(GetValue);
inherited;
DoPropertyChanged('Text', utLostFocus);
DoPropertyChanged('Value', utLostFocus);
end;
Bis bald...
Thomas