Tscrollbar を Richedit に使用する方法。
私の目的は、スクロールバーを別のパネルに分離することです。
出来ますか?
あなたはこれを試すことができます:
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)。
質問を理解しているかどうかはわかりませんが、正しく理解できれば、スクロール ボックスにリッチ エディットを配置し、Windows メッセージを使用して 2 つを同期させることが最善の策です。
アンドレア