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:

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 Namen von 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