RichEdit - scrollbars

2013-06-25 22:30
class
0

Witam.

Jak przewinąć na samą górę - na początek zawartość TRichEdit po załadowaniu ?

Help.

edytowany 1x, ostatnio: olesio, 2016-12-13 18:26

Pozostało 580 znaków

2013-06-25 23:23
0

with RichEdit1 do
begin
  SetFocus();
  SelStart := 0;
  SelLength := 0;
end;

Na przyszłość najpierw przeszukaj sieć i wypróbuj kody w niej znalezione (a jest ich masa).</del>


Najkrótsza działająca i przetestowana przed chwilą wersja:

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.


edytowany 11x, ostatnio: furious programming, 2013-06-26 13:24
"Na przyszłość najpierw (..) wypróbuj kody" - a kolega sprawdził zaproponowane przez siebie rozwiązanie?:P, Niestety sposób z użyciem SelStart i SelLength nie działa...:-/ - marogo 2013-06-25 23:32
Mam rozwiązanie - post poprawiony; - furious programming 2013-06-25 23:49
Teraz działa :) - marogo 2013-06-26 09:21
Trochę się pospieszyłem - wszedłem w Google, wpisałem co trzeba i wkleiłem tutaj; Pierwsze wyniki w Google dawały linki do wątków, gdzie takie rozwiązanie było przedstawiane i ludziom działało, ale jak sprawdziłem po Twoim komentarzu faktycznie nic z tego; Wystarczyło chwilę posiedzieć na MSDN i popróbować różnych komunikatów i w końcu trafiłem :D - furious programming 2013-06-26 13:00
To już ostatnia modyfikacja - przedstawiłem połączenie różnych komunikatów z różnymi wartościami dla WParam; Zadanie odrobione ;) - furious programming 2013-06-26 13:20

Pozostało 580 znaków

2013-06-25 23:38
0

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); 

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0