2013-01-11 2 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); 
처럼 사용