关于canvas A beginner ask a easy question.我想在form中定义一个区域,在该区域中实现类似于画布的功能:作图形,画线,写文字等等。现在的问题是:我不知道怎样从form中独立出这个区域,该用什么控件和对象呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个区域你可以使用form的客户区来做,不需要其它的控件了 to Drate(鸟窝里的虫): 请指教,form的客户区是什么?你说的意思是不是不用任何控件,通过form.canvas直接定义好位置就可以了?to Borlandor(五角▲大民): 我试一试,thanks. sorry,我没有说清楚,不是moveto lineto,是用鼠标画线。 从GraphicControl继承即可,只要该控件上继承了Canvas就可以!一般用PaintBox! 我用panitbox了,但没找到变换背景颜色的地方。还有请问:怎样实现用鼠标画线,就像画笔一样? 直接在FORM的客户区做就行了,不用画什么区域例如: form1.Canvas.Pen.Color := clRed ; form1.Canvas.MoveTo(20,20); form1.Canvas.LineTo(80,80);FORM上除了标题栏和边框都属于客户区 1. 不能直接变换背景颜色,需要用指定颜色绘制并填充一个与Canvas大小相同的矩形。2. 鼠标画线,简单说来,在第一次按下鼠标的时候记录鼠标位置(线的起点),在第二次按下鼠标的时候再记录鼠标位置(线的终点),然后以这两个参数用MoveTo, LineTo画线。 Paint没有什么背景颜色!只有画布(Canvas)背景!Canvas就是对GDI的封装!所有window窗体都是用GDI画出来的!所以不管有没有继承Canvas对象,都可以在上面绘图!改变PaintBox.Canvas.Brush.Color就可改变背景! to ehom: 这样啊,我试一试to PoolD: 可能大家没理解我的意思,我是指画笔功能。我是这样做的:1 使用paintbox2 在mousedown event中,设标志为true,记录点坐标(x1,y1);3 在mousemove event中,if 标志=true 记录当前点坐标(x2,y2); moveto(x1,y1); lineto(x2,y2); x1:=x2;y1:=y2;4 在mouseup event中,标志设为false.实现了画笔功能,但是在窗口最小化或是被其他窗口覆盖,线条就不见了。请问:如果想保留线条的话,怎么办? to ehom: 类似于PaintBox1.Canvas.Brush.Color := clGreen;的语句不好使。 Canvas本身是没有保存画面内容的功能的。这可以通过两种途径解决,第一是改用TImage控件,第二是在TPaintBox的OnPaint事件中重绘Canvas的内容。我个人比较倾向于用第二种方法实现。比如你所提到的直线,可以用起点、终点和颜色、线型加以描述,根据这些信息,将绘制过程在OnPaint时重复一遍即可。 如果画布上还没画图形,当然就没有所谓的背景!做个实验!PaintBox1.Canvas.Brush.Color := clGreen;PaintBox1.Canvas.TextOut(0,0,'Test');看到效果了吗?我猜想你要实现的效果!PaintBox1.Canvas.Brush.Color := clGreen;PaintBox1.Canvas.FillRect(PaintBox1.ClientRect); to PoolD: 我想实现的是画布的功能,如果什么都重绘的话,将会麻烦得一塌糊涂。to ehom: 是的,可以实现,但是为什么我写在form的FormCreate事件中不好使呢? 还有,请大家有时间的话看看:有分相送http://expert.csdn.net/Expert/topic/1136/1136093.xml?temp=.9617731 yun,有点像深入浅出Canvas画图 ^_^ 因为OnCreate是创建窗体,在随后重绘后将清除!所以在OnPaint中写代码!或者拦截WM_PAINT消息! to ehom: thanks a lot. insert语句怎么写 代码封装的问题 能否让窗体永远占有屏幕顶端100pt的高?即使其他窗体最大化也不能覆盖或占有? 感谢[jinjazz],散分喽...... 如何从C/S应用向B/S应用转换 前辈知道这GExperts做什么用的吗,请详细告诉使用方法 关于多媒体播放时间计算问题. 在設計一個查詢模塊時,怎樣判斷日期的合法性? 一个简单问题 佛山昭力诚聘DELPHI程序员 大家都来看看! 帮帮我,俄语输入问题。
请指教,form的客户区是什么?你说的意思是不是不用任何控件,通过form.canvas直接定义好位置就可以了?to Borlandor(五角▲大民):
我试一试,thanks.
form1.Canvas.MoveTo(20,20);
form1.Canvas.LineTo(80,80);FORM上除了标题栏和边框都属于客户区
这样啊,我试一试
to PoolD:
可能大家没理解我的意思,我是指画笔功能。我是这样做的:
1 使用paintbox
2 在mousedown event中,设标志为true,记录点坐标(x1,y1);
3 在mousemove event中,if 标志=true
记录当前点坐标(x2,y2);
moveto(x1,y1);
lineto(x2,y2);
x1:=x2;y1:=y2;
4 在mouseup event中,标志设为false.
实现了画笔功能,但是在窗口最小化或是被其他窗口覆盖,线条就不见了。请问:
如果想保留线条的话,怎么办?
类似于PaintBox1.Canvas.Brush.Color := clGreen;的语句不好使。
PaintBox1.Canvas.Brush.Color := clGreen;
PaintBox1.Canvas.TextOut(0,0,'Test');
看到效果了吗?我猜想你要实现的效果!
PaintBox1.Canvas.Brush.Color := clGreen;
PaintBox1.Canvas.FillRect(PaintBox1.ClientRect);
我想实现的是画布的功能,如果什么都重绘的话,将会麻烦得一塌糊涂。
to ehom:
是的,可以实现,但是为什么我写在form的FormCreate事件中不好使呢?
thanks a lot.