Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   DSharp - Data bindings, MVVM und mehr für Delphi 2010 und höher (https://www.delphipraxis.net/164573-dsharp-data-bindings-mvvm-und-mehr-fuer-delphi-2010-und-hoeher.html)

Stevie 10. Jul 2012 17:05

AW: DSharp - Data bindings, MVVM und mehr für Delphi 2010 und höher
 
Danke für deinen Report.

Hier treffen leider 2 Bugs zusammen:
Der eine liegt in der ObjAuto.pas begründet. Dort wird nicht berücksichtigt, dass Int64 besonders behandelt wird.
Daran kann ich nicht sehr viel machen. Inzwischen werden schon genug Bugs durch Runtime Patching ausgebügelt.

Der zweite Bug liegt in meiner Implementierung ab XE2 (auch ich hab nicht auf die Int64 Sonderbehandlung unter x86 geachtet) und kommt ungeachtet des consts oder nicht. Dies werde ich sobald wie möglich beheben.

Soll heißen: Int64 und const wird nicht funktionieren, ohne const bis XE ja, ab XE2 (32-bit) nachdem ich es gefixt habe.

BlackSeven 11. Jul 2012 07:52

AW: DSharp - Data bindings, MVVM und mehr für Delphi 2010 und höher
 
Alles klar. Danke für die Info.

BlackSeven 9. Aug 2012 07:43

AW: DSharp - Data bindings, MVVM und mehr für Delphi 2010 und höher
 
Um nochmals auf DSharp und speziell auf MVVM zurückzukommen, werfe ich mal folgende Frage in den Raum:

Auf einer Form befindet sich eine Paintbox und ich möchte auf die "OnPaint" sowie "OnMouseMove" Ereignisse reagieren bzw. auf das Canvas zugreifen.
Löse ich das über einen speziellen "Presenter" oder wie ist dabei die beste Herangehensweise?

BlackSeven 16. Aug 2012 08:26

AW: DSharp - Data bindings, MVVM und mehr für Delphi 2010 und höher
 
Ich schätze mal, für die Behandlung von Events müssen in DSharp "Commands" implementiert werden.
Oder sehe ich das falsch?

BlackSeven 6. Okt 2012 21:56

AW: DSharp - Data bindings, MVVM und mehr für Delphi 2010 und höher
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Stefan,

folgender, unter DXE2 (Zielplatform: Win64) kompilierter Code löst eine Exception aus:
First chance exception at $0000000000686EE1. Exception class $C0000005 with message 'c0000005 ACCESS_VIOLATION'. Process Project1.exe

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private

    FClick: TNotifyEvent;

    function GetClick: TNotifyEvent;
    procedure SetClick(const AValue: TNotifyEvent);

  public

    property Click: TNotifyEvent read GetClick write SetClick;

  end;

var
  Form1: TForm1;

implementation

uses

  DSharp.Bindings;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

  TBinding.Create(Button1, 'OnClick', Self, 'Click');

end;

function TForm1.GetClick: TNotifyEvent;
begin

  Result := FClick;

end;

procedure TForm1.SetClick(const AValue: TNotifyEvent);
begin

  FClick := AValue;

end;

end.

Der Fehler tritt in der Unit "DSharp.Core.Expressions" auf:

Delphi-Quellcode:
procedure TPropertyExpression.SetValue(const Value: TValue);
var

...

begin

...

  if FIndex = -1 then
  begin
   
    if LProperty.IsWritable then
    begin
      LProperty.SetValue(LInstance.AsPointer, LValue); <--- hier
    end;

  end

...
System.Rtti.Invoke -> RawInvoke(CodeAddress, @block);

Stevie 31. Okt 2012 10:14

AW: DSharp - Data bindings, MVVM und mehr für Delphi 2010 und höher
 
Kurze Rückmeldung zu diesem Bug.

Mal wieder ein Fehler in Delphi - dort werden unter x64 bei Methodenaufrufen Parameter vom Typ tkMethod falsch behandelt (auch in XE3 noch existent).

Auch ohne DSharp nachstellbar:

Delphi-Quellcode:
var
  ctx: TRttiContext;
begin
  ctx.GetType(TForm1).GetMethod('SetClick').Invoke(Self, [TValue.From<TNotifyEvent>(Button1Click)]);
end
Mal sehen, ob ich das patchen kann.

Codewalker 21. Jan 2013 17:31

AW: DSharp - Data bindings, MVVM und mehr für Delphi 2010 und höher
 
@Stevie: Gibt es irgendwo ein Tutorial bzw. eine Übersicht was du alles eingebaut hast und was so alles geht? Ich nutze (bisher) wahrscheinlich nur 0,1% (eigentlich nur IEvent<T>) von DSharp

Jens01 21. Jan 2013 19:30

AW: DSharp - Data bindings, MVVM und mehr für Delphi 2010 und höher
 
Zitat:

Zitat von Codewalker (Beitrag 1199999)
@Stevie: Gibt es irgendwo ein Tutorial bzw. eine Übersicht was du alles eingebaut hast und was so alles geht? Ich nutze (bisher) wahrscheinlich nur 0,1% (eigentlich nur IEvent<T>) von DSharp

Guck einfach mal die Samples durch.

Marco Erdmann 28. Feb 2013 12:26

AW: DSharp - Data bindings, MVVM und mehr für Delphi 2010 und höher
 
Hallo Zusammen,

ich bin neu in diesem Forum und mache gerade meine ersten Gehversuche mit DSharp. Ich habe versucht das VirtualTree-Beispiel mit dem QuantumGrid von DevExpress nachzubauen und bin dabei auf ein Problem gestoßen: Die Spalten-Captions im Grid werden noch korrekt gesetzt, aber die Zeilen werden niemals angezeigt, obwohl die Anzahl Zeilen durchaus richtig abgefragt wird. Ich vermute, dass ich noch einen Fehler im Template habe. Die Delphi-Version ist XE3 Update 2 und das Grid ist ein TcxGridTableView.

Die Klasse in meiner IList sieht so aus:
Delphi-Quellcode:
 
TEmployee = class(TPersistent)
  private
    FFirstName: string;
    FID: Integer;
    FName: string;
  public
    constructor Create(AID: Integer; const AName, AFirstName: string);
    property FirstName: string read FFirstName write FFirstName;
    property ID: Integer read FID write FID;
    property Name: string read FName write FName;
  end;
Das TDataTemplate sieht dann foglendermaßen aus:
Delphi-Quellcode:
 
TEmployeeTemplate = class(TDataTemplate)
  public
    function GetValue(const Item: TObject; const ColumnIndex: Integer): TValue; override;
    function GetTemplateDataClass: TClass; override;
  end;
Delphi-Quellcode:
function TEmployeeTemplate.GetTemplateDataClass: TClass;
begin
  Result := TEmployee;
end;

function TEmployeeTemplate.GetValue(const Item: TObject; const ColumnIndex: Integer): TValue;
begin
  case ColumnIndex of
    (-1), 0: Result := TEmployee(Item).ID;
    1: Result := TEmployee(Item).Name;
    2: Result := TEmployee(Item).FirstName;
  end;
end;
Ich bin noch nicht soweit in den Code eingestiegen, um genau zu verstehen, an welcher Stelle die Sache schiefgeht. Muss ich eventuell weitere virtuelle Methoden von TDataTemplate überschreiben? Ein Fingerzeig in die richtige Richtung wäre sehr nett.

Vielen Dank schonmal.

Stevie 28. Feb 2013 15:04

AW: DSharp - Data bindings, MVVM und mehr für Delphi 2010 und höher
 
Hallo Marco,

ich denke, der Fallstrick wird gewesen sein, dass du das ItemTemplate direkt zugewiesen und somit das built-in DataTemplate überschrieben hast.
Dieses wird bei einem Presenter immer erstellt und beinhaltet die Standardimplementierungen für z.B. GetItemCount und GetItem.

Du musst somit die RegisterDataTemplate Methode nutzen, um dein Template für TEmployee dort zu nutzen:

Delphi-Quellcode:

GridViewPresenter1.View.ItemTemplate.RegisterDataTemplate(TEmployeeTemplate.Create);
Über diese Funktionalität kannst du unterschiedliche Templates in einem Presenter benutzen (wenn du z.B. eine Liste mit unterschiedlichen Klassen oder eine Hierarchie hast)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:51 Uhr.
Seite 4 von 5   « Erste     234 5      

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