怎样让canvas的一个区域失效,迫使其重画(30分)

  • 主题发起人 主题发起人 我爱PASCAL
  • 开始时间 开始时间

我爱PASCAL

Unregistered / Unconfirmed
GUEST, unregistred user!
这样吗?
procedure TForm1.BitBtn1Click(Sender: TObject);
var
re: Trect;
begin
re := rect(0, 0, 50, 50);
//InvalidateRect(Canvas.Handle, @re, true);//此处我写错了,见下面指正,应为下句
InvalidateRect(Handle,@re,true);
end;
 
试了,好象没有反应
 
二楼正确。你问的是区域失效,迫使其重画。
如果重画内容不变化。肯定没有反应
 
>>如果重画内容不变化。肯定没有反应
我觉得不对,失效就是向它发送wm_paint
然后由它自已调用相应的代吗,所以重画出来的可能不一样。
我的目的就是要它画出来与原来不一样。
 
你能否写个例子出来,让偶们瞅瞅,到底是怎样一个要求,怎样一个实现。
 
二楼肯定是不对的!
为什么不对,都好好看看!
 
观望,查阅,疑惑,等待学习中....
 
InvalidateRect 要窗口句柄HWND,不是HDC
 
汗+寒+惭愧中。。。。呵呵,谢谢楼上. 我改过了。
 
是这样的,主窗口中有一drawgrid,
我在drawgrid的ondrawgridcell事件中写有代吗,让每个cell显示的内容都不一样,
当窗口被挡后,重新移开后,每个cell都很听话的还原了,当我在程序中改了某个
cell的图像后又要恢复,就要调用ondrawgridcell,但是不好调,我想到当窗口被挡后,重新移开后能自动触发ondrawgridcell,我就想invalidrect.
但是改用窗口的handle,如mainform.handle,还是application.handle,都无反应,不知是
何原因。
 
控件的Handle啊,就是那个DrawGrid的
注:如果是在控件内部的话,那就是Handle或self.handle
 
试了一下,终于正确了。谢谢上面几位。
 
说说怎样一 回事啊??。
 
如zhenxin0603说的用:
InvalidateRect(DrawGrid.Handle,@re,true);
这样就对了,
也就是要用canvas所在的twinctrol的handle
 
后退
顶部