FireMonkey HD窗体没有DBgrid功能,用TStringGrid的话无DrawColumnCell,怎么改变单元格颜色呢?
FM窗体如何使TStringGrid的单元格变色。
举例代码?目前中国还没有谁给出答案?

解决方案 »

  1.   

    在线等牛人出现?貌似最简单,D7能实现,但XE2 FM就不能?
      

  2.   

    可以把FMX.Grid这个单元,复制到你的工程所在目录下,任意修改。
      

  3.   

    在窗体上放一个TEdit控件,右键修改自定义样式,选中background那一条,修改Fill.Color为你想要的颜色。然后可以把窗体上那个TEdit删掉。复制FMX.Grid到你的工程下,做如下修改,这样可以实现隔行变色的效果。因为grid里的每一格子都是一个TEdit控件,所以通过代码让它应用我们自定义的样式就行了。关键是这一句:FCellControls[i].StyleLookup := 'Edit1Style1';procedure TColumn.UpdateColumn;
    var
      i, C, X: Integer;
      V: Variant;
    begin
      if Grid = nil then
        Exit;  FUpdateColumn := True;
      try
        { Create controls }
        if Length(FCellControls) < Min(Grid.RowCount, Grid.VisibleRows) then
        begin
          C := High(FCellControls);
          SetLength(FCellControls, Min(Grid.RowCount, Grid.VisibleRows));
          for i := C + 1 to Min(Grid.RowCount, Grid.VisibleRows) - 1 do
          begin
            FCellControls[i] := CreateCellControl;
            FCellControls[i].Parent := Self;
            FCellControls[i].HitTest := False;
            FCellControls[i].Visible := False;
            FCellControls[i].Locked := True;
            FCellControls[i].Stored := False;
            if i mod 2 = 0 then
            begin
              FCellControls[i].StyleLookup := 'Edit1Style1';
            end;
            FCellControls[i].OnCanFocus := DoCanFocus;
            FCellControls[i].OnEnter := DoEnter;
            FCellControls[i].OnKeyDown := DoKeyDown;
          end;
        end;