如何捕捉画布属性的变化?(100分)

  • 主题发起人 主题发起人 wxb761014
  • 开始时间 开始时间
W

wxb761014

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何才能捕捉画布上的画笔与画刷变化。
我知道GraphicsObject有change事件可以捕捉这个变化。
但我不知如何具体实现将我的函数与与此事件进行关联,
请各位高手指教。(最好带示范程序)。
另外,请教如何消除画图时的闪烁?如何锁定画图区域以外的区域?
 
Procedure BurshChange(Sender:Tobject);
Begin
......//相应处理
End;
Procedure PenChange(Sender:Tobject);
Begin
......//相应处理;
End;
....
ACanvas.Brush.OnChange:=BrushChage;
ACanvas.Pen.OnChange:=PenChange;
.... OK!
你试一下,我是这么用的
你的其余问题表达不清楚,仔细点说!

 
to GGCAT:
你说的方法,我先试试。
第二个问题的实质就是如何锁定一个画图区域,使画图区以外的部分不再响应画图事件,
这样就可部分消除闪烁(自己的想法)。但Canvas的ClipRect属性是只读的,无法赋值。
请问如何设置ClipRect区域。
另外,如何消除画图时的闪烁,欢迎谈谈自己的想法!
 
选定画图区域的方法是有的:

Var H:Hrgn;
Begin
H:=CreateRectRgn(0,0,100,100);
SelectClipRgn(Canvas.Handle, H);
Canvas.Rectangle(0,0,200,200);
End; 你会看到 矩形只画出了一个角;

不过我想你的问题不该在这方面解决。 消除大量绘制的屏幕闪烁常用两种办法:
1) Double Buffer ,你应该知道怎么做吧,该方法实现简单,效果好,只是有
效率不高之嫌(因为实际上还是把全部的内容重绘了);
2) Update Detect 在程序中自行判断哪一部分涉及到更新,并只对这一小块
处理,而不是象你想的,把绘图区域缩小到这一块。否则,
如果在恢复区域前其余部分作废,是响应不到的。

建议,如若 图不复杂 或 很复杂,可用第 1 种



 
to GGCAT:
对不起,可否详细的说一下你的方法(1).
谢谢!!!!!!!
 
在内存建临时位图,和绘制区域等大。
在绘制中总是向该位图绘制。全部画完后,把位图一次性提交到前台。
Canvas.Draw(0,0,TempBitmap);
这样,绘制过程就不会在用户面前进行,避免了闪烁。够明白了吧。

嘿嘿,别忘了,那个,你知道的.....
 
接受答案了.
 
后退
顶部