diff options
Diffstat (limited to 'doc/menugenerator/menu-generator handbuch.7')
-rw-r--r-- | doc/menugenerator/menu-generator handbuch.7 | 367 |
1 files changed, 0 insertions, 367 deletions
diff --git a/doc/menugenerator/menu-generator handbuch.7 b/doc/menugenerator/menu-generator handbuch.7 deleted file mode 100644 index 2e6f0ba..0000000 --- a/doc/menugenerator/menu-generator handbuch.7 +++ /dev/null @@ -1,367 +0,0 @@ -#block##pageblock# -#pagenr("%",1)##setcount(1)##count per page# -#headeven# -gs-Menu-Generator -#center#____________________________________________________________ - -#end# -#headodd# -#right#gs-Menu-Generator -#center#____________________________________________________________ - -#end# -#bottomeven# -#center#____________________________________________________________ -7 - % #right#ERGOS -#end# -#bottomodd# -#center#____________________________________________________________ -ERGOS #right# 7 - % -#end# -#ib#7 Eigene Fenster und Fensteroperationen #ie# - - -In Kapitel 5.11 haben wir Ihnen gezeigt, wie Sie innerhalb des Menus ein Fenster -(das Menufenster) öffnen können. Innerhalb dieses Bereichs stehen Ihnen die -wesentlichen Ein- und Ausgabeoperationen zur Verfügung, die Sie auch sonst vom -Bildschirm her kennen. Auf die Größe des Menufensters können Sie allerdings keinen -Einfluß nehmen, da die Fenstergröße automatisch vom System (gs-DIALOG) festge -legt wird - je nachdem, ob Sie mit einem Menu oder mit geschachtelten Menus -arbeiten. -Auf die Einschränkungen bzw. Abweichungen gegenüber den Möglichkeiten, die Sie -bei Benutzung des ganzen Bildschirms haben, haben wir Sie ausdrücklich hingewie -sen: So ist es nicht möglich, den Text innerhalb eines Fensters zu rollen (scrolling); -statt dessen wird bei Überschreiten der unteren Fenstergrenze der Fensterinhalt -gelöscht und die Ausgabe oben im "neuen" Fenster fortgesetzt. -Als wir gs-DIALOG konzipierten und die ersten Anwendungen unter dieser Benutzer -schnittstelle entwarfen, fiel uns auf, daß es sehr günstig für die Strukturierung des -Bildschirms innerhalb der Anwendungsprogramme ist, wenn man den Bildschirm in -Bereiche (Fenster) einteilen und den Fenstern entsprechende Funktionen zuweisen -kann (z.B. Eingabe-, Informations-, Kontroll-Fenster etc.). Sinnvoll ist es dann, auch -die entsprechenden Ein-/Ausgaberoutinen zur Verfügung zu haben, die sich auf die -einzelnen Fenster beziehen. - -In diesem Kapitel werden wir Ihnen zeigen, wie Sie eigene Fenster definieren und -darin Ein- und Ausgaben realisieren können. Für die Fenster gelten die gleichen -Einschränkungen wie für das Menufenster - d.h. ein Rollen des Textes (scrolling) ist -nicht möglich. Die Fensterposition und -größe innerhalb des Bildschirms können Sie -aber festlegen. - - -#ib#7.1 Definition von Fenstern ('window')#ie# - -Das Fensterkonzept in gs-DIALOG ist sehr einfach gehalten: Durch die Definition -des Fenters werden nur Bereiche auf dem Bildschirm festgelegt, auf die sich -bestimmte Ein-/Ausgabeprozeduren beziehen. - -Wir wollen Ihnen die Verwendung von Fenstern wieder an einem kleinen Beispiel -verdeutlichen - bleiben wir dazu bei unserer Textverarbeitung: Für die Seitenforma -tierung müßte der Benutzer den oberen und linken Rand, die Schreibfeldbreite und -die Schreibfeldlänge festlegen. Dazu wollen wir dem Benutzer die aktuellen Werte -anzeigen und ggf. eine Neueinstellung vornehmen lassen. Ein Programm dazu könnte -so aussehen: - - -WINDOW VAR info :: window ( 2, 2, 32, 9), - frage :: window (36, 2, 40, 3), - daten :: window (36, 7, 40, 4); - -TEXT VAR oberer rand :: " 2.54", - linker rand :: " 2.54", - feldbreite :: "16.00", - feldlaenge :: "24.50"; - - -zeige aktuelle werte an; -frage nach neueinstellung. - -zeige aktuelle werte an: - page; show (info); - out (info, center (info, invers ("Aktuell eingestellte Werte:"))); - cursor (info, 2, 4); - out (info, "Oberer Rand : " + oberer rand + " cm"); - cursor (info, 2, 5); - out (info, "Linker Rand : " + linker rand + " cm"); - cursor (info, 2, 7); - out (info, "Schreibfeldbreite : " + feldbreite + " cm"); - cursor (info, 2, 8); - out (info, "Schreibfeldlänge : " + feldlaenge + " cm"). - -frage nach neueinstellung: - show (frage); - cursor (frage, 1, 1); - out (frage, center (frage, invers ("Papierformat einstellen:"))); - cursor (frage, 2, 3); - IF yes ("Neueinstellung vornehmen") - THEN neue werte erfragen - FI. - -neue werte erfragen: - show (daten); - erfrage oberen rand; - erfrage linken rand; - erfrage feldbreite; - erfrage feldlaenge. - -erfrage oberen rand: - REAL VAR neuer oberer rand; - cursor (daten, 1, 1); - out (daten, center (daten, invers ("Oberen Rand einstellen:"))); - cursor (daten, 2, 3); - out (daten, "Bitte den neuen Wert: "); - get (daten, neuer oberer rand); - oberer rand := text (neuer oberer rand, 5, 2); - cursor (info, 23, 4); - out (info, oberer rand). - -erfrage linken rand: - (* analog zu 'erfrage oberen rand *). - -erfrage feldbreite: - (* analog zu 'erfrage oberen rand *). - -erfrage feldlaenge: - (* analog zu 'erfrage oberen rand *). - - - -Am Anfang des Programms werden drei Fenster definiert. Das "Infofenster" erscheint -links oben auf dem Bildschirm, in ihm werden die aktuell eingestellten Werte ange -zeigt. Das "Fragefenster" erscheint neben dem ersten Fenster oben rechts auf dem -Bildschirm. -Beantwortet der Benutzer die dort ausgegebene Frage 'Neueinstellung vornehmen -(j/n)?' mit 'ja', dann erscheint unter dem zweiten Fenster ein drittes -("Datenfenster"). Innerhalb dieses Fensters können nacheinander die neuen Werte -eingelesen werden (nicht alle Prozeduren sind hier ausgeführt!). - -Die Definition eines Fensters erfolgt in folgender Weise: - - #ib#WINDOW#ie# VAR fenstername :: #ib#window#ie# ( x, y, xsize, ysize); - -Der Fenstervariablen wird durch 'window' eine Größe zugeordnet. Mit den ersten -beiden Werten legen Sie die linke obere Ecke des Fensters ('x' bezeichnet die Spalten, -'y' die Zeilen) auf dem Gesamtbildschirm fest. Mit 'xsize' bestimmen Sie die Fenster -breite (Spaltenzahl), mit 'ysize' die Höhe des Fensters (Zeilenzahl). Der Fenster -cursor hat die Position (1,1). -Die linke obere Ecke des ersten Fensters im Programm hat also die Position ( 2, 2). -Das Fenster ist 32 Spalten breit und 9 Zeilen hoch; es kann unter dem Namen 'info' -angesprochen werden. -Bei der Festlegung der Fenstermaße ist der Rahmen des Fensters nicht berücksich -tigt - er gehört nicht zum Fenster dazu! Haben Sie die Absicht, das Fenster mit -Rahmen auszugeben, dann sollten Sie das bei der Fensterdefinition berücksichtigen. -Wir haben es im Beispielprogramm auch gemacht: Die linke obere Ecke hat gerade -die Position (2,2) erhalten, damit noch der Rahmen Platz hat. Mit Rahmen ist unser -Fenster also 34 Spalten breit und 11 Zeilen hoch. Die linke obere Ecke des zweiten -Fensters ('frage') legen wir deshalb in die 36. Spalte und 2. Zeile, damit auch hier -Platz für den Rahmen bleibt. -Eine wichtige Einschränkung sollten Sie unbedingt berücksichtigen: Da manche -Terminals mit Beschreiben der Position (80,24) automatisch den Bildschirm -löschen, haben wir die maximale Ausdehnung eines umrandeten Fensters auf (2, 2, -77, 22) festgelegt. Überschreiten Sie irgendwo diese Grenzen, dann wird kein Rah -men mehr erzeugt. Der Rahmen wird auch dann nicht erzeugt, wenn er in der 0. -Zeile, 0.Spalte, 25 Zeile oder 80 Spalte zu liegen käme - erst recht natürlich nicht, -wenn diese Werte noch unter- bzw. überschritten werden. - - -#ib#7.2 Anzeigen/Löschen von Fenstern#ie# - ('#ib#show#ie#', '#ib#page#ie#', '#ib#erase#ie#', '#ib#out frame#ie#') - -Mit dem Befehl 'show (WINDOW VAR w)' wird das Fenster 'w' angezeigt. Der Fenster -variablen müssen natürlich zuvor die Maße des Fensters zugewiesen sein. Durch den -Befehl wird um den angegebenen Fensterbereich ein Rahmen gezogen und der -"Innenbereich" des Fensters gelöscht. Möchten Sie das Fenster ohne Rahmen ange -zeigt haben, so verwenden Sie nur den Befehl 'page (WINDOW VAR w)'. Durch die -sen Befehl wird nur der "Innenbereich" des Fensters gelöscht. -Haben Sie das Fenster einmal mit 'show' ausgegeben und wollen den Fensterinhalt -löschen, so verwenden Sie auch hier den Befehl 'page (WINDOW VAR w)', denn der -Rahmen braucht ja nicht erneut ausgegeben zu werden. -Möchten Sie ein Fenster und den zugehörigen Rahmen löschen, dann steht Ihnen der -Befehl 'erase (WINDOW VAR w) zur Verfügung: Durch den Befehl wird sowohl der -"Innenbereich" des Fensters als auch der Rahmen gelöscht. -Sie können natürlich auch selbst einen Rahmen um ein Fenster setzen. Dafür steht -der Befehl 'out frame (WINDOW VAR w)' zur Verfügung. Der Rahmen wird ebenfalls -um den durch 'w' bestimmten Fensterbereich gezogen - der "Innenbereich" bleibt -unberührt! - -Sollten Sie ein Fenster mit dem Befehl 'show' ausgeben (oder mit 'out frame' einen -Rahmen erzeugen) wollen, aber kein Rahmen auf dem Bildschirm erscheint, so -haben Sie die zulässigen Fenstergrenzen überschritten. Sehen Sie dazu auch Kapitel -7.1. - - -#ib#7.3 Operationen innerhalb des Fensters#ie# - -Innerhalb des selbstdefinierten Fensters stehen Ihnen die gleichen Operationen zur -Verfügung wie innerhalb des Menufensters. Bezieht sich eine Operation auf ein -Fenster, so wird der interne Fensterbezeichner als erster Parameter übergeben. - - -#ib#7.3.1 Datei anzeigen/editieren #ie#('#ib#edit#ie#', '#ib#show#ie#') - -Zum Anzeigen einer Datei steht die Prozedur 'show' zur Verfügung. Dabei kann -einmal ein FILE angegeben werden ('show (WINDOW VAR w, FILE VAR f)') oder aber -der Name der anzuzeigenden Datei ('show (WINDOW VAR w, TEXT VAR dateiname)'). -Die Datei kann nur eingesehen, nicht aber schreibend verändert werden. -Die Prozedur 'edit' gibt es ebenfalls in den zwei Ausprägungen. Hier kann die Datei -im Gegensatz zu 'show' auch schreibend verändert werden. -Durch diesen Befehl wird jeweils innerhalb des angegebenen Fensters die Datei -ausgegeben. Sofern die Lage des Fensters es zuläßt, wird automatisch ein Rahmen -um das Dateifenster gezogen. - - -#ib#7.3.2 Positionierungen im Fenster#ie# - ('#ib#cursor#ie#', '#ib#get cursor#ie#', '#ib#line#ie#', '#ib#remaining lines#ie#') - -Mit 'cursor (WINDOW VAR w, INT CONST spalte, zeile)' können Sie den Cursor inner -halb des angegebenen Fensters positionieren. Werden dabei die Fenstergrenzen über- -oder unterschritten, so wird der Fensterinhalt gelöscht und auf die Position (1, 1) -innerhalb des Fensters positioniert. -Mit der Prozedur 'get cursor (WINDOW VAR w, INT VAR spalte, zeile)' können Sie die -aktuelle Cursorposition innerhalb des angegebenen Fensters erfragen. -Wollen Sie an den Anfang der nächsten Zeile positionieren, dann verwenden Sie den -Befehl 'line (WINDOW VAR w)' - wollen Sie gleich mehrere Zeilen vorwärtspositionie -ren, dann benutzen Sie den Befehl 'line (WINDOW VAR w, INT VAR anzahl zeilen)'. -Wird allerdings bei einem der beiden letzten Befehle die untere Fenstergrenze über -schritten, so wird der Fensterinhalt gelöscht und die Operation in der ersten Zeile des -neuen Fensters fortgesetzt. -Die Informations-Prozedur 'remaining lines (WINDOW VAR w)' liefert Ihnen die -Anzahl der unterhalb der aktuellen Zeile noch im Fenster vorhanden Zeilen. - - -#ib#7.3.3 Ein- und Ausgaben innerhalb des Fensters#ie# - ('#ib#out#ie#', '#ib#put#ie#', '#ib#putline#ie#', '#ib#get#ie#', '#ib#getline#ie#', '#ib#yes#ie#', '#ib#no#ie#') - -Mit der Prozedur 'out (WINDOW VAR w, TEXT CONST text)' können Sie einen Text -innerhalb des angegebenen Fensters ausgeben. Paßt der Text nicht mehr in die -aktuelle Zeile, so wird er in der nächsten Zeile fortgesetzt. -Bedenken Sie, daß innerhalb der Fenster kein Wortumbruch realisiert ist. Ebenso -wenig ist das Rollen (scrolling) des Fensterinhalts möglich: Erfolgt die Ausgabe eines -Textes über die untere Fenstergrenze hinaus, so wird der Fensterinhalt gelöscht und -die Ausgabe an der Position (1, 1) des Fensters fortgesetzt. -Zur Ausgabe von Texten stehen noch die beiden Prozeduren 'put (WINDOW VAR w, -TEXT CONST text)' und 'putline (WINDOW VAR w, TEXT CONST text)' zur Verfügung. -Bei erstgenannter Prozedur wird gegenüber 'out' an die Ausgabe noch ein Leerzei -chen angehängt, bei der zweiten wird zusätzlich an den Anfang der nächsten Zeile -positioniert. -Zahlenwerte können mit den Prozeduren 'put (WINDOW VAR w, INT CONST intwert)' -und 'put (WINDOW VAR w, REAL CONST realwert)' ausgegeben werden. An die -Zahlenwerte wird jeweils ein Leerzeichen angehängt. - -Für das Einlesen von Werten steht die Prozedur 'get' in mehreren Varianten zur -Verfügung. Mit 'get (WINDOW VAR w, TEXT VAR text)' kann ein Text an der aktuellen -Position des Fensters eingelesen werden. Stehen in der aktuellen Zeile des Fensters -weniger als 5 Zeichenpositionen für die Eingabe zur Verfügung, so wird automatisch -auf den Anfang der nächsten Zeile innerhalb des Fensters positioniert. -Über einen dritten Parameter können noch zusätzliche Festlegungen getroffen wer -den: Soll die Eingabe noch durch weitere Zeichen (außer Positionierungszeichen) -abgeschlossen werden können, so werden die Zeichen als TEXT übergeben( 'get -(WINDOW VAR w, TEXT VAR text, TEXT CONST separator)'), soll die Maximallänge des -einzugebenden Textes festgelegt sein, so wird diese als INT übergeben ('get (WINDOW -VAR w, TEXT VAR text, INT CONST laenge)'). - -Mit den Prozeduren 'get (WINDOW VAR w, INT VAR intwert)' und 'get (WINDOW VAR -w, INT VAR realwert)' können auch Zahlenwerte innerhalb des Fensters eingelesen -werden. - -Damit dem Anwender auch Vorschläge für der Eingabe gemacht werden können, -steht die Prozedur 'editget' in zwei Variationen zur Verfügung. Bei 'editget' (WINDOW -VAR w, TEXT VAR ausgabe) wird 'ausgabe zum Editieren ausgegeben. Daneben -existiert noch ein 'editget' mit 7 Parametern, der detailliert bei der Zusammenstel -lung der Befehle erläutert ist. - -Ebenso wie auf dem Gesamtbildschirm und innerhalb des Menufensters stehen auch -hier die beiden Prozeduren 'yes (WINDOW VAR w, TEXT CONST frage)' und 'no -(WINDOW VAR w, TEXT CONST frage)' zur Verfügung. - - -#ib#7.3.4 Weitere Prozeduren #ie#('#ib#center#ie#', '#ib#stop#ie#') - -Mit 'center (WINDOW VAR w, TEXT CONST text)' werden vor dem angegebenen Text -so viele Leerzeichen angehängt, daß der Text zentriert in der aktuellen Fensterzeile -ausgegeben wird - wenn der Cursur bei der Ausgabe auf der ersten Position der Zeile -steht. Dabei werden aber bereits vorhandene Zeileninhalte überschrieben. - -Durch die Prozedur 'stop (WINDOW VAR w)' wird innerhalb des angegebenen Fen -sters an den Anfang der übernächsten Zeile positioniert und der Text " Zum Weiter -machen bitte irgendeine Taste tippen!" ausgegeben. Möchten Sie nicht an den Anfang -der übernächsten Zeile positionieren, so können Sie die Anzahl der Zeilen auch -explizit festlegen durch 'stop (WINDOW VAR w, INT CONST zeilenzahl). - - -#ib#7.4 Boxoperationen#ie# - -Innerhalb des Menufensters (sehen Sie Kapitel 5) stehen Ihnen die Prozeduren -'menuanswer', 'menuinfo', 'menuone', 'menusome', 'menuanswerone', -'menuanswersome', 'menuyes', 'menuno', 'menualternative', 'write menunotice' und -'menufootnote' zur Verfügung. Alle diese Prozeduren bezogen sich auf das von -gs-DIALOG automatisch gesetzte Menufenster. -Auch innerhalb der von Ihnen selbst definierten Fenster können Sie auf ähnliche -Prozeduren zurückgreifen. Da wir die eben genannten Prozeduren in Kapitel 5 sehr -detailliert beschrieben haben, werden wir hier nur auf die entsprechenden -Beschreibungen verweisen und ggf. die Besonderheiten/Abweichnungen erwähnen. -Zu beachten ist, daß innerhalb des Fensters weder die oberen noch die unteren zwei -Zeilen von der "Box" beschrieben werden. Die oberen bleiben ständig frei - die unter -en werden zur Ausgabe der zugehörigen Benutzerinformation (Fußnote) benutzt - -das sollten Sie bei der Festlegung der Fenstergröße bzw. bei der Länge der zu über -gebenden Texte berücksichtigen. Bei der Übergabe der Texte müssen Sie sich an die -gs-DIALOG Syntax-Regeln halten, die in Kapitel 5.12 beschrieben sind. - -Die Prozedur '#ib#boxanswer#ie# (WINDOW VAR w, TEXT CONST ausgabetext, antwortvorgabe, -INT CONST position)' arbeitet wie die Prozedur 'menuanswer (TEXT CONST ausgabe -text, antwortvorgabe, INT CONST position)' nur innerhalb des Fensters 'w' (sehen Sie -auch Kapitel 5.1). - -Die Prozedur '#ib#boxinfo#ie#' gibt es in zwei Ausführungen: 'boxinfo (WINDOW VAR w, TEXT -CONST text)' arbeitet wie 'menuinfo (TEXT CONST text)', allerdings auf dem angege -benen Fenster. Bei 'boxinfo (WINDOW VAR w, TEXT CONST text, INT CONST position, -timelimit)' kann über den dritten Parameter noch die relative Position im angegebe -nen Fenster (sehen Sie dazu Kapitel 5.12) und über den vierten Parameter die Zeit -spanne festgelegt werden, für die die Information erscheint (sehen Sie auch Kap. -5.2). - -Die Prozedur '#ib#boxone#ie# (WINDOW VAR w, THESAURUS CONST thesaurus, TEXT CONST -text1, text2, BOOL CONST mit reinigung)' arbeitet wie die Prozedur 'menuone -(THESAURUS CONST thesaurus, TEXT CONST text1, text2, BOOL CONST mit reini -gung)'. Zu bedenken ist hier, daß die Auswahl innerhalb des Fensters Platz finden -muß. Der Aufruf dieser Prozedur ist daher nur möglich, wenn das angegebene Fen -ster mindestens 60 Spalten breit und 17 Zeilen hoch ist. Ansonsten kommt es zu -einer Fehlermeldung (sehen Sie auch Kap. 5.3). - -Die Prozedur '#ib#boxsome#ie# (WINDOW VAR w, THESAURUS CONST thesaurus, TEXT -CONST text1, text2, BOOL CONST mit reinigung)' arbeitet wie die Prozedur -'menusome (THESAURUS CONST thesaurus, TEXT CONST text1, text2, BOOL CONST -mit reinigung)'. Hinsichtlich der Fenstergröße gelten die gleichen Einschränkungen -wie bei 'boxone' (sehen Sie auch Kap. 5.4). - -Die Prozeduren '#ib#boxanswerone#ie#' und '#ib#boxanswersome#ie#' entsprechen den Prozeduren -'menuanswerone' und 'menuanswersome'; es wird nur zusätzlich jeweils als erster -Parameter das aktuelle Fenster übergeben. Hinsichtlich der Fenstergröße gelten die -gleichen Einschränkungen wie bei 'boxone' (sehen Sie auch Kap. 5.5). - -Die Prozeduren '#ib#boxyes#ie#', '#ib#boxno#ie#' und '#ib#boxalternative#ie#' entsprechen den Prozeduren -'menuyes', 'menuno' und 'menualternative'; es wird nur zusätzlich jeweils als erster -Parameter das aktuelle Fenster übergeben (sehen Sie auch Kap. 5.6 und 5.7). - -Die Prozedur '#ib#boxnotice#ie#' unterscheidet sich von der Prozedur 'write menunotice' -erheblich: Letztgenannte Prozedur hat zwei Parameter. Durch den ersten wird der -Ausgabetext übergeben, mit dem zweiten wird die relative Position innerhalb des -Menubildschirms festgelegt. Sowohl Text als auch Position werden vom System ge -speichert. Bei jedem Neuaufbau eines Pull-Down-Menus oder des Menubildschirms -wird die Notiz neu mitaufgebaut. -Die Prozedur 'boxnotice (WINDOW VAR w, TEXT CONST text, INT CONST position, INT -VAR x, y, xsize, ysize) dagegen hat sieben Parameter. Über den ersten wird das aktuel -le Fenster festgelegt. Die beiden nächsten Parameter entsprechen den beiden Para -metern von 'write menunotice'. Über die letzten vier Parameter werden die Posi -tion/Maße der Box geliefert, die ja erst durch das Aussehen der übergebenen Texte -festgelegt werden. Weder Text noch Position der Boxnotiz werden vermerkt. Wollen Sie -die Notiz löschen, so verwenden Sie eine der Prozeduren '#ib#page#ie# (INT CONST x, y, xsize, -ysize)' oder '#ib#page up#ie# (INT CONST x, y, xsize, ysize)'. Im ersten Falle erscheint es dem -Betrachter, als ob die Box von oben nach unten "aufgerollt" würde, im zweiten Falle -von unten nach oben. - -Mit den Prozeduren '#ib#out footnote#ie# (WINDOW VAR w, TEXT CONST text)' wird in der -untersten Zeile des Fensters 'w' der angegebene Text ausgegeben. In der vorletzten -Zeile des Fensters wird eine Trennlinie ausgegeben. Die Fußnote incl. der Trennline -kann durch den Befehl '#ib#erase footnote#ie#' gelöscht werden. - - |