初级问题--自定义的控件每次被重绘时执行的代码写在何处?(100分)

  • 主题发起人 主题发起人 yinyue
  • 开始时间 开始时间
Y

yinyue

Unregistered / Unconfirmed
GUEST, unregistred user!
第一次编写Delphi的控件,控件继承StringGrid,想在表格每次激活DrawCell过程时
执行一段代码。试着写在自定义控件MyGrid的DrawCell中,却发现这段代码一直处于
执行中。是不是应该写在别的地方?
 
应该只会在你的StringGrid重绘时,你的这段代码
才会执行吧。怎么会一直执行呢?你是不是在这段代码中
又涉及到它的形状的变更操作?
 
差不多吧,我在鼠标点击的事件中,为一个整型数组赋值,这个数组存放用户选定的行号
(鼠标+Shift or Ctrl),然后在重绘表格时,将这些选定行的背景色和字的颜色改变,
以获得选中的效果。另外在重绘的时候还需要合并某些单元格。
 
从你理论来说就会进行死循环:
你在重绘的时候改合并单元格,可能会引用下一次重绘,然后再引用再下一次重绘,所以进入死循环!
 
可我并不是合并单元格,而是跨格显示内容,也就是为Canvas指定相当于多个单元格的Rect,
然后TextOut。这个也会引起单元格重绘?而且死循环总是在第一行的第一列,这是Title部分,
我并没有对它进行合并。
 
你不会是在跟踪吧,如果跟踪的话,你一定要把Delphi的所有窗口不要盖住应用程序的窗口,否则可能每执行一句都会引用重绘。
 
并不是跟踪,只是想重写DrawCell过程。
现在现实是正常的,只是随便点一下表格,表格就会闪一下。
想加一个Flag来控制DrawCell,可是引起DrawCell的事件太多,很难控制。
有没有更好的方法?
 
应该说StringGrid对重绘已经处理得不错了,应该不需要自己去处理闪烁问题,如果你有这样的问题,我想还是应该从你的代码入手.
 
其实并不是闪烁,由于我在一些特殊行内,跨格显示了一些内容。
重绘时,各单元格之间的分隔线显示了一下先,然后又执行了跨格显示。
所以看起来是闪了一下。
 
后退
顶部