2014年9月25日 星期四

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;
...

沒有留言:

張貼留言