DEFINE WINDOW

#### Search Results

Search

# DEFINE WINDOW

`DEFINE WINDOW` window-name
|  |  |  | `AUTO` |  |
`SIZE` |  | `QUARTER`
|  | operand1 `*` operand2
| `BASE` |  |  | `CURSOR` |  |
| `TOP` |  |  | `LEFT` |
`BOTTOM` | `RIGHT`
operand3 / operand4 |
[`REVERSED` [(`CD=`background-color)]]
[`TITLE` operand5]
| `CONTROL` |  | `WINDOW` |  |
`SCREEN`
| `FRAMED` |  | [`ON`] [( `CD=`frame-color)] [position-clause] |
`OFF`

Dieses Dokument behandelt folgende Themen:

- Funktion

- Syntax-Beschreibung

- Schutz von Eingabefeldern in einem Fenster

- Aufrufen unterschiedlicher Fenster

- Beispiel

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Verwandte Statements: `INPUT` | `REINPUT` | `SET WINDOW`

Gehört zur Funktionsgruppe: Bildschirmgenerierung für interaktive Verarbeitung

## Funktion

Das `DEFINE WINDOW`-Statement dient dazu, Größe, Position und Attribute eines Bildschirmfensters (Window) zu definieren.

Ein Fenster ist der Ausschnitt einer von einem Programm erzeugten logischen Seite, der auf dem Bildschirm zu sehen ist. Das Fenster ist ständig vorhanden, auch wenn Sie sich dessen nicht bewusst sind, weil die Größe des Fensters, solange Sie sie nicht anders definieren, mit der Größe Ihres Bildschirms identisch ist.

Mit einem `DEFINE WINDOW`-Statement wird ein Fenster nicht aktiviert; dies geschieht mit einem `SET WINDOW`-Statement oder der `WINDOW`-Klausel eines `INPUT`-Statements.

Siehe auch den Abschnitt Bildschirmgestaltung/Fenster im Kapitel Gestaltung von Benutzeroberflächen von Anwendungen im Leitfaden zur Programmierung.

Anmerkung
Es gibt stets nur ein Natural-Fenster, und zwar das jeweils neueste. Vorherige Fenster mögen auf dem Bildschirm noch sichtbar sein, sind aber nicht länger aktiv und werden von Natural ignoriert. Sie können Eingaben nur im jeweils neuesten Fenster machen. Sollte der Platz hierzu nicht ausreichen, müssen Sie das Fenster vorher entsprechend vergrößern.

## Syntax-Beschreibung

Operanden-Definitionstabelle:

Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition
--- | --- | --- | --- | ---
operand1 | C | S |  |  |  |  |  | N | P | I |  |  |  |  |  |  |  |  | ja | nein
operand2 | C | S |  |  |  |  |  | N | P | I |  |  |  |  |  |  |  |  | ja | nein
operand3 | C | S |  |  |  |  |  | N | P | I |  |  |  |  |  |  |  |  | ja | nein
operand4 | C | S |  |  |  |  |  | N | P | I |  |  |  |  |  |  |  |  | ja | nein
operand5 | C | S |  |  |  | A | U |  |  |  |  |  |  |  |  |  |  |  | ja | nein

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`window-name` | Der window-name identifiziert das Fenster. Der Name darf bis zu 32 Stellen lang sein. Für Fensternamen gelten die gleichen Namenskonventionen wie für Benutzervariablen. Siehe Namenskonventionen für Benutzervariablen in der Dokumentation Natural benutzen.
`SIZE` | Mit der `SIZE`-Klausel bestimmen Sie die Größe des Fensters. Anmerkung Auf Großrechnern benötigt Natural zusätzliche Spalten für sogenannte Attribut-Bytes, um Daten auf dem Bildschirm anzeigen zu können (auf anderen Plattformen sind solche Attribut-Bytes nicht erforderlich). Dadurch ist auf einem Großrechner der von einem Fenster überlagerte Bildschirmbereich breiter und der innerhalb eines Fensters sichtbare Seitenausschnitt schmäler als auf anderen Plattformen. Beispiel: Angenommen, die Größe eines Fensters ist mit `SIZE 5 * 15` definiert (d.h. mit einer Breite von 15 Spalten): Auf Großrechnern ist der vom Fenster überlagerte Bildschirmbereich 16 Spalten breit; der innerhalb des Fensters sichtbare Seitenausschnitt ist 14 Spalten breit ohne Rahmen bzw. 10 Spalten mit Rahmen. Auf anderen Plattformen ist der von dem Fenster überlagerte Bildschirmbereich 15 Spalten breit, die Größe des sichtbaren Bereichs innerhalb des Fensters ist 15 Spalten ohne Rahmen bzw. 13 Spalten mit Rahmen breit.
`SIZE AUTO` | Die Größe des Fensters wird von Natural automatisch zur Laufzeit festgelegt. Die Größe wird wie folgt durch die in das Fenster hineingenerierten Daten bestimmt: Die Zeilenanzahl des Fensters entspricht der Anzahl der generierten `INPUT`-Zeilen (plus gegebenenfalls der PF-Tastenleiste, der Meldungszeile und der Statistikzeile/Infoline). Die Spaltenanzahl des Fensters wird durch die längste `INPUT`-Zeile bestimmt: Natural sucht, ausgehend von den Zeilenenden, nach dem signifikanten Byte, das am weitesten rechts in einer Zeile steht. Daher kann es vorkommen, dass reine Eingabefelder oder modifizierbare Felder (`AD=A` bzw. `AD=M`) abgeschnitten werden; um dies zu verhindern, können Sie entweder einen einbuchstabigen Text hinter so ein Feld stellen oder die gewünschte Fenstergröße explizit angeben mit: `SIZE` operand1 * operand2 Wenn Sie die `SIZE`-Klausel weglassen, gilt standardmäßig `SIZE AUTO`. Anmerkung Der Titel ist nicht Bestandteil der Fensterdaten. Deshalb wird er abgeschnitten, wenn die Fenstergröße festgelegt worden ist, wie oben beschrieben, und der Titel länger als das Fenster ist.
`SIZE QUARTER` | Die Größe des Fensters entspricht einem Viertel der physischen Bildschirmgröße.
`SIZE operand1 * operand2` | Die Größe des Fensters beträgt n Zeilen mal n Spalten. operand1 bestimmt die Anzahl der Zeilen, operand2 die Anzahl der Spalten. Die beiden Operanden dürfen keine Dezimalstellen enthalten. Ist das Fenster gerahmt (`FRAMED`), so schließt die angegebene Größe den Rahmen mit ein. Die kleinstmögliche Fenstergröße ist: ohne Rahmen: 2 Zeilen mal 10 Spalten, mit Rahmen: 4 Zeilen mal 13 Spalten. Die größtmögliche Fenstergröße ist die Größe des physischen Bildschirms.
`BASE` | Mit der `BASE`-Klausel bestimmen Sie die Position des Fensters auf dem physischen Bildschirm. Lassen Sie die `BASE`-Klausel weg, gilt standardmäßig `BASE CURSOR`.
`BASE CURSOR` | Platziert die obere linke Ecke des Fensters an die aktuelle Cursor-Position. Die Cursor-Position ist die physische Position des Cursors auf dem Bildschirm. Wenn es aufgrund der Größe des Fensters nicht möglich ist, das Fenster an die Cursor-Position zu platzieren, platziert Natural es automatisch so dicht wie möglich an die gewünschte Position.
`BASE TOP/BOTTOM LEFT/RIGHT` | Platziert das Fenster in die obere linke, untere linke, obere rechte bzw. untere rechte Ecke des physischen Bildschirms.
`BASE operand3/operand4` | Platziert die obere linke Ecke des Fensters in die angegebene Zeile/Spalte auf dem physischen Bildschirm. operand3 bestimmt die Zeilennummer, operand4 die Spaltennummer. Die beiden Operanden dürfen keine Dezimalstellen enthalten. Ist es aufgrund der Größe des Fensters nicht möglich, das Fenster an die angegebene Position zu platzieren, erhalten Sie eine Fehlermeldung.
`REVERSED` | `REVERSED` bewirkt, dass das Fenster invers angezeigt wird (falls der verwendete Bildschirm dies ermöglicht; falls nicht, wird `REVERSED` ignoriert).
`REVERSED CD= background-color` | Dies bewirkt, dass das Fenster invers und der Fensterhintergrund in der angegebenen Farbe (background-color) angezeigt wird (falls der verwendete Bildschirm dies ermöglicht; falls nicht, wird die betreffende Angabe ignoriert). Informationen über gültige Farbcodes. Session-Parameter `CD` in der Parameter-Referenz-Dokumentation.
`TITLE operand5` | Mit der `TITLE`-Klausel können Sie eine Überschrift für das Fenster angeben. Die angegebene Überschrift (operand5) wird zentriert in der oberen Rahmenzeile des Fensters angezeigt. Die Überschrift kann entweder als Textkonstante (in Apostrophen) oder als Inhalt einer Benutzervariablen angegeben werden. Ist die Überschrift länger als das Fenster, wird sie abgeschnitten. Die Überschrift wird nur angezeigt, wenn das Fenster gerahmt (`FRAMED`) ist; wenn `FRAMED OFF` angegeben ist, wird die `TITLE`-Klausel ignoriert. Anmerkung Wenn der Titel nachfolgende Leerzeichen enthält, werden diese entfernt. Wenn das erste Zeichen des Titels ein Leerzeichen ist, wird hinter dem Titel automatisch ein Leerzeichen angehängt.
`CONTROL` | Mit der `CONTROL`-Klausel bestimmen Sie, ob die PF-Tastenleiste, die Meldungszeile und die Statistikzeile innerhalb oder außerhalb des Fensters angezeigt werden.
`CONTROL WINDOW` | `CONTROL WINDOW` zeigt die Zeilen innerhalb des Fensters an. Wenn Sie die `CONTROL`-Klausel weglassen, gilt standardmäßig `CONTROL WINDOW`.
`CONTROL SCREEN` | `CONTROL SCREEN` zeigt die Zeilen auf dem vollen physischen Schirm außerhalb des Fensters an.
`FRAMED` | Standardmäßig, d.h. wenn Sie die `FRAMED`-Klausel weglassen, wird das Fenster mit Rahmen angezeigt. Die obere und die untere Rahmenlinie sind cursor-sensitiv: Sie können im Fenster vor, zurück, nach links oder rechts blättern, indem Sie einfach den Cursor auf das entsprechende Symbol (<, −, +, oder >; siehe position-clause unten) stellen und FREIG drücken. Wenn keine Symbole angezeigt werden, können Sie im Fenster vor- oder zurückblättern, indem Sie den Cursor in die obere (zum Zurückblättern) bzw. untere (zum Vorblättern) Rahmenlinie platzieren und FREIG drücken. Anmerkung Falls das Fenster kleiner als 4 Zeilen mal 13 Spalten ist, ist der Rahmen nicht sichtbar.
`FRAMED OFF` | Wenn Sie `FRAMED OFF` angeben, wird die Rahmung und alles mit dem Rahmen zusammenhängende (Überschrift für das Fenster und Positionierungsinformationen) ausgeschaltet.
`FRAMED (CD= frame-color)` | Dies bewirkt, dass der Fensterrahmen in der angegebenen Farbe (frame-color) angezeigt wird (falls ein Farbbildschirm verwendet wird; falls nicht, wird die Farbangabe ignoriert). Informationen über gültige Farbcodes siehe Session-Parameter `CD` in der Parameter-Referenz. Anmerkung Bei Natural for Windows wird diese Angabe ignoriert.
`position-clause` | Die `POSITION`-Klausel wird nur auf Großrechnern ausgewertet: auf allen anderen Plattformen wird sie ignoriert. Einzelheiten, siehe POSITION-Klausel weiter unten.

### POSITION-Klausel

Die `POSITION`-Klausel wird nur auf Großrechnern ausgewertet, auf allen anderen Plattformen wird sie ignoriert.

`POSITION` |  | `SYMBOL` |  | `TOP` |  | [`AUTO`] [`SHORT`] |  | `LEFT` |  |
`BOTTOM` | `RIGHT`
|  | `TEXT` |  | [`MORE`] |  | `LEFT` |  |  |  |
|  |  | `RIGHT` |  |  |
`OFF`

Mit der `POSITION`-Klausel steuern Sie die Anzeige von Informationen über die Position des Fensters auf der logischen Seite: Im Rahmen des Fensters wird angezeigt, in welche Richtungen die logische Seite nach oben, unten, links und rechts über das aktuelle Fenster hinausgeht. Dies gilt nur, falls die logische Seite größer als das Fenster ist; falls nicht, wird die `POSITION`-Klausel ignoriert.

Wenn Sie die `POSITION`-Klausel nicht angeben, gilt standardmäßig `POSITION SYMBOL TOP RIGHT`.

Syntax-Element | Beschreibung
--- | ---
`POSITION SYMBOL` | Bewirkt, dass die Positionsinformationen in Form von Symbolen angezeigt werden: `More: < − + >` Die Informationen werden in der oberen und/oder unteren Rahmenzeile angezeigt.
`TOP/BOTTOM` | Bestimmt, ob die Positionsinformationen in der oberen oder unteren Rahmenzeile angezeigt werden.
`AUTO` | Ist nur relevant, wenn die logische Seite horizontal vollständig im Fenster sichtbar ist, d.h. wenn nur `-` und/oder `+` angezeigt werden soll. In diesem Fall schaltet `AUTO` automatisch von den Symbolen auf die Wörter `Top`, `Bottom` bzw. `More` um.
`SHORT` | Bewirkt, dass das Wort `More:` vor den Symbolen `< − + >` nicht angezeigt wird.
`LEFT/RIGHT` | Bestimmt, ob die Positionsinformationen im linken oder im rechten Teil der Rahmenzeile angezeigt werden.
`POSITION TEXT` | Bewirkt, dass die Positionsinformationen in der oberen und/oder unteren Rahmenzeile in Textform angezeigt werden, und zwar mit den Wörtern `More`, `Top` und `Bottom`. Die Wörter sind sprachabhängig und können durch entsprechendes Setzen des Sprachcodes auch in einer anderen Sprache angezeigt werden.
`POSITION TEXT MORE` | Unterdrückt die Wörter `Top` und `Bottom` und zeigt nur das Wort `More` je nach Situation in der oberen oder unteren Rahmenzeile oder in beiden an.
`LEFT/RIGHT` | Bestimmt, ob die Positionsinformationen im linken oder rechten Teil der Rahmenzeile angezeigt werden.
`POSITION OFF` | Bewirkt, dass überhaupt keine Positionsinformationen angezeigt werden.

## Schutz von Eingabefeldern in einem Fenster

Für Eingabefelder (`AD=A` oder `AD=M`), die sich nicht vollständig innerhalb des Fensters befinden, gilt folgendes:

- Ein Eingabefeld, dessen Anfang außerhalb des Fensters liegt, wird immer zu einem geschützten Feld gemacht.

- Ein Eingabefeld, das im Fenster beginnt, aber außerhalb des Fensters endet, wird nur dann geschützt, wenn der Wert, den es enthält, nicht vollständig innerhalb des Fensters sichtbar ist. Bitte beachten Sie, dass es hierbei darauf ankommt, ob die Wertlänge, nicht die Feldlänge, über das Fenster hinausgeht. Füllzeichen (wie mit dem Profilparameter `FC` angegeben) zählen nicht als Teil des Wertes.

Falls Sie in ein derart geschütztes Eingabefeld Eingaben machen möchten, müssen Sie zunächst die Fenstergröße so ändern, dass sich der Anfang des Feldes/das Ende des Feldwertes innerhalb des Fensters befindet.

## Aufrufen unterschiedlicher Fenster

Ein `DEFINE WINDOW`-Statement darf nicht innerhalb einer logischen Bedingung stehen. Wollen Sie in Abhängigkeit von einer Bedingung unterschiedliche Fenster aufrufen, verwenden Sie dazu verschiedene `SET WINDOW`-Statements (bzw. `INPUT`-Statements mit `WINDOW`-Klausel) in einer Bedingung.

## Beispiel

    ** Example 'DWDEX1': DEFINE WINDOW
    ************************************************************************
    DEFINE DATA LOCAL
    01 #I (P3)
    END-DEFINE
    *
    SET KEY PF1='%W<<' PF2='%W>>' PF4='%W--' PF5='%W++'
    *
    DEFINE WINDOW WIND1
           SIZE QUARTER
           BASE TOP RIGHT
           FRAMED ON POSITION SYMBOL AUTO
    *
    SET WINDOW 'WIND1'
    FOR #I = 1 TO 10
      WRITE 25X #I 'THIS IS SOME LONG TEXT' #I
    END-FOR
    *
    END

Ausgabe des Programms `DWDEX1`:

                                            +------------------------More:     + >+
    > r                                     ! Page      1                         !
    All    ....+....1....+....2....+....3.. !                                     !
      0010 ** Example 'DWDEX1': DEFINE WIND !                             1 THIS  !
      0020 ******************************** !                             2 THIS  !
      0030 DEFINE DATA LOCAL                !                             3 THIS  !
      0040 01 #I (P3)                       !                             4 THIS  !
      0050 END-DEFINE                       !                             5 THIS  !
      0060 *                                !                             6 THIS  !
      0070 SET KEY PF1='%W<<' PF2='%W>>' PF !                             7 THIS  !
      0080 *                                ! MORE                                !
      0090 DEFINE WINDOW WIND1              +-------------------------------------+
      0100        SIZE QUARTER
      0110        BASE TOP RIGHT
      0120        FRAMED ON POSITION SYMBOL AUTO
      0130 *
      0140 SET WINDOW 'WIND1'
      0150 FOR #I = 1 TO 10
      0160   WRITE 25X #I 'THIS IS SOME LONG TEXT' #I
      0170 END-FOR
      0180 *
      0190 END
      0200
           ....+....1....+....2....+....3....+....4....+....5....+... S 19   L 1

### On this page

- Funktion
- Syntax-Beschreibung
- Schutz von Eingabefeldern in einem Fenster
- Aufrufen unterschiedlicher Fenster
- Beispiel