很容易拿的分呀!!画布的清空。(100分)

  • 主题发起人 主题发起人 Franz
  • 开始时间 开始时间
F

Franz

Unregistered / Unconfirmed
GUEST, unregistred user!
我把时间通过CANVAS直接显示在屏幕上,
但由于秒数的刷新,使的前次的数字与当前的数字
重叠在一起。
acanvas.Brush.Style := bsclear;
acanvas.TextOut(0 ,0,datetimetostr(now));
用搜索到的方法,可是又不能透明,显示背景。
请指点迷津
 
Canvas.Brush.Color:=要填充的背景色;
Canvas.Brush.Style:=bsSolid;
Canvas.FillRect(要填充的区域);
acanvas.Brush.Style := bsclear;
acanvas.TextOut(0 ,0,datetimetostr(now));
 
canvas.FillRect(canvas.ClipRect);
 
self.Refresh;
 
用form1.repaint;
 
acanvas.pen.mode := pmXor;//异或模式
acanvas.TextOut(0 ,0,datetimetostr(上一次的时间));
acanvas.TextOut(0 ,0,datetimetostr(本次时间));
这样子就可以了
 
self.Refresh;
OR
self.repaint;
acanvas.Brush.Style := bsclear;
acanvas.TextOut(0 ,0,datetimetostr(now));
 
试试loogun的方法,应该是可以的!
 
谢谢大家的回答.
由于是写在屏幕上的,因此想考虑他要透明显示桌面
是不是要先抓背景,再画?
loogun的方法好像也不行啊


 
这个问题我也越到过……到现在都还未解决……即使我用invalidatedrect(是不是这样拼的?)强制重绘背景那可恶的字还是叠在一起了……
 
应该没有问题的阿,异或模式的意思是画两遍等于没画,这样先画一遍旧的就可以覆盖掉以前的,再画一遍新的就可以了
 
把你的字体用两种颜色输出呀,第一次是背景色 当然字也是上次的字,再用当前颜色,当前时间画
 
我想要的是透明啊,如果仅仅是要和桌面的颜色一样可以这样啊:
canvas.Brush.Color := clBackground
但就不是透明的了,就如同不要使:
cavas.brush.style:=bsclear;
那么秒数就不会重叠。
是不是要抓背景啊?
 
我还是来顶顶吧
 
写在屏幕上的?
在你的输出前调用
RedrawWindow(GetDesktopWindow,nil,0,RDW_ERASE or RDW_INVALIDATE or RDW_UPDATENOW or RDW_ALLCHILDREN);
也许有闪烁。不过你可以指定其中的rect为你的修改区域,这样闪烁就少了。
 
不好意思,准备程序员考试好久没来
Another_eYes的方法可行,但确实有点闪烁,
不过先结束问题。
有好方法,请发邮件给我,我另开贴放分
franzpan@sohu.com
 
Franz:
你说对了,就这样:
(由于是写在屏幕上的,因此想考虑他要透明显示桌面
是不是要先抓背景,再画?
loogun的方法好像也不行啊)
还有,如果是Win2000,WinXp,另外有个方法很容易做到,而且效果最好。

 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
794
import
I
I
回复
0
查看
770
import
I
后退
顶部