![]() |
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. |
AW: DSharp - Data bindings, MVVM und mehr für Delphi 2010 und höher
Alles klar. Danke für die Info.
|
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? |
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? |
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:
System.Rtti.Invoke -> RawInvoke(CodeAddress, @block);
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 ... |
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:
Mal sehen, ob ich das patchen kann.
var
ctx: TRttiContext; begin ctx.GetType(TForm1).GetMethod('SetClick').Invoke(Self, [TValue.From<TNotifyEvent>(Button1Click)]); end |
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
|
AW: DSharp - Data bindings, MVVM und mehr für Delphi 2010 und höher
Zitat:
|
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:
Das TDataTemplate sieht dann foglendermaßen aus: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;
Delphi-Quellcode:
TEmployeeTemplate = class(TDataTemplate) public function GetValue(const Item: TObject; const ColumnIndex: Integer): TValue; override; function GetTemplateDataClass: TClass; override; end;
Delphi-Quellcode:
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.
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; Vielen Dank schonmal. |
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:
Ü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)GridViewPresenter1.View.ItemTemplate.RegisterDataTemplate(TEmployeeTemplate.Create); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz