【发布时间】:2017-10-10 15:31:36
【问题描述】:
我正在尝试使用 Canvas 绘制类似对话框的表单。我可以在其中放置圆角边框和圆角矩形作为标题/标题。我只想用画笔填充标题。
但是,我正在努力填补这个标题。使用FillRect 时,所有表单都会重新绘制。试着在这里搜索,所以如果我错过了,请指出我要去哪里。否则,我该怎么办?使用 Delphi 7,OnPaint 事件。
procedure TCustomDialog.FormPaint(Sender: TObject);
var
Rect: TRect;
BorderColor: TColor;
BrushColor: TColor;
begin
// Rect for Form's borders;
Rect.Left := 0;
Rect.Top := 0;
Rect.Right := ClientWidth;
Rect.Bottom := ClientHeight;
BorderColor := HtmlToTColor('#ffffff');
BrushColor := HtmlToTColor('#ffffff');
// Here I set the colors of Canvas.Pen (border) and Canvas.Brush (Filling),
// similar to Bootstrap themes/classes (Default, Success, Warning, Danger);
case DialogType of
dtInformation:
begin
BorderColor := HtmlToTColor(Header_Color_Pen_Information);
BrushColor := HtmlToTColor(Header_Color_Brush_Information);
end;
dtSuccess:
begin
BorderColor := HtmlToTColor(Header_Color_Pen_Success);
BrushColor := HtmlToTColor(Header_Color_Brush_Success);
end;
dtWarning:
begin
BorderColor := HtmlToTColor(Header_Color_Pen_Warning);
BrushColor := HtmlToTColor(Header_Color_Brush_Warning);
end;
dtError:
begin
BorderColor := HtmlToTColor(Header_Color_Pen_Error);
BrushColor := HtmlToTColor(Header_Color_Brush_Error);
end;
end;
with Canvas do
begin
Pen.Color := BorderColor;
Pen.Width := Form_Pen_Width;
// Draw rounded borders for Form;
RoundRect(1, 1, Rect.Right - 1, Rect.Bottom - 1, Form_Border_Radius - 1, Form_Border_Radius - 1);
// Rect for Dialog's Header;
Rect.Left := Component_Gutter;
Rect.Top := Component_Gutter;
Rect.Right := ClientWidth - Component_Gutter;
Rect.Bottom := Form_Header_Height;
RoundRect(Component_Gutter, Component_Gutter, ClientWidth - Component_Gutter, Form_Header_Height,
Form_Border_Radius - 2, Form_Border_Radius - 2);
Brush.Color := BrushColor;
FillRect(Rect);
end;
end;
【问题讨论】:
-
您的图片链接已损坏。请不要在外部网站上托管图片。 StackOverflow 有自己的图像托管。请将您的图片直接上传到 StackOverlow。
-
@RemyLebeau 已编辑。
-
在准备绘制圆角矩形时,将
Brush定义为您希望填充的颜色。来自文档:使用 RoundRect 使用 Pen 绘制圆角矩形并用 Brush 填充它。如果我理解您的代码,请将Brush.Color := BrushColor;行移到RoundRect()调用之前并删除FillRect()调用。 -
@TomBrunberg 感谢您的评论。我在此之前尝试过,但是所有表格都已填写。
-
我已撤销您的编辑,因为它不合适。如果您想分享您找到的答案,请使用下面的空间正确地分享答案。回答您自己的问题是 acceptable here,但前提是您这样做得当。
标签: delphi canvas rounded-corners