2

グリッドのセルに線の色なしで緑/赤の色で塗りつぶされた円を表示しようとしています。グリッドには他にも多数の同様のエンティティが表示されますが、意図した円の代わりに数値を持つこともできます。

参考までに、次のコードを含めて、最初のセルにのみ円を表示します。ただし、使用される方法は、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 をセルまたはその他のソリューションに追加する方法はありますか?

4

1 に答える 1

1

すべての Draw[shape] プロシージャは、問題の [shape]の輪郭のみを描画するため、ストローク ブラシの種類が [なし] に設定されている場合は何も描画されません。

代わりに、Fill[shape] プロシージャは問題の色で塗りつぶされた [shape] を描画します。

以下のコードは、最初のセルの中央に 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;
于 2014-05-04T19:37:01.950 に答える