Delphi 如何使用TScrollbar进行编辑;

Delphi 如何使用TScrollbar进行编辑;,delphi,richedit,scrollbars,Delphi,Richedit,Scrollbars,如何使用Tscrollbar进行编辑 我的目的是在不同的面板中分离滚动条 有可能吗?我不确定我是否理解这个问题,但如果我答对了,最好的办法可能是在滚动框中进行丰富的编辑,并使用windows消息将两者同步 安德里亚你可以试试这个: procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); var WParam: longint; begin c

如何使用Tscrollbar进行编辑

我的目的是在不同的面板中分离滚动条


有可能吗?

我不确定我是否理解这个问题,但如果我答对了,最好的办法可能是在滚动框中进行丰富的编辑,并使用windows消息将两者同步

安德里亚

你可以试试这个:

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;
当滚动条1:TScrollBar发生任何更改时,它会将滚动条与RichEdit的滚动信息同步,并模拟来自滚动条的WM_VSCROLL消息。但是,它要求RichEdit具有自己的可见垂直滚动条,因为如果滚动信息不可见,则不会更新


没有其他方法可以获取滚动数据,这仅仅是因为RichEdit控件在不需要时不会创建滚动数据(ScrollBars属性中的ssNone)。

我认为
的情况不正确。相反,您可以只执行
WParam:=ord(ScrollCode)