我试图在网格单元格中显示一个充满绿色/红色而没有笔触颜色的指示圆。网格显示许多其他类似的实体,但也可以具有数值而不是预期的圆。
作为参考,我包括以下代码,仅在第一个单元格中显示该圆圈。但是使用的方法取决于不设置为TBrushKind.None的笔划类型,也不提供自定义填充颜色,边距或填充功能: -
procedure TUI.CR_UL_UsersGridDrawColumnCell
( Sender : TObject;
const Canvas : TCanvas;
const Column : TColumn;
const Bounds : TRectF;
const Row : Integer;
const Value : TValue;
const State : TGridDrawStates );
begin
if ( Column.Index = 0 ) and ( Row = 0 ) then
begin
Canvas.DrawEllipse ( Bounds, 100 );
end
else
CR_UL_UsersGrid.DefaultDrawColumnCell
( Canvas, Column, Bounds, Row, Value, State );
end;
如果可能,有没有办法将TCircle实际添加到单元格或任何其他解决方案?
答案 0 :(得分:1)
所有Draw [shape]程序仅绘制所讨论的[shape]的轮廓,因此如果笔划类型设置为None,则不会绘制任何内容。
相反,填充[形状]程序会绘制颜色填充的[形状]。
下面的代码在第一个单元格的中间绘制一个5x5圆圈。 Bounds rect被修改为尺寸为5x5像素,并且通过所示的计算也在单元格中居中。条件 IsServerAlive 确定连接的服务器的状态,因此相应地选择要填充的颜色。
procedure TUI.UsersGridDrawColumnCell
( Sender : TObject;
const Canvas : TCanvas;
const Column : TColumn;
const Bounds : TRectF;
const Row : Integer;
const Value : TValue;
const State : TGridDrawStates );
var
Rect : TRectF;
begin
if ( Column.Index = 0 ) and ( Row = 0 ) then
begin
Rect := Bounds;
Rect.Left := Rect.Left + (( Rect.Width / 2 ) - 2.5 );
Rect.Right := Rect.Left + 5;
Rect.Top := Rect.Top + (( Rect.Height / 2 ) - 2.5 );
Rect.Bottom := Rect.Top + 5;
if IsServerAlive then Canvas.Fill.Color := TAlphaColorRec.Green
else Canvas.Fill.Color := TAlphaColorRec.Red;
Canvas.Fill.Kind := TBrushKind.Solid;
Canvas.FillEllipse ( Rect, 1 );
end
else
UsersGrid.DefaultDrawColumnCell
( Canvas, Column, Bounds, Row, Value, State );
end;