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

标签 delphi delphi-xe3 firemonkey-fm2

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

THeader 实例是 TGrid 类私有(private)的,我找不到任何其他属性来控制它。 THeaderItem.DragMode 的默认值是 dmAutomatic (出于某种难以理解的原因)。

如果没有创建新的 TGrid 后代,或者将 THeader 脱离网格,我看不到如何将 DragMode 返回到 dmManual。

最佳答案

您可以使用 RTTI 访问 FHeader 私有(private)字段,并且从这里您可以编写一个方法来设置 headers 的 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);

关于delphi - 如何防止在 Firemonkey 网格上拖动列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14272984/

相关文章:

delphi - 如何在 Delphi XE3 中将 String 转换为 LongInt?

delphi - 使用 Vcl 样式时更改 TActionMainMenuBar 的字体

windows - 如何从任务栏(XE4)隐藏 firemonkey 应用程序按钮?

delphi - 将 float 格式化为###.##(两位小数)

delphi - 构建服务器: Best practices managing third party components?

windows - 如何使用特定本地时间运行 Delphi Win32 应用程序?

delphi - firemonkey 和全局热键?

delphi - TImageviewer最大尺寸

delphi - 如何有条件地将属性保存到DFM或不保存?

delphi - 动态让 indy 使用 TLSv1.2