Witam.
Jak przewinąć na samą górę - na początek zawartość TRichEdit po załadowaniu ?
Help.
Witam.
Jak przewinąć na samą górę - na początek zawartość TRichEdit po załadowaniu ?
Help.
procedure TForm1.Button1Click(Sender: TObject);
begin
RichEdit1.Perform(EM_SETSEL, 0, 0); //przesunięcie kursora na początek dokumentu
RichEdit1.Perform(EM_SCROLL, SB_TOP, 0); //przewinięcie ekranu kontrolki do samej góry
end;
Poprawiam jeszcze raz, bo złego komunikatu użyłem (choć i tak zadziałało);
Dodatkowo możesz także skorzystać z komunikatów WM_VSCROLL
oraz WM_HSCROLL
także za pomocą metody Perform
:
Msg | WParam | LParam | Przesunięcie |
---|---|---|---|
WM_VSCROLL | SB_TOP | 0 | do samej góry dokumentu |
SB_BOTTOM | 0 | do samego dołu dokumentu | |
SB_LINEUP | 0 | o jedną linię w górę | |
SB_LINEDOWN | 0 | o jedną linię w dół | |
SB_PAGEUP | 0 | o jeden ekran w górę | |
SB_PAGEDOWN | 0 | o jeden ekran w dół | |
WM_HSCROLL | SB_LEFT | 0 | do lewej krawędzi dokumentu |
SB_RIGHT | 0 | do prawej krawędzi dokumentu | |
SB_LINELEFT | 0 | o jedną kolumnę w lewo | |
SB_LINERIGHT | 0 | o jedną kolumnę w prawo | |
SB_PAGELEFT | 0 | o jeden ekran w lewo | |
SB_PAGERIGHT | 0 | o jeden ekran w prawo | |
i innych; Opisy ich zastosowania są na MSDN. |
Oto działająca procedura:
Procedure ScrollRichEdit(RichEdit: TRichEdit; ScrollToBottom: Boolean; DeltaLines:Integer); //przewinięcie RichEdit-a o DeltaLines wierszy w dół lub w górę
Var
ScrollMessage:TWMVScroll;
i:Integer;
Begin
ScrollMessage.Msg:=WM_VScroll;
For i:=1 to DeltaLines do
Begin
If ScrollToBottom then ScrollMessage.ScrollCode:=sb_LineDown //przewinięcie 1 wiersz w dół
else ScrollMessage.ScrollCode:=sb_LineUp; //przewinięcie 1 wiersz w górę
ScrollMessage.Pos:=0;
RichEdit.Dispatch(ScrollMessage);
End;
End;
Aby przewinąć do początku RichEdit-a należy wywołać procedurę tak:
ScrollRichEdit(RichEdit1, false, RichEdit1.Lines.Count);
Aby przewinąć do końca RichEdita należy wywołać procedurę tak:
ScrollRichEdit(RichEdit1, true, RichEdit1.Lines.Count);