AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DSharp, DevExpress Editors, Bindings

Ein Thema von mytbo · begonnen am 23. Aug 2019 · letzter Beitrag vom 10. Sep 2019
Antwort Antwort
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#1

DSharp, DevExpress Editors, Bindings

  Alt 23. Aug 2019, 16:20
Hallo!

Nachdem ich mich einige Tage mit den Delphi LiveBindings herumgeärgert habe, mache ich gerade meine ersten Schritte mit DSharp Bindings.

Die Presenter für DevExpress GridView und TreeList habe ich gefunden. Eine Ableitung der DevExpress Editors die das
INotifyPropertyChanged Interface implementieren noch nicht.

Gibt es eine Unit mit dem Subclassing der DevExpress Editors schon?
Wenn ja, wo finde ich sie? Wenn nein, hat sie schon jemand geschrieben und stellt sie zur Verfügung?

Bis bald...
Thomas
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#2

AW: DSharp, DevExpress Editors, Bindings

  Alt 9. Sep 2019, 13:24
Hallo!

Aufgrund des fehlenden Feedbacks stellen sich mir folgende Fragen:
1) Gibt es Nutzer, die die DSharp Bindings aktuell im Produktivbetrieb einsetzen?
2) Kann man mit gutem Gewissen den produktiven Einsatz für neue Anwendungen erwägen?

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: DSharp, DevExpress Editors, Bindings

  Alt 9. Sep 2019, 14:03
Gibt es Nutzer, die die DSharp Bindings aktuell im Produktivbetrieb einsetzen?
Ja

Kann man mit gutem Gewissen den produktiven Einsatz für neue Anwendungen erwägen?
Kommt auf deine Anforderungen an - gibt ja Leute die Closed Source, wo man für Bugfixes Monate warten und bezahlen muss, besser finden, als Open Source

Gibt es eine Unit mit dem Subclassing der DevExpress Editors schon?
Bei uns im Source ja, daher kann ich dir die nicht bereitstellen, aber wie du z.B. in DSharp.Bindings.VCLControls sehen kannst, ist das ja denkbar einfach zu implementieren.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#4

AW: DSharp, DevExpress Editors, Bindings

  Alt 10. Sep 2019, 12:11
Hallo!

Vielen Dank für deine schnelle Anwort.

Ist schon mal beruhigend, wenn der Entwickler seine eigenen Komponenten verwendet.

Ich habe vor ca. 15 Jahren meine eigene Objekt-Binding für die DevExpress Editors geschrieben. Dazu wurde eine Ableitung von TcxEditDataBinding mit Anbindung an das Datenobjekt und einer Eigenschaft geschrieben. Die Bindung sah dann so aus:

edtNachname: TcxTITextEdit; // <- TcxTextEdit
edtNachname.DataBinding.LinkToData(DataBuffer, 'Nachname');

Für die DSharp Bindings habe ich zu Testzwecken einige Anbindungen für die DevExpress Editors geschrieben (eng angelehnt an die der VCL-Controls). Hat auch sofort funktioniert.

Trotzdem würde es mir helfen, wenn du z.B. eure Anbindung für das TcxTextEdit veröffentlichen könntest. Es bleiben für mich einige Fragen offen. Zum Beispiel: Funktioniert eure Bindung einfach über die Eigenschaft "Text" (so habe ich es in meinem ersten Test gelöst) oder den erweiterten DevExpress Ansatz "EditValue". Dann wäre es aber nicht so einfach.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: DSharp, DevExpress Editors, Bindings

  Alt 10. Sep 2019, 12:18
Delphi-Quellcode:
type
  TcxTextEdit = class(cxTextEdit.TcxTextEdit, INotifyPropertyChanged)
  private
    FNotifyPropertyChanged: TNotifyPropertyChanged;
    property NotifyPropertyChanged: TNotifyPropertyChanged
      read FNotifyPropertyChanged implements INotifyPropertyChanged;
    procedure WMChar(var Message: TWMChar); message WM_CHAR;
  protected
    procedure DoTextChanged; override;
    procedure CMExit(var Message: TCMExit); message CM_EXIT;
  public
    constructor Create(AOwner: TComponent); override;
  end;

procedure TcxTextEdit.CMExit(var Message: TCMExit);
begin
  try
    FNotifyPropertyChanged.NotifyOfPropertyChange('Text', utLostFocus);
    inherited;
  except
    on EValidationError do
    begin
      SetFocus;
    end;
  end;
end;

constructor TcxTextEdit.Create(AOwner: TComponent);
begin
  inherited;
  FNotifyPropertyChanged := TNotifyPropertyChanged.Create(Self);
end;

procedure TcxTextEdit.DoTextChanged;
begin
  inherited;
  FNotifyPropertyChanged.NotifyOfPropertyChange('Text');
end;

procedure TcxTextEdit.WMChar(var Message: TWMChar);
begin
  inherited;
  if Message.CharCode = VK_RETURN then
  begin
    FNotifyPropertyChanged.NotifyOfPropertyChange('Text', utExplicit);
  end;
end;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#6

AW: DSharp, DevExpress Editors, Bindings

  Alt 10. Sep 2019, 14:55
Hallo!

Danke für den Quellcode.

Beruhigend! Eine Eins-zu-eins-Umsetzung wie in meinem Testbeispiel. Wenn sich alle DevExpress Editors so eng an ihr VCL-Pendant anlehnen und keine Fallstricke lauern, ist die Umsetzung wirklich kein Problem. Nochmals vielen Dank für DSharp.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#7

AW: DSharp, DevExpress Editors, Bindings

  Alt 10. Sep 2019, 19:46
Hallo!

Noch eine Frage zur Source-Kosmetik. Spricht etwas dagegen, in der SubKlasse gleich folgendes zu schreiben:
Code:
public
  function AddBinding(pmSourceObject: TObject;
    const pmcSourcePropertyName: String; pmBindingGroup: TBindingGroup = Nil): TBinding;

function TcxTextEdit.AddBinding(pmSourceObject: TObject;
  const pmcSourcePropertyName: String; pmBindingGroup: TBindingGroup): TBinding;
begin
  Assert(pmSourceObject <> Nil);
  Assert(pmcSourcePropertyName <> '');

  if pmBindingGroup = Nil then
    pmBindingGroup := FindBindingGroup(Self.Owner);

  if pmBindingGroup <> Nil then
    Result := pmBindingGroup.AddBinding(pmSourceObject, pmcSourcePropertyName, Self, TEXTEDIT_BINDING_PROPNAME, bmTwoWay)
  else
    Result := TBinding.Create(pmSourceObject, pmcSourcePropertyName, Self, TEXTEDIT_BINDING_PROPNAME);
end;
Dann reicht im Form z.B.: edtVorname.AddBinding(SourceObject, 'Vorname');

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz