Hallo,
da ich während meiner Entwicklung unter Firemonkey über einige Bugs gestolpert bin, die man teilweise recht einfach umgehend kann, möchte ich hier immer mal wieder einige Workarounds reinschreiben. Vielleicht klinkt sich ja der eine oder andere an. Und vielleicht geschieht ja ein Wunder und jemand von Embar liest mit ...
Betrifft alles XE2, aktuell Hotfix 4
- OpenDialog ist unter Windows nicht Modal
Delphi-Quellcode:
Uses {$IFDEF MSWINDOWS}Winapi.Windows, FMX.
Platform.Win,
{$ENDIF}
{$IFDEF MSWINDOWS} Try EnableWindow(FmxHandleToHWND(Self.Handle), False);
Except End;
{$ENDIF}
Try
OpenDialog.Execute;
....
Finally
{$IFDEF MSWINDOWS}
SetActiveWindow(FmxHandleToHWND(Self.Handle));
EnableWindow(FmxHandleToHWND(Self.Handle), True);
{$ENDIF}
End;
- TTreeview: "Accept" in OnDragOver wird ignoriert
FMX.TreeView.pas und
FMX.Defines.inc ins Projektverzeichnis kopieren, damit das Projekt immer die lokale verwendet.
FMX.TreeView.pas öffnen und zu
TCustomTreeView.DragOver springen. Dort den Anfang wie folgt auswechseln:
Delphi-Quellcode:
procedure TCustomTreeView.DragOver(const Data: TDragObject; const Point: TPointF;
var Accept: Boolean);
var
Obj: TTreeViewItem;
begin
// Änderungen
// inherited;
inherited DragOver(Data, Point, Accept);
if assigned(OnDragOver) then exit;
// ...
- TListbox: "Accept" in OnDragOver wird ignoriert, D&D funktioniert nicht
FMX.Listbox.pas und
FMX.Defines.inc ins Projektverzeichnis kopieren, damit das Projekt immer die lokale verwendet.
FMX.Listbox.pas öffnen und zu
TCustomListBox.DragOver springen. Dort den Anfang wie folgt auswechseln:
Delphi-Quellcode:
procedure TCustomListBox.DragOver(const Data: TDragObject; const Point: TPointF; var Accept: Boolean);
var
Obj: TListBoxItem;
begin
// Änderungen
// inherited;
inherited DragOver(Data, Point, Accept);
if assigned(OnDragOver) then exit;
// ...
- Open-/Savedialog: Der Dialog wird unter Mac OS nicht geöffnet, Execute liefert false zurück
Unter MacOS muss der Filter leer sein. Den Dialog daher wie folgt öffnen
Delphi-Quellcode:
{$IFDEF MACOS} Try OpenDlg.Filter := ''; Except End; {$ENDIF} // Geht unter Mac nicht
OpenDlg.Execute;
...
- TDropTarget: "Accept" wird in OnDragOver nicht akzeptiert
FMX.ExtCtrls und
FMX.Defines.inc ins Projektverzeichnis kopieren, damit das Projekt immer die lokale verwendet.
FMX.ExtCtrls öffnen und zu
TDropTarget.DragOver springen. Dort den Anfang wie folgt auswechseln:
Delphi-Quellcode:
procedure TDropTarget.DragOver(const Data: TDragObject; const Point: TPointF;
var Accept: Boolean);
begin
// Änderungen
// inherited;
inherited DragOver(Data, Point, Accept);
// ...
- THeader: Werden HeaderItems hinzugefügt, ist die .FMX Datei anschließend defekt
Beim laden der Datei kam es zum Meldung "Ungültige Eigenschaft Headeritem1.Width, außerdem sind plötzlich andere Komponenten auf der Form verschwunden.
Einzig mir bekannter Workaround: THeaderItem dynamisch erzeugen:
Delphi-Quellcode:
TMainForm = class(TForm)
...
privat
HeaderItem1: THeaderItem;
HeaderItem2: THeaderItem;
...
public
...
In OnCreate dann:
Delphi-Quellcode:
HeaderItem1 := THeaderItem.Create(nil);
HeaderItem1.Parent := Header1;
HeaderItem1.Width := 50;
HeaderItem1.Text :='HeaderItem1';
Header1.AddObject(HeaderItem1);
HeaderItem2 := THeaderItem.Create(nil);
HeaderItem2.Parent := Header1;
HeaderItem2.Width := 50;
HeaderItem2.Text :='HeaderItem2';
Header1.AddObject(HeaderItem1);