2013-01-11 50 views
2

有沒有辦法阻止FireMonkey 2 TGrid上的列標題拖拽(重新排序)?如何防止在Firemonkey網格上拖動列?

THeader實例對於TGrid類是私有的,我找不到任何其他控制此屬性的屬性。 THeaderItem.DragMode的默認值是dmAutomatic(出於某些不可理解的原因)。

創建一個新的TGrid後代或將THeader從網格劃分出來的缺點,我看不出如何讓DragMode回到dmManual。

回答

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);