2014年9月25日 星期四

Firemonkey how to enable anti-aliasing

In Rad Studio XE2~XE7 canvas anti-aliasing seems to disable by default, while use controls have special shapes will case shape control has its border toothed like this one:



Set form property like Form1.Quality:= HighQuality can turn on anti-aliasing , the result UI will like this:



In some situation , this may now work properly , we need to add more code on Form Event : 

onCreate :


preocdure TForm1.onCreate(Sendor: TObject);

begin
Form1.RecreateCanvas;
Form1.Invalidate;
end; 


Firemonkey Drag and Drop problem when control is placed on layout

In Rad Studio XE5~XE7 when place control on TLayout component , the drag and drop functionality is not work properly . Someone have fix this problem by re-writing FMX.Forms.pas (Link) , I have tried and sure this is working for XE5~XE7.

the following fixed code is from here  (Link

...
function TCommonCustomForm.FindTarget(P: TPointF; const Data: TDragObject): IControl;
var
  i: Integer;
  NewObj: IControl;
begin
  Result := nil;
  for i := 0 to ChildrenCount - 1 do
    // add an exception for layouts
if Supports(Children[i], IControl, NewObj) and NewObj.Visible and (NewObj.HitTest or (NewObj is TLayout)) then
    begin
      NewObj := NewObj.FindTarget(P, Data);


      if Assigned(NewObj) then
        Exit(NewObj);
    end;
end
...
PS. you need to include FMX.Layouts in  FMX.Forms.pas like this:
...
implementation

uses
  System.Variants,
  System.Generics.Defaults,
  System.RTLConsts,
  System.Rtti, System.Actions,
  System.Math.Vectors,
  FMX.Consts,
  FMX.Dialogs,
  // fix drag and drop buf in tlayout , see "FindTarget"
  FMX.Layouts,
  FMX.Platform, FMX.Menus,
  FMX.TextLayout.GPU,
  FMX.Filter, FMX.Materials, FMX.Text,
  FMX.Gestures;
...

2014年4月8日 星期二

Make OSX App run without a dock icon

in IDE menu bar , select Project -> Options... -> Version Info

add new key and value => NSBGOnly  , 1



That's all, compile your firemonkey app and run it , result like this:




If hide this app by calling form1.hide, it will be hard to find the gui for this app,
so you need to implement menu item like windows system tray icon, something like this one,




2014年3月30日 星期日

XE5 Firemonkey bug fix for key value in KeyUp/KeyDown event always 0

In XE5 Firemonkey windows/MacOS application, general key value in Keydown/Up event will always get 0

code:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
    Memo1.Lines.Add('down : '+IntToHex(Key,2));
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
    Memo1.Lines.Add('up : '+IntToHex(Key,2));
end;


result:
in Windows
in MacOS


After tracing source code, I fix this problem by replace one line in FMX.Platform.Win.pas,
and work fine:

in Windows
in Macos

the solution is easy, just put FMX.Platform.Win.pas/FMX.Platform.Mac.pas which I fixed inside project folder

example & source code:
code download XE5
code download XE7
code download XE8