怎么自动让两个控件滚动条同步?(200分)

  • 主题发起人 主题发起人 onedot
  • 开始时间 开始时间
O

onedot

Unregistered / Unconfirmed
GUEST, unregistred user!
如两个FR的PREVIEW控件FPR1,FPR2<br>怎么让FPR1的垂直滚动条滚动多少,FPR2也自动滚动相同偏移量?<br>对FPR2也同理<br>//我现在的问题有两个,首先无论我是用ONAPPMESSAGE处理还是用重载窗口的WndPro过程<br>都无法捕获FPR1/FPR2被用户点滚动条滚动的消息,不知道怎么写?<br>//其次,我如何发消息给FPR2,让它和FPR1滚动到相同位置?<br>我用GETSCROLLINFO得到FPR1的SCROLLINFO,然后调用SETSCROLLINFO给FPR2<br>但发现它们仅仅是SCROLLBAR的位置变化,没有真正的内容滚动。怎么做?<br>
 
我没用过这东西,对不起了!
 
我没有用过FR的PREVIEW控件,下面是关于截获Listbox的滚动事件,你看看思路,<br>不知是否有用。<br><br>unit Unit1;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,<br>&nbsp; StdCtrls;<br><br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; ListBox1: TListBox;<br>&nbsp; &nbsp; Button1: TButton;<br>&nbsp; &nbsp; procedure FormCreate(Sender: TObject);<br>&nbsp; private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; &nbsp; FOldProc : TWndMethod;<br>&nbsp; &nbsp; procedure MyProc(var Message:TMessage);<br>&nbsp; public<br>&nbsp; &nbsp; { Public declarations }<br>&nbsp; end;<br><br>var<br>&nbsp; Form1: TForm1;<br><br>implementation<br><br>{$R *.DFM}<br><br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>&nbsp; FOldProc := Listbox1.WindowProc;<br>&nbsp; ListBox1.WindowProc := MyProc; <br>end;<br><br>procedure TForm1.MyProc(var Message: TMessage);<br>begin<br>&nbsp; if message.Msg = WM_VSCROLL then<br>&nbsp; begin<br>&nbsp; &nbsp; showmessage('scrolled!');<br>&nbsp; end;<br>&nbsp; FOldProc(message);<br>end;<br><br>end.<br>
 
谢谢BLUERAIN!<br>不知道第2个问题解决思路应该是什么?<br>//其实无所谓FR的PREVIEW用没用过,就当如何控制一个MEMO滚动多少,另外一个MEMO也滚动多少?因为都是TWINCONTROLE类的<br><br>
 
用一个timer控件控制他们的滚动条始终一样。
 
&gt;&gt;不知道第2个问题解决思路应该是什么?<br>截获第一个后,发截获得message给第二个就是了,你可以看一下这个message的结构,<br>已经包涵了移动距离等信息,所以应该是同步的。<br>不过最麻烦的是双向激活的问题。也就是第二个可以给第一个发消息,第一个也可以给<br>第二个发消息。这样的话如果处理不好,会陷入死循环。要自己设计一套机制避免。<br>对于这个问题,我也没有什么好办法。如果不是双向的,你可以先用上面的办法试一下,<br>截获后sendmessage给第二个,看看行不行。
 
TO D影子D:关键如何让他们滚动位置同步?这个解决了就不在乎用什么控制了!<br>
 
多人接受答案了。
 
后退
顶部