一个画图程序,就出这个问题,进不得,退不得,好烦:
画布问题:
如果用TImage,刚开始不要改变大小,那么无论画什么,直线,矩形,
实心图形,一点儿也不会闪。如果程序运行中把Timage变小,也不会出问题。但如果变大却变不了,而且之后就狂闪了。Tmage不能变大的吗,而且如果它的Align设为Client之后,也就是充满整个Panel之后,画线时也会狂闪。
如果用TPaintBox,总体不会闪了,但局部还是会,就是当画实心矩形的时候,那实心部分就明显地闪了。各位有没有做这类画图的程序呀,现在烦死了,提提意见啊,怎么才能使画布不闪。或者是我上面的控件没有设什么属性了,大家说一下吧。
画布问题:
如果用TImage,刚开始不要改变大小,那么无论画什么,直线,矩形,
实心图形,一点儿也不会闪。如果程序运行中把Timage变小,也不会出问题。但如果变大却变不了,而且之后就狂闪了。Tmage不能变大的吗,而且如果它的Align设为Client之后,也就是充满整个Panel之后,画线时也会狂闪。
如果用TPaintBox,总体不会闪了,但局部还是会,就是当画实心矩形的时候,那实心部分就明显地闪了。各位有没有做这类画图的程序呀,现在烦死了,提提意见啊,怎么才能使画布不闪。或者是我上面的控件没有设什么属性了,大家说一下吧。
解决方案 »
- Indy 登录 Hotmail , 用过的人请进!
- 关于ADODataSet数据保存/读取/更新问题,请教!!!
- 小弟初学,想连个数据库可老不成功,哪为老大帮个忙??
- 求助,为什么有时候变量调用Free过程之后还需要使之变成nil呢?
- 简单问题
- 下面代码(vb)用delphi如何表达!
- 能不能打DBGRID Title 变得高一点,而字体不变
- 怎么实现在form中点击某按钮,然后弹出一个控制台窗口
- 巨难SQL语句请教。。。。。
- 一表我想通过文本框来增加记录,为何不能发送到表中,不要告诉我是没有post的原因。
- Delphi.Net有前途吗,大家有何评价?
- 请kaykay(高级程序蛇)进来领分!多谢!
也许打开 DoubleBuffered 会好点的!!具体解决,要看代码
我试试下DoubleBuffered 试下
我试了一下,和原来的一样,但我这次用的是TPaintbox,就会局部分闪烁
用纯API画,也会。不用看具体代码的,就是用鼠标拉出一个实心矩形那样,像Windows的画图程序那样
就会局部闪烁了,有没有办法解决
你们用PaintBox画的时候会不会局部产闪烁啊,我现在只想问这个问题了?
我只想问大家用Painbox会有这样的情况吗,我开始怀疑我的电脑了。 另外,如果一直不停地画,会不会一直在耗用系统的内存,我一直狂画线时,内存过一段时间就增长几K。
是TImage所在的父容器(TForm,或TPanel,TScrollBox之类的)的DoubleBuffered属性to linzhengqun (linzhengqun)
画选择框时,一般用异或笔直接画就可以了,不需要重绘原来的图。。
http://www.gameres.com/Articles/Program/Visual/2D/GDIDraw.htm看看这两个文档,游戏可以用GDI api做,TCanvas 就是GDI 得封装,为什么游戏不闪烁?DoubleBuffered 你可以当它不存在
只要不是鼠标移动就重绘就行 给重绘过程加个条件,把绘图限制一下 比如重绘过程中sleep试试 或者用timer 一段时间绘一次(timer不精确,最好能自己做一个)
首先,如果要做一般的画图程序,不需要TPaintbox,用TImage就行了
理由如下:
用Tpaintbox有以下不好
一:它会局部闪烁,当你画实心形时可以明显看出来
二:它要处理Paint事件,以解决画面的保存问题,但有一个问题,就是当它上面有别的窗口在的时候,它保存后的图象会连那个窗口在它上面的部分也保存进去,处理Paint事件时把图象恢复出来时,就会看到窗口的一部分也在它上面了。用Image的理由如下:
一:D7的Image已经解决了闪烁的问题,但当动态改变它的大小时要注意,不要写这样的代码:Image.width:=.....,如果你这样写,尺寸比原来的大时,它不会变大,而且之后它就会狂闪了。应该是这样写:Image.picture.Bitmap.width:=......,这样写之后,它就会作相应的变化,而且仍然一点儿也不会闪,这也是我今天最大的发现。
二:Image不用解决重画的问题。
好了,相信我上面的经验是有价值的。我的问题总算是解决了,虽然是我自己摸索出来的,但你们的帮助也让我学到不少
行了,结贴。希望大家一起努力。