1

Tscrollbar を Richedit に使用する方法。

私の目的は、スクロールバーを別のパネルに分離することです。

出来ますか?

4

2 に答える 2

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には独自の垂直スクロールバーが表示されている必要があります。

スクロールデータを取得する他の方法はありません。RichEditコントロールが必要のない場合にデータを作成しないからです(ScrollBarsプロパティのssNone)。

于 2011-06-02T10:06:30.157 に答える
1

質問を理解しているかどうかはわかりませんが、正しく理解できれば、スクロール ボックスにリッチ エディットを配置し、Windows メッセージを使用して 2 つを同期させることが最善の策です。

アンドレア

于 2011-06-02T09:09:27.667 に答える