用颜色填充自定义区域

时间:2011-11-27 17:36:34

标签: delphi colors delphi-7 paint fill

如何用颜色填充选定区域?

var Rect: TRect;
    Color: TColor;
begin
  //fill area with color
end;

2 个答案:

答案 0 :(得分:9)

您尚未说明自定义区域的含义,而您谈的是“选定区域”。我不知道你的意思。

对于一个简单的矩形,您通常会使用TCanvas.FillRect填充矩形。

Canvas.Brush.Style := bsSolid;
Canvas.Brush.Color := Color;
Canvas.FillRect(R);

其中R是指定矩形的TRect

对于更复杂的区域,您需要回退Windows GDI函数FillRgn。此功能未被TCanvas包裹,但您只需将其称为TCanvas.Handle作为HDC

答案 1 :(得分:2)

你需要更具体,但这应该让你朝着正确的方向前进:

procedure DoMyDrawing(Canvas: TCanvas; L, T, R, B: Integer; Color: TColor);
var
  Rec: TRect;
begin
  Rec.Left:= L;
  Rec.Top:= T;
  Rec.Right:= R;
  Rec.Bottom:= B;
  //SAME AS Rec:= Rect(L, T, R, B);
  Canvas.Brush.Color:= Color;
  Canvas.Brush.Style:= bsSolid;
  Canvas.Pen.Style:= psClear;
  Canvas.FillRect(Rec);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  DoMyDrawing(Self.Canvas, 10, 10, 50, 50, clNavy);
end;

修改

我会更推荐使用TRect而不是4坐标(左,上,右和下),因为TRect包含了所有4个坐标。您还可以使用TopLeft TPoint和BottomRight TPoint读取TRect。

(我还修正了上面的拼写错误 - Canvas.FillRect(R);应该是Canvas.FillRect(Rec);

以下是同一程序的另一个版本:

procedure DoMyDrawing(Canvas: TCanvas; const R: TRect; const Color: TColor);
begin
  Canvas.Brush.Color:= Color;
  Canvas.Brush.Style:= bsSolid;
  Canvas.Pen.Style:= psClear;
  Canvas.FillRect(R);
end;

更容易,不是吗?


另一个编辑:

还要注意我正在使用的功能Rect(Left, Top, Right, Bottom) - 这也使事情变得简单。不幸的是,我看到了一些标准的VCL控件,这些控件的参数名为Rect: TRect;,这会影响classes单元中原始函数的使用能力。因此,也要避免使用名为Rect的变量,因为它会阻止您使用Rect函数(将4行代码转换为1)。