【发布时间】:2011-11-27 17:36:34
【问题描述】:
如何用颜色填充选定区域?
var Rect: TRect;
Color: TColor;
begin
//fill area with color
end;
【问题讨论】:
标签: delphi colors delphi-7 paint fill
如何用颜色填充选定区域?
var Rect: TRect;
Color: TColor;
begin
//fill area with color
end;
【问题讨论】:
标签: delphi colors delphi-7 paint fill
您还没有说明 自定义区域 的含义,而您谈论的是“选定区域”。我不明白你的意思。
对于一个简单的矩形,您通常会用TCanvas.FillRect 填充矩形。
Canvas.Brush.Style := bsSolid;
Canvas.Brush.Color := Color;
Canvas.FillRect(R);
其中R 是指定矩形的TRect。
对于更复杂的区域,您需要使用 Windows GDI 函数FillRgn。这个函数没有被TCanvas 包裹,但你可以简单地调用它,将TCanvas.Handle 作为HDC 传递。
【讨论】:
ExtFloodFill函数
您需要更加具体,但这应该会让您朝着正确的方向前进:
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 行代码)。
【讨论】: