簡體   English   中英

使用格式化單元格的Firemonkey XE5 TGrid滾動問題

[英]Firemonkey XE5 TGrid scrolling issue using formatted cells

我正在使用Delphi 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;

有人可以幫我解決這個問題嗎? 我在該論壇上嘗試了許多示例,但無法使它們正常工作,並且運行良好且確實存在問題。

非常感謝您的期待。

滾動FireMonkey網格時,單元將被回收。 新值通過SetData方法傳遞到單元格中。 因此,您需要一個自定義組件用作單元,該單元將覆蓋SetData以應用格式。

因此,您需要將TTextCell子類化(它本身只是TEdit的子類),還需要一個新的列類來創建新類的單元格。

這比您理解時聽起來要簡單得多。 我在http://monkeystyler.com/guide/Formatting-a-Column-as-Currency上有一個帶有示例的文章,從那里鏈接的其他文章也將對您有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM