关于Tsplitter(10分)

  • 主题发起人 主题发起人 张远
  • 开始时间 开始时间

张远

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么拖动splitter时,OnMove事件响应两次。
 
我试了一下果然如此,而且第二次紧接着第一次,
不只行人和其他的过程。不知道那位能解释一下。
不过有变通的方法
1 设一个全局变量控制
2 在onmove的结尾加一个abort就行了。
 
这是Delphi的一个Bug。我读了它的源程序,确实调用了FOnMove两次。在它的MouseUp
事件中调用了两个方法:
private UpdateControlSize; protected StopSizing; 他们的里面都有

If Assigned(FOnMove) then FOnMove(self);语句只是UpdateControlSize是判断
相关控件尺寸改变才执行后边语句。而StopSize则无条件执行。

你可已试验出来,如果鼠标点击Splitter后不拖动就抬起来,则事件执行一次。拖动
后则执行两次。

解决办法,在源码中去掉StopSizing中的If Assigned(FOnMove) then ...一句;
将ExtCtrls.pas加入到你的工程中去,编译后,将ExtCtrls.dcu复制到lib目录。
 
用Huizhang的方法改源代码当然可以,
但是发布时。。。。

我想知道你截获它的OnMove事件干什么?

如果只是控制它的移动范围,
可以设置周围控件的Constraints
属性实现

如果是其他目的
可以在周围控件的OnResize事件里实现
 
李颖,你觉得Spliter是多余的,这个OnMove则更是聋子的耳朵是不是!!!
 
大不了自己写一个splitter嘛,又没多复杂.
不过splitter个人感觉比较有用.
 
huizhang好气愤哟!

聋子的耳朵也不是没用,
起码有观赏作用嘛!

我不过提点建议而已。。。。
 
多人接受答案了。
 
后退
顶部