Home » Tipps & Tricks » Komponenten » TRichEdit/TMemo/TEdit » In einem Memo-Feld navigieren

In einem Memo-Feld navigieren

Dieser Artikel zeigt, wie Sie in einem Memo-Feld vertikal und horizontal scrollen können. Dazu muss die Botschaft WM_VSCROLL zum vertikalen und WM_HSCROLL zum horizontalen Scrollen an das Handle des Memo-Feldes gesendet werden. Dabei gibt der erste Parameter die Art des Scrollen an:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Perform(WM_VSCROLL, SB_TOP, 0); 
end;

In diesem Beispiel wird das Memo-Feld komplett nach oben gescrollt. Außer SB_TOP sind noh folgende Werte möglich:

  • SB_BOTTOM – Ans Ende scrollen
  • SB_LINEUP – Eine Zeile nach oben scrollen
  • SB_LINEDOWN – Eine Zeile nach unten scrollen
  • SB_PAGEUP – Eine Seite nach oben scrollen (Bild hoch)
  • SB_PAGEDOWN – Eine Seite nach unten scrollen (Bild runter)

Bewegungen innerhalb einer Zeile sind mit WM_HSCROLL möglich. Die Parameter für Scroll-Art sind dabei die gleichen.Um direkt zu einer „Koordinate“ in einem Memo-Feld zu springen, nutzen Sie die Botschaft EM_SCROLLCARET, um zu einer Cursorposition zu springen.Folgende Prozedur erwartet als ersten Parameter das entsprechende Memo-Feld, wobei es sich auch um ein TRichEdit handeln kann. Bei dem Parameter X handelt es sich um die Zeilenangabe (beginnend bei 0), bei Y um die Position innerhalb einer Zeile.

procedure SetCursorInMemo(const AMemo: TCustomMemo; X, Y: Integer);
begin
  AMemo.SelStart:=AMemo.Perform(EM_LineIndex,X,0)+Y;
  AMemo.Perform(EM_SCROLLCARET, 0, 0);
  AMemo.SetFocus;
end;

Die Prozedur setzt zunächst den Cursor an die gewünschte Stelle und scrollt diesen dann in den sichtbaren Bereich.