关于划线问题!急,在线等待!!!

xqjt 2002-10-23 03:01:50
我在窗体(frmMain)上绘制一条直线,点击按钮时能够显示出来,在窗体移动时能够看见已经划好的直线,但是在窗体刷新时窗体改变大小时,该直线就会消失,请教各位大侠,如何才能够让该直线一直显示?另外,当我需要手动删除该直线时,应该如何操作?
我写的代码如下:
procedure TfrmMain.Button1Click(Sender: TObject);
begin
frmMain.Canvas.MoveTo(100, 100);
frmMain.Canvas.LineTo(200, 200);
end;
...全文
25 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqjt 2002-10-24
  • 打赏
  • 举报
回复
我对图形处理接触得比较少,应该怎么做呢?能够提供代码给我吗?非常感谢!
hansome 2002-10-24
  • 打赏
  • 举报
回复
设置画笔为异或模式
重新再画一遍直线
xqjt 2002-10-24
  • 打赏
  • 举报
回复
To: ehom(?!)
我只是想删除画好的某条直线,同时要让图片和其他已经画出的直线能够保留在窗体上,您上面的方法却是将窗体上所有的东西都删除了,能再教我一下吗?谢谢!!!
ehom 2002-10-24
  • 打赏
  • 举报
回复
由于窗体画布上内容复杂,有各种可视控件!

hansome(连环)的方法不可取!也没有效果!
ehom 2002-10-24
  • 打赏
  • 举报
回复
解决问题要学会变通!

用一标记记录状态,按下按钮后改变该标记变量的状态!如
Flag:=False;

procedure TMyImage.Paint(var Msg: TWMPaint);
begin
inherited;
if Flag then
begin
with Form1.Canvas do
begin
MoveTo(0, 0);
LineTo(100, 100);
end;
end;
end;

然后调用Form1.RePaint
由于Flag为False!
if Flag then
begin
..
end;

中间的画直线代码不会执行,也就是只重绘其它部分,达到清除直线的目的!
xqjt 2002-10-24
  • 打赏
  • 举报
回复
算了,结帖吧!
xqjt 2002-10-24
  • 打赏
  • 举报
回复
还有人能帮助我吗?在线等待!!!
ehom 2002-10-23
  • 打赏
  • 举报
回复
Canvas.Brush.Style:=bsSolid;
Canvas.FillRect(Canvas.ClipRect);
清空画布内容!
xqjt 2002-10-23
  • 打赏
  • 举报
回复
To: ehom(?!)
非常感谢您的帮助,已经成功实现了直线的绘制,但如何删除该直线呢?请再帮我一下,谢谢!!!
ehom 2002-10-23
  • 打赏
  • 举报
回复
因为窗体的重画在Image前,所以可对Image进行改造!拦截其WM_PAINT消息,而非窗体的WM_PAINT!

如:

TMyImage = class(TImage)
procedure Paint(var Msg: TWMPaint); message WM_PAINT;
end;

procedure TMyImage.Paint(var Msg: TWMPaint);
begin
inherited;
with Form1.Canvas do
begin
MoveTo(0, 0);
LineTo(100, 100);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var MyImage:TMyImage;
begin
MyImage:=TMyImage.Create(nil);
MyImage.Parent:=Form1;
MyImage.Picture.Assign(Image1.Picture);
end;
xqjt 2002-10-23
  • 打赏
  • 举报
回复
help me!!!
xqjt 2002-10-23
  • 打赏
  • 举报
回复
To:zwjchina(蒲石)
能够提供代码给我吗?非常感谢!!!
zwjchina 2002-10-23
  • 打赏
  • 举报
回复
处理窗体的WM_PAINT消息撒!
xqjt 2002-10-23
  • 打赏
  • 举报
回复
请大家再帮帮忙!解决后立即给分,我快急死了!
xqjt 2002-10-23
  • 打赏
  • 举报
回复
To: pathe(睡斛)
这样的确是可以的,但我的窗体上客户要求必须有一张图片,所以您的方法在实际效果上无法体现出来,直线确实已经存在了,但被图片遮盖住,无法看见,请再帮我一下,而且如何用Form的颜色重画呢?
pathe 2002-10-23
  • 打赏
  • 举报
回复
procedure TForm1.FormPaint(Sender: TObject);
begin
with Canvas do
begin
MoveTo(0, 0);
LineTo(100, 100);
end;
end;
删掉时,用Form的颜色重画一遍!
xqjt 2002-10-23
  • 打赏
  • 举报
回复
不行,我已经做过了,根本无法显示直线
广州接入 2002-10-23
  • 打赏
  • 举报
回复
在OnPaint事件中写代码!

1,183

社区成员

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

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