如何使用Tscrollbar到Richedit。
我的目的是在不同的面板中分离滚动条。
有可能吗?
答案 0 :(得分:1)
我不确定我是否理解这个问题,但如果我做对了,你最好的选择可能是在滚动框中进行丰富的编辑并使用Windows消息来同步这两个。
安德烈
答案 1 :(得分:1)
你可以试试这个:
procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
var
WParam: longint;
begin
case ScrollCode of
scLineUp: WParam := SB_LINEUP;
scLineDown: WParam := SB_LINEDOWN;
scPageUp: WParam := SB_PAGEUP;
scPageDown: WParam := SB_PAGEDOWN;
scEndScroll: WParam := SB_ENDSCROLL;
scPosition: WParam := SB_THUMBPOSITION;
scTrack: WParam := SB_THUMBTRACK;
else
exit;
end;
WParam := WParam or word(ScrollPos) shl 16;
RichEdit1.Perform(WM_VSCROLL, WParam, 0);
end;
procedure TForm1.RichEdit1Change(Sender: TObject);
var
ScrollInfo: TScrollInfo;
begin
FillChar(ScrollInfo, SizeOF(ScrollInfo), 0);
ScrollInfo.cbSize := SizeOf(ScrollInfo);
ScrollInfo.fMask := SIF_RANGE or SIF_PAGE or SIF_POS;
if GetScrollInfo(RichEdit1.Handle, SB_VERT, ScrollInfo) then
begin
ScrollBar1.Max := ScrollInfo.nMax;
ScrollBar1.Min := ScrollInfo.nMin;
ScrollBar1.PageSize := ScrollInfo.nPage;
ScrollBar1.Position := ScrollInfo.nPos;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
RichEdit1Change(self);
end;
它将Scrollbar1:TScrollBar与RichEdit的滚动信息同步,并对其进行任何更改,并模拟来自滚动条的WM_VSCROLL消息。但是,它需要RichEdit可以看到自己的垂直滚动条,因为滚动信息不会更新(如果它不可见)。
AFAIK没有其他方法可以获取滚动数据,只是因为RichEdit控件在不需要时不会创建它们(在ScrollBars属性中为ssNone)。