【问题标题】:Firemonkey Grid Control - Disable column move; yet allow column sizingFiremonkey Grid Control - 禁用列移动;但允许列大小
【发布时间】:2023-03-25 09:40:01
【问题描述】:

我在 FM 中使用 TGrid 并希望用户能够调整列的大小,但不能重新组织列(即拖动和移动列标题)。我已尝试更改许多公开的属性(“Locked”、“DragMode”、“EnableDrag”等...) - 但似乎没有任何效果?

在真正的 FM 体验中;我猜我可能必须重写该类并在后端结构上进行一些更改;但我不确定什么/在哪里 - 或者即使这是可行的?

样本来源明智;如果您只是添加一个 TGrid,添加几列并运行,您就会看到问题。

提前非常感谢。伊恩。

【问题讨论】:

    标签: delphi grid delphi-xe2 firemonkey


    【解决方案1】:
    type
      TCustomGridHelper = class helper for TCustomGrid
      public
        /// <summary>
        /// Publish private FHeader from FMX.Grid.TCustomGrid.
        /// </summary>
        function _GetHeader: THeader;
      end;
    
    function TCustomGridHelper._GetHeader: THeader;
    begin
      Result := Self.FHeader;
    end;
    
    procedure TForm1.Grid1ApplyStyleLookup(Sender: TObject);
    var
      I: Integer;
      Header: THeader;
      HeaderItem: THeaderItem;
    begin
      Header := Grid1._GetHeader;
      for I := 0 to Header.ChildrenCount - 1 do
      begin
        HeaderItem := Header.Children[I] as THeaderItem;
        HeaderItem.DragMode := TDragMode.dmManual;
      end;
    end;
    

    【讨论】:

    • 嗨 Tz - 再次感谢;但我注意到一个小问题,最可能取决于我如何使用 TGrid,并想知道是否有办法解决它?我将 TGrid 用于许多不同的场景,因此我销毁列并重新添加它们。当我这样做时,“阻力预防”就会丢失。例如,我有一个带有 2 个手动添加列的 TGrid。然后我使用 Grid1.ColumnByIndex(1).Destroy; Grid1.ColumnByIndex(0).Destroy; 并使用 Grid1.AddObject(TStringColumn.Create(Grid1)) 重新添加 2 个新列; ——这次还能再拖吗? - 有没有办法解决这个问题? - 谢谢
    • 通过确保在销毁/重新创建列后在网格上重置 StyleLookup 解决了上述问题(删除/重新创建网格元素)? - 显然有些奇怪的 FM (v1) 逻辑... (;->
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 2023-02-10
    • 2020-11-13
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多