如何用颜色填充选定区域?
var Rect: TRect;
Color: TColor;
begin
//fill area with color
end;
答案 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)。