如何防止在Firemonkey网格上拖动列?

时间:2013-01-11 06:36:47

标签: delphi delphi-xe3 firemonkey-fm2

有没有办法阻止FireMonkey 2 TGrid上的列标题拖动(重新排序)?

THeader实例对TGrid类是私有的,我找不到任何其他控制它的属性。 THeaderItem.DragMode的默认值是dmAutomatic(出于一些不可思议的原因)。

如果没有创建新的TGrid后代,或者将THeader从网格中断开,我就看不到如何将DragMode恢复为dmManual。

1 个答案:

答案 0 :(得分:1)

您可以使用RTTI访问FHeader私有字段,从这里您可以编写一个方法来设置标题的DragMode。

试试此代码

procedure SetHeaderDragMode(Grid : TGrid; DragMode:TDragMode);
Var
  LCtx  : TRttiContext;
  LType : TRttiType;
  LField: TRttiField;
  LHeader: FMX.Grid.THeader;
  i : Integer;
begin
  LCtx:=TRttiContext.Create;
  LType:=LCtx.FindType('FMX.Grid.TGrid');
  if (LType<>nil) then
   LField:=  LType.GetField('FHeader');

  if (LField<>nil) then
  begin
    LHeader:=THeader(LField.GetValue(Grid).AsObject);
    if LHeader<>nil then
      for i:=0 to  LHeader.Count-1 do
        LHeader.Items[i].DragMode:=DragMode;
  end;
end;

并使用如此

 SetHeaderDragMode(Grid1,TDragMode.dmManual);