Anfang des Inhaltsbereichs

Cursor vom Programm aus setzen Dokument im Navigationsbaum lokalisieren

Der Cursor kann vom ABAP-Programm aus dynamisch in der aktuellen Liste gesetzt werden um dem Benutzer die Eingabe in eingabebereite Felder oder die Feld- oder Zeilenauswahl zu erleichtern. Falls eingabebereite Felder auf der Liste vorkommen, setzt das System den Cursor standardmäßig auf das erste Eingabefeld.

Man setzt den Cursor mit der Anweisung SET CURSOR. Diese Anweisung setzt den Cursor in der zuletzt fertiggestellten Liste. Während der Erstellung der Grundliste ist dies immer die Grundliste selbst. In einer Verzweigungsliste ist dies die vorhergehende Liste.

Die Anweisung SET CURSOR erlaubt absolutes, feldbezogenes oder zeilenbezogenes Setzen des Cursors.

Cursor explizit setzen

Um den Cursor auf eine explizite Position im Ausgabefenster zu setzen, verwendet man SET CURSOR wie folgt:

SET CURSOR <col> <lin>.

Diese Anweisung setzt den Cursor in die Spalte <col> der Zeile <lin> des Ausgabefensters.

Der Cursor wird nur auf in der Anzeige sichtbare Positionen gesetzt. Für nichtsichtbare Positionen ignoriert das System die Anweisung. Um außerhalb des Fensters liegende Teile der Liste zu markieren muß daher erst die SCROLL-Anweisung verwendet werden, um zu blättern.

Ebenso kann der Cursor nur auf beschriebene Listenzeilen gesetzt werden. Dazu gehören auch durch SKIP übersprungene Zeilen, nicht aber Linien. Liegt <lin> unterhalb der untersten Listenzeile, wird der Cursor auf die letzte Zeile gesetzt.

Beispiel

REPORT demo_list_set_cursor_1 NO STANDARD PAGE HEADING LINE-SIZE 80.

SET PF-STATUS 'SCROLLING'.

NEW-LINE NO-SCROLLING.
WRITE 'Input Fields:'.
NEW-LINE NO-SCROLLING.
WRITE '-------------'.

NEW-LINE.
DO 5 TIMES.
  WRITE:  ' Input', (1) sy-index, '   ' INPUT ON NO-GAP.
ENDDO.

FORMAT INPUT OFF.
SET CURSOR 11 3.

AT USER-COMMAND.
  CASE sy-ucomm.
    WHEN 'LEFT'.
      IF sy-staco > 1.
        SCROLL LIST LEFT BY 12 PLACES.
      ENDIF.
    WHEN 'RGHT'.
      IF sy-staco < 40.
        SCROLL LIST RIGHT BY 12 PLACES.
      ENDIF.
  ENDCASE.
  SET CURSOR 11 3.

Dieses Programm erstellt eine Grundliste mit fünf eingabebereiten Feldern. Der Cursor wird auf das erste Eingabefeld positioniert. Mit den Drucktasten LEFT und RIGHT kann der Benutzer die Liste horizontal blättern, wobei der Cursor nach jedem Blättern wieder auf einem Eingabefeld steht.

Cursor feldbezogen setzen

Um den Cursor auf ein bestimmtes Feld einer Zeile der Liste im Anzeigefenster zu setzen, verwendet man SET CURSOR wie folgt:

SET CURSOR FIELD <f> LINE <lin> [OFFSET <off>].

Diese Anweisung setzt den Cursor in der Zeile <lin> in das Feld dessen Name in <f> enthalten ist. Kommt ein Feld mehrfach in einer Zeile vor, wird der Cursor in das erste entsprechende Feld gesetzt. Das System ignoriert die Anweisung, wenn das Feld nicht in der Zeile vorkommt oder es nicht im sichtbaren Bereich des Fensters liegt. Mit der SCROLL-Anweisung kann die Zeile in den sichtbaren Bereich des Fensters geblättert werden.

Mit dem Zusatz OFFSET setzt man den Cursor an die durch <off> bestimmte Stelle des Feldes in <f>. Dabei bedeutet <off> = 0 die erste Stelle.

Die Kopfzeilen der Liste müssen beim Setzen des Cursors berücksichtigt werden.

Beispiel

REPORT demo_list_set_cursor_2 LINE-SIZE 50.

DATA: input1(5) TYPE c VALUE '*****',
      input2(5) TYPE c VALUE '*****',
      input3(5) TYPE c VALUE '*****'.

SET PF-STATUS 'INPUT'.

WRITE   'Input Fields:'.
WRITE / '-------------'.
SKIP.

WRITE: 'Input 1', input1 INPUT ON,
     / 'Input 2', input2 INPUT ON,
     / 'Input 3', input3 INPUT ON.

AT USER-COMMAND.
  CASE sy-ucomm.
    WHEN 'INP1'.
      SET CURSOR FIELD 'INPUT1' LINE 6 OFFSET 4.
    WHEN 'INP2'.
      SET CURSOR FIELD 'INPUT2' LINE 7 OFFSET 4.
    WHEN 'INP3'.
      SET CURSOR FIELD 'INPUT3' LINE 8 OFFSET 4.
  ENDCASE.

Dieses Programm erstellt eine Grundliste auf der drei eingabebereite Felder ausgegeben werden. Im Status INPUT sind die Funktionstasten F5 , F6 und F7 sowie die Drucktastenleiste mit den Funktionscodes INP1, INP2 und INP3 belegt. Durch Auswahl einer dieser Funktionen wird der Cursor beim Ereignis AT USER-COMMAND auf Stelle vier des entsprechenden Eingabefelds positioniert.

Cursor zeilenbezogen setzen

Um den Cursor auf eine bestimmte Zeile der Liste im Anzeigefenster zu setzen, verwendet man SET CURSOR wie folgt:

SET CURSOR LINE <lin> [OFFSET <off>].

Diese Anweisung setzt den Cursor in die Zeile <lin>. Das System ignoriert die Anweisung, wenn die Zeile nicht in der Liste vorkommt oder wenn die Zeile nicht im sichtbaren Bereich des Fensters liegt. Die SCROLL-Anweisung kann verwendet werden, um die Zeile in den sichtbaren Bereich des Fensters zu blättern.

Mit dem Zusatz OFFSET setzt man den Cursor an die durch <off> bestimmte Spalte der Zeile <lin>. Dabei bedeutet <off> = 0 die erste Spalte. Das System ignoriert die Anweisung, wenn die Spalte außerhalb des sichtbaren Bereichs der Liste liegt.

Die Kopfzeilen der Liste müssen beim Setzen des Cursors berücksichtigt werden.

Beispiel

REPORT demo_list_set_cursor_3 LINE-SIZE 30
                              NO STANDARD PAGE HEADING.

DATA: inp(2) TYPE c, top(2) TYPE c.

SET PF-STATUS 'LINE_NUMBER'.

DO 50 TIMES.
  WRITE: / 'Line ', (2) sy-index.
ENDDO.

TOP-OF-PAGE.
  WRITE: 'Line number:', inp INPUT ON.
  ULINE.
  SKIP.

AT USER-COMMAND.
  DESCRIBE LIST PAGE 1 TOP-LINES top.
  CASE sy-ucomm.
    WHEN 'LINE'.
      READ LINE 1 FIELD VALUE inp.
      SCROLL LIST TO PAGE 1 LINE inp.
      inp = inp + top.
      SET CURSOR LINE inp OFFSET 6.
  ENDCASE.

Dieses Programm erzeugt ein Grundliste mit einem Eingabefeld und einer Reihe von Zeilen.

Im Status LINE_NUMBER belegt der Funktionscode LINE (Text LINE NUMBER) die Funktionstaste F5 und eine Taste der Drucktastenleiste. Füllt der Benutzer das eingabebereite Feld mit einer Zahl und wählt LINE NUMBER, wird die Liste zur angebenen Zeile geblättert und der Cursor dort positioniert:

Das eingabebereite Feld wird über READ LINE ausgelesen. Für die Positionierung des Cursors wird die Größe des Seitenkopfs mit Hilfe von DESCRIBE LIST berücksichtigt. In diesem Beispiel wird stark von der automatischen Typkonvertierung Gebrauch gemacht.

 

 

Ende des Inhaltsbereichs