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.