Einzelnen Beitrag anzeigen

jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Wie DSharp in Community Edition 10.3 compilieren

  Alt 8. Mai 2019, 23:15
  • Stefan Glienke ist der Autor von DSharp und Spring4D
  • Stefan Glienke hat gesagt, dass er MVVM mit Delphi aufgegeben hat.
Was würdest du daraus schließen?
@Schokohase: ok, das war eine Info die ich nicht hatte, darum vielen Dank.

Die gute Nachricht für Leute, die die VST mit DSharp verwenden wollen, ist, dass laut dem Entwickler der TreeViewPresenter Teil noch weitergepflegt wird.

Ich habe im vorigen Beitrag geschrieben, dass das \dsharp\Samples\DelphiTage\TreeviewPresenter Beispiel in DSharp Branch "spring-1.2.1" nicht kompiliert. Dies ließ sich mit folgenden geringfügigen Änderungen nun in der Delphi Community Edition 10.3 kompilieren:

Main.pas:
Delphi-Quellcode:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DSharp.Windows.ColumnDefinitions, DSharp.Windows.CustomPresenter,
  DSharp.Windows.TreeViewPresenter, VirtualTrees, StdCtrls, ExtCtrls, ComCtrls,
  Grids, DSharp.Bindings.VCLControls, DSharp.Bindings;

type
  TForm7 = class(TForm)
    VirtualStringTree1: TVirtualStringTree;
    TreeViewPresenter1: TTreeViewPresenter;
    Panel1: TPanel;
    Edit1: TEdit;
    Panel2: TPanel;
    LabeledEdit1: TLabeledEdit;
    BindingGroup1: TBindingGroup;
    procedure FormCreate(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
    procedure FilterCustomer(Item: TObject; var Accepted: Boolean);
  public
    { Public declarations }
  end;

var
  Form7: TForm7;

implementation

{$R *.dfm}

uses
  Customer,
  Spring.Collections,
  DSharp.Core.XmlSerialization,
  DSharp.Core.XmlSerialization.XmlReader,
  DSharp.Core.XmlSerialization.XmlSerializer,
  Masks;

procedure TForm7.Edit1Change(Sender: TObject);
begin
  TreeViewPresenter1.ApplyFilter;
end;

procedure TForm7.FilterCustomer(Item: TObject; var Accepted: Boolean);
begin
  Accepted := Accepted and MatchesMask(TCustomer(Item).CompanyName, '*' + Edit1.Text + '*');
end;

procedure TForm7.FormCreate(Sender: TObject);
var
// list: IList;
  list: IObjectList;
  ser: IXmlSerializer;
  reader: IXmlReader;
begin
  // daten aus Xml lesen ...
  ser := TXmlSerializer.Create;
  reader := TXmlReader.Create('..\..\Customers.xml');
// Supports(ser.Deserialize(reader), IList, list);
  Supports(ser.Deserialize(reader), IObjectList, list);

  // ... und dem Presenter zuweisen
// TreeViewPresenter1.View.ItemsSource := list;
  TreeViewPresenter1.View.ItemsSource := list;

  // Filter hinzufügen
  TreeViewPresenter1.View.Filter.Add(FilterCustomer);

  // eigenes template zuweisen
  TreeViewPresenter1.View.ItemTemplate := TCustomerTemplate.Create;
end;

end.
Customer.pas:
Delphi-Quellcode:
unit Customer;

interface

uses
  Classes,
  Spring.Collections,
  Spring.Collections.Lists,
  DSharp.Core.DataTemplates,
  Rtti;

type
  TCustomer = class(TPersistent)
  private
    FCustomerId: string;
    FCompanyName: string;
    FContactName: string;
    FContactTitle: string;
    FAddress: string;
    FCity: string;
  published
    property CustomerId: string read FCustomerId write FCustomerId;
    property CompanyName: string read FCompanyName write FCompanyName;
    property ContactName: string read FContactName write FContactName;
    property ContactTitle: string read FContactTitle write FContactTitle;
    property Address: string read FAddress write FAddress;
    property City: string read FCity write FCity;
  end;

  TCustomers = class(TObjectList<TCustomer>);

  TCustomerTemplate = class(TDataTemplate)
  public
    function GetValue(const Item: TObject; const ColumnIndex: Integer): TValue; override;
    function GetTemplateDataClass: TClass; override;
  end;

implementation

{ TCustomerTemplate }

function TCustomerTemplate.GetTemplateDataClass: TClass;
begin
  Result := TCustomer;
end;

function TCustomerTemplate.GetValue(const Item: TObject;
  const ColumnIndex: Integer): TValue;
begin
  case ColumnIndex of
    -1, 0: Result := TCustomer(Item).CustomerId;
    1: Result := TCustomer(Item).CompanyName;
    2: Result := TCustomer(Item).ContactTitle + ' ' + TCustomer(Item).ContactName;
  end;
end;

initialization
  TCustomers.ClassName;

end.
lg,
jus

Geändert von jus ( 8. Mai 2019 um 23:19 Uhr)
  Mit Zitat antworten Zitat