2012-02-18 1 views
1

私はTGridをFMで使用しており、列のサイズを変更できますが、列を再構成することはできません(つまり、&列ヘッダーを移動します)。私は公開されたプロパティ( "Locked"、 "DragMode"、 "EnableDrag"など)の多くを変更しようとしましたが、何も効果がないようですか?Firemonkey Grid Control - 列移動を無効にします。しかし、列のサイジングを許可する

真のFM体験では、私はクラスをオーバーライドし、バックエンド構造で何かを変更する必要があるかもしれないと推測しています。何がどこにあるかはわかりません - これが実現可能であっても?

サンプルソースが賢明です。単純にTGridを追加し、いくつかの列を追加して実行するだけで問題が確認できます。

事前に感謝します。イアン

答えて

2
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; 
+0

ありがとうtz;それは治療を働かせます。よろしく、イアン。 – Ian

+0

こんにちはTz - ありがとうございました。しかし、私はTGridをどのように使っているのか、その周りに道があるのか​​疑問に思っていた。私はTGridをさまざまなシナリオで使用しているので、列を破棄して再追加します。私がすると、「抗力」が失われます。たとえば、2つの手動追加列を持つTGridがあります。次に、Grid1.ColumnByIndex(1).Destroyを使用します。 Grid1.ColumnByIndex(0).Destroy; Grid1.AddObject(TStringColumn.Create(Grid1))で2つの新しい列を再追加します。 - 今度は再びドラッグできますか? - これのまわりに道があるの? - Thx – Ian

+0

上記の問題(グリッドの削除/再作成の問題)は、列の破棄/再作成後にGrid上でStyleLookupがリセットされることを保証することで解決されましたか? - 明らかにいくつかの奇妙なFM(v1)ロジック...(; - > – Ian

関連する問題