First, an apology. In answer to your last question, CreateCellControl had to inherit to create the cell. I corrected my answer.
Regarding this question, I uploaded my blog to FireMonkey Cells - http://monkeystyler.com/blog/entry/firemonkey-grid-basics-custom-cells-and-columns - it covers the material from the previous answer and also covers the creation custom cell controls. You will need to read this before you arrive. I'll wait.
...
Back? Good.
Following the example of a blog post.
Except that I updated TFinancialCell to inherit directly from TTextCell (which, of course, is TEdit), which makes much more sense and is much simpler in style.
So update TFinancialCell:
type TFinancialCell = class(TTextCell) private FIsNegative: Boolean; FIsImportant: Boolean; protected procedure SetData(const Value: Variant); override; procedure ApplyStyle;override; procedure ApplyStyling; public constructor Create(AOwner: TComponent); override; published property IsNegative: Boolean read FIsNegative; property IsImportant: Boolean read FIsImportant; end;
Code for the above:
procedure TFinancialCell.ApplyStyle; var T: TFMXObject; begin inherited; ApplyStyling; end; procedure TFinancialCell.ApplyStyling; begin if IsNegative then FontFill.Color := claRed else FontFill.Color := claBlack; Font.Style := [TFontStyle.fsItalic]; if IsImportant then Font.Style := [TFontStyle.fsBold] else Font.Style := []; if Assigned(Font.OnChanged) then Font.OnChanged(Font); Repaint; end; constructor TFinancialCell.Create(AOwner: TComponent); begin inherited; TextAlign := TTextAlign.taTrailing; end; procedure TFinancialCell.SetData(const Value: Variant); var F: Single; O: TFMXObject; S: String; begin S := Value; FIsImportant := S[1] = '#'; if IsImportant then S := Copy(Value,2,MaxInt) else S := Value; F := StrToFloat(S); inherited SetData(Format('%m', [F])); FIsNegative := F < 0; ApplyStyling; end;
Finally, update the GetValue event handler:
procedure TForm1.Grid1GetValue(Sender: TObject; const Col, Row: Integer; var Value: Variant); var Cell: TStyledControl; begin if Col = 0 then Value := Row else if Col = 1 then begin Value := FloatToStr(Data[Row]); if Value > 30 then Value := '#'+Value; end; end;
Mike sutton
source share