2

FireMonkey 2 TGridで列ヘッダーのドラッグ(並べ替え)を防ぐ方法はありますか?

THeaderインスタンスはTGridクラス専用であり、これを制御する他のプロパティは見つかりません。THeaderItem.DragModeのデフォルトはdmAutomaticです(なんらかの理由で)。

新しいTGridの子孫を作成するか、THeaderをグリッドから切り離す以外に、DragModeをdmManualに戻す方法がわかりません。

4

1 に答える 1

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);
于 2013-02-14T14:34:53.637 に答える