用TImage控件做背景图片 ,如何让绘制的图像显示在上面

tx183584 2011-05-26 01:08:06
发现用Canvas.StretchDraw(re,g);绘制出来的.会被覆盖.要怎么样解决 ..
...全文
146 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gobiz 2011-05-26
  • 打赏
  • 举报
回复
以上都是透明的效果,如果还是不明白,那么我也就真的是无话可说……
gobiz 2011-05-26
  • 打赏
  • 举报
回复
唉,怎么又出来了一个Panel呢?你的叠放次序是如下的吗?
PaintBox

Image

Panel

如果是这样的话,那么你就在PaintBox的OnPaint事件里面先设置Canvas.Brush.Style为bsClear,再画图。
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
FImg: TBitmap;
begin
with (Sender as TPaintBox) do
begin
//先禁止填充
Canvas.Brush.Style := bsClear;
//再开始画图
Canvas.Pen.Style := psSolid;
Canvas.Pen.Color := clNavy;
Canvas.Pen.Mode := pmBlack;
//画一条直线
Canvas.MoveTo(5, 5);
Canvas.LineTo(100, 100);
//画一个矩形
Canvas.Rectangle(40, 10, 60, 20);
//复制图片
FImg := TBitmap.Create;
try
FImg.LoadFromFile('globe.bmp'); //导入源图
FImg.TransparentColor := clPurple; //设置透明色
FImg.Transparent := True; //设置透明
Canvas.StretchDraw(Rect(20, 70, 52, 86), FImg);
finally
FreeAndNil(FImg);
end;
end;
end;

其中globe.bmp是Delphi自带的图片(尺寸:32*16)
tx183584 2011-05-26
  • 打赏
  • 举报
回复
背景放 在Timage中.然后.把panitBox放在panel上.图画在panitBox上,会被覆盖的
gobiz 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 tx183584 的回复:]
发现用Canvas.StretchDraw(re,g);绘制出来的.会被覆盖.要怎么样解决 ..
[/Quote]

描述不清楚,究竟是几个Image,如果是一个Image,那么你在这个Image中执行Canvas.StretchDraw(re,g)当然会被覆盖了,或者是你准备画在这个页面上的东西有透明部分,那么你就先把Canvas.Brush.Style设置为bsClear,试试看呢?
dropme 2011-05-26
  • 打赏
  • 举报
回复
你用的是谁的Canvas? Form的还是Image的?Canvas.StretchDraw(re,g) 这么写的话,是在Form的Canvas上画图,你在Form上面在放个Image,当然会盖住;


而且如果你准备画的话,干嘛还要用image,直接在Form的Canvas上画就行了呗~
tx183584 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]

放到OnPaint事件中
[/Quote]
已经放入,是被覆盖了,不是被刷新了
bdmh 2011-05-26
  • 打赏
  • 举报
回复
放到OnPaint事件中

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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