2015-01-14 8 views
0

저는 Delphi XE5를 사용 중이며 각 셀의 내용을 기반으로 TGrid를 포맷하려고합니다. 숫자의 경우 빨간색 글꼴로 표시된 네거티브가있는 셀에서 오른쪽 정렬됩니다. 다른 모든 데이터는 셀에서 왼쪽 정렬되어야합니다. 다음 코드는 그리드를 위 또는 아래로 스크롤 할 때 색상/정렬이 잘못되어이 경우를 제외하고는이 코드를 사용합니다.Firemonkey XE5 서식이 지정된 셀을 사용하는 TGrid 스크롤 문제

type 
    TMyColumn = class(TStringColumn) 
end; 

procedure TForm1.Grid1GetValue(Sender: TObject; const Col, Row: Integer; 
    var Value: TValue); 
var 
    vMyCell : TStyledControl; 
    i : Integer; 
    s : String; 
begin 

    s := gHoldingGrid.Cells[ Col, Row ]; 

    vMyCell := TMyColumn(Grid1.Columns[ Col ]).CellControlByRow(Row); 

    if ((vMyCell <> nil) AND (vMyCell is TTextCell)) 
    then begin 
    TTextCell(vMyCell).StyledSettings := []; 

    if TryStrToInt(s, i) 
    then begin 
     if StrToInt(s) < 0 
     then TTextCell(vMyCell).FontColor := claRed 
     else TTextCell(vMyCell).FontColor := claBlue; 

     TTextCell(vMyCell).TextAlign := TTextAlign.taTrailing; 
    end { if TryStrToInt(s, i) } 
    else begin 
     TTextCell(vMyCell).TextAlign := TTextAlign.taLeading; 
     TTextCell(vMyCell).FontColor := claGreen; 
    end; { else .... if TryStrToInt(s, i) } 

    vMyCell.ApplyStyleLookup; 
    end; { if ((vMyCell <> nil) AND (vMyCell is TTextCell)) } 

    Value := s; 

end; 

이 문제를 해결할 수있는 사람이 있습니까? 나는이 포럼에서 수많은 예제를 시도했지만 제대로 작동하지 못했고 정말로 잘 붙어있었습니다.

많은 감사를드립니다.

답변

0

FireMonkey 그리드를 스크롤하면 셀이 재활용됩니다. 새 값은 SetData 메서드를 통해 셀로 전달됩니다. 따라서 SetData를 재정의하여 서식을 적용하는 셀로 사용할 사용자 지정 구성 요소가 필요합니다.

따라서 TTextCell (자체는 TEdit 만 하위 클래스)의 하위 클래스를 만들어야하고 새 클래스의 셀을 만드는 새 열 클래스가 필요합니다.

이해할 때보 다 훨씬 간단합니다. 나는 http://monkeystyler.com/guide/Formatting-a-Column-as-Currency에보기를 가진 기사가 있고 거기에서 당신에게 사용의 다른 기사가 연결될있다.

+0

감사합니다. Mike. 나는 그 코드로 올바른 방향으로 가고 있다고 생각했지만 그렇지 않은 것 같습니다! –