同样是填充矩形区域,FillRgn和FillRect效果不一样,为什么?

procedure TForm3.FormPaint(Sender: TObject);
const
n = 50;
var
Rgn: HRGN;
x1,y1,x2,y2: Integer;
begin
x1 := n;
y1 := n div 2;
x2 := ClientWidth - n;
y2 := ClientHeight - n;

Canvas.Brush.Color := clYellow;
Canvas.Brush.Style := bsCross;

{用FillRgn填充矩形区域}
// Rgn := CreateRectRgn(x1, y1, x2, y2);
// FillRgn(Canvas.Handle, Rgn, Canvas.Brush.Handle);
// DeleteObject(Rgn);

{用FillRect填充矩形区域}
FillRect(Canvas.Handle, Rect(x1, y1, x2, y2), Canvas.Brush.Handle);
end;
...全文
293 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
santiaodahan 2017-03-29
  • 打赏
  • 举报
回复
效果怎么不同,是不是FillRect会有黑色的背景?FillRect调用的user32.dll,FillRgn调用的是gdi32.dll,使用不同的接口绘制。改为相同效果有多种方式: 1.设置FillRect背景颜色,在Canvas.Brush.Style := bsCross; 加一句 SetBkColor(Canvas.Handle, ColorToRGB(Color)); 2. 去掉这两句:Canvas.Brush.Color := clYellow; Canvas.Brush.Style := bsCross; 它们修改了当前窗口实例的画刷颜色和风格,改为自己创建一个画刷:

bru:=TBrush.Create;
try
     bru.Color := clYellow;
     bru.Style := bsCross;
     FillRect(Canvas.Handle, Rect(x1, y1, x2, y2), bru.Handle);
finally
     bru.Free;
end;
3.同样去掉Canvas.Brush.Color := clYellow; 和Canvas.Brush.Style := bsCross;改为使用API函数绘制。

hbr:=CreateHatchBrush(HS_CROSS, clYellow);
FillRect(Canvas.Handle, Rect(x1, y1, x2, y2), hbr);
DeleteObject(hbr);

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧