-
24x80 27x132
Hallo zusammen,
ich bin mal wieder ratlos.
Problematik:
Ich habe ein Programm was nur ein Window anzeigt aber von 2 verschiedenen Programmen aufgerufen wird. Das eine Programm zeigt seinen Screen in 27x132 an, der andere Screen 24x80.
Ich hab in dem Windowprogramm das schon so gesteuert, dass das Window immer angezeigt wird (Quelle folgt weiter unten). Also die Ausgabe des Windows funktioniert, was nicht funktioniert, ist dass die Statusmeldungen immer auf Zeile 24 ausgegeben werden (was bei 27x132 im Hintergrund nicht schön ist).
Als Anmerkung
Programm A ruft Windowprogramm auf. Das Windowprogramm wird verlassen, bevor aber eine weitere Ausgabe am Bildschirm erfolgt wird ein CL aufgerufen und dieser gibt die Statusmeldungen aus, die kommen dann leider immer an Zeile 24
Code:
0003.00 A DSPSIZ(24 80 *NORMAL -
0004.00 A 27 132 *WIDE)
0005.00 A *WIDE MSGLOC(27)
0006.00 A *NORMAL MSGLOC(24)
0007.00 A*---------------------------------------------------------------*
0008.00 A* DUMMY : DUMMY FORMAT *
0009.00 A*---------------------------------------------------------------*
0010.00 A R DUMMY
0011.00 A 30 DSPMOD(*WIDE)
0012.00 A ASSUME
0013.00 A OVERLAY
0014.00 A 24 79' '
0015.00 A*---------------------------------------------------------------*
0016.00 A* WDW01 : WINDOW FORMAT *
0017.00 A*---------------------------------------------------------------*
0020.00 A CA03(03 'EXIT')
0021.00 A CA12(12 'Cancel')
0022.00 A KEEP
0023.00 A 30 DSPMOD(*WIDE)
0024.00 A *WIDE WINDOW(8 40 9 50 *NOMSGLIN)
0025.00 A *NORMAL WINDOW(7 14 9 50 *NOMSGLIN)
0026.00 A USRRSTDSP
0027.00 A 9 1'F3=EXIT F12=CANCEL'
0028.00 A COLOR(BLU)
0029.00 A W1@EMAIL 50A B 7 1COLOR(YLW)
0030.00 A 1 13'SELECT USER E-MAIL ADDRESS'
0031.00 A COLOR(BLU)
0032.00 A 3 1'ENTER YOUR VALID E-MAIL ADDRESS, I-
0033.00 A F NOT ENTERED'
0034.00 A 4 1'THE DOCUMENT WILL BE STORED IN YOU-
0035.00 A R USER'
0036.00 A 5 1'DIRECTORY.'
Im RPG wird dann je nach aufrufendem Programm die *IN30 an oder aus gesetzt
Vielen Dank für Eure Hilfe
Viele Grüße harkne
-
Nun ja, 2 Formate in einer DSPF würde ich sowieso nicht vermurksen.
Kommst du nämlich mal an ein Terminal, das den Modus 27x132 nicht kennt (gerne mal falsch konfiguriert), kann deine DSPF überhaupt nicht geöffnet werden (Format nicht unterstützt) selbst wenn du nur 24x80 ausgeben wolltest.
Um dieses Szenario zu vermeiden, solltest du beim CRTDSPF den Schlüsselwert RSTDSP(*YES), eigentlich default, einsetzen und USRRSTDSP nicht verwenden.
Beim Open deiner DSPF wird der Zustand gesichert, beim CLose (also LR=*ON! oder manuell) wird der Zustand wieder hergestellt. Somit erscheint dann das vorherige Bild mit korrekter Ausgabe in Zeile 24.
Solltest du den Close vergessen (LR=*OFF), erfolgt immer die Wiederherstellung des Bildes, das beim 1. Close gespeichert wurde.
Aber ich denke besser wird es, wenn du je Format eine eigene DSPF nimmst, denn das Normal-Format ist ja das Erste das du definierst und das dann beim Close wiederhergestellt wird.
Du kannst die Benennung ja auch umdrehen, dann wird allerdings die Status-Message auf 27 ausgegeben obwohl du doch nur 24 hast. Ggf. gibts dann sogar CPF's.
-
Tja, jetzt bin ich noch ratloser. Ich hab jetzt zwei Bildschirmdateien für das Window gemacht. Entweder wird die eine (nur 24x80) oder nur die andere Bildschirmdatei (nur 27x132) geöffnet. Beide Bildschirmdateien sind mit RSTDSP(*YES) umgewandelt und haben keinen USRRSTDSP. Ich rufe das Programm von einem anderen Programm aus auf (Hintergrundbildschirm 27x132) und er bringt die Nachricht immer noch auf Zeile 24. Allerdings hat das aufrufende Programm unterschiedliche Masken (also 24x80 und 27x132) Aber das letzte Format auf dem ich F10 drück um das Window-Programm aufzurufen hat 27x132. Ich denke dass es irgendwas damit zu tun hat, dass das Window-Programm wieder verlassen wird, aber bevor das Window wirklich verschwindet und die Maske im aufrufenden Programm wieder angesprochen wird, ein Programm (nur CL keine Screens) aufgerufen wird was die Statusmeldungen ausgibt.
Im Grunde läuft es so ab
1. Aufrufendes Programm zeigt eine Übersicht. (27x132) F10 wird gedrückt
2. Window-Programm wird aufgerufen und zeigt ein Window (27x132) um eine E-Mail einzutragen
3. Window-Programm wird verlassen
4. CL wird aufgerufen was eine Excel-Datei erzeugt und an die eingegeben E-Mail Adresse versendet (dieses Programm erzeugt Statusmeldungen die dann aber in Zeile 24 und nicht 27 ausgegeben werden was ich nicht verstehe)
5. Die Übersicht wird wieder angezeigt. Die Nachricht von mir die ich in diesem Programm ausgebe wird dann wieder ordentlich auf Zeile 27 ausgegeben.
Vielleicht noch Ideen ?
-
So ich habs jetzt. Alles wie oben beschrieben, aber das Windows-Programm nicht mit LR sondern mit RETURN beendet. Somit ist die Statusausgabe auch auf Line 27. Wer noch die Hefte von früher kennt. Seltsam .... aber so steht es geschrieben :-)
Danke für die Hilfe
-
Das Fatale ist tatsächlich, dass man nicht zwischen Formaten wechseln kann wenn nicht der gesamte Bereich betroffen ist.
Da es sich um ein Fenster handelt kann ein 27x132-Fenster nicht über ein 24x80-Format gelegt werden und umgekehrt.
Wenn du nun die Fenster geöffnet lässt, hast du einen blöden Zustand (ist mir auch schon passiert):
Der 1. Open sichert den Hintergrund und dein Fenster überlagert diesen.
Das USRRSTDSP in der Windows-Datei hat keine Auswirkung solange du nicht selber mehrere Fenster verwendest, die sich überlagern.
Zeigst du nun diese Fenster ein 2. Mal an, so wird der gesicherte Inhalt wieder hinterlegt!
Das sind dann nette Effekte für den Enduser:
PGMA mit Maske A => Window mit Hintergrund von A
PGMB mit Maske B => Window mit Hintergrund von A!
Um dieses auszuschließen benötigst du nun nur noch RSTDSP(*NO) auf der Datei und "ASSUME" im Satzformat. Dies überlagert tatsächlich den aktuellen Bildschirm.
Aber, wie gesagt, die Formate müssen passen, sonst wird das Bild erst mal gelöscht.
Das mit den 2 Dateien würde ich beibehalten und USROPN verwenden. Nur dann stürtzt das Programm nicht ab, wenn du open(e) oder open mit BZ verwendest. Und kannst dann alternativ immer auf 24x80 ausweichen.
-
So geht's auch... um eine 27x132 von eine 24x80 Programm aufzurufen.
DSPF:
Code:
A*--------------------------------------------------------------------
A*
A* System Name .....: All
A* File Name .......: Dummy size display file
A* Author ..........: Deon A von Blerk
A* Date ............: 09.06.08
A*--------------------------------------------------------------------
A*
A* MODIFICATION CONTROL
A* ====================
A* Date Nr By/Reason
A* ===== === =========
A*
A*--------------------------------------------------------------------
A DSPSIZ(*DS3 *DS4)
A HELP(25)
A CA01(25)
A CA12(12)
A*
A R DUMMY1
A TEXT('Dummy format to allow window')
A KEEP
A ASSUME
A OVERLAY
A 24 74' '
A 22 2'*++PL00X'
A DSPATR(ND)
In Programm hinzufügen:
Code:
FDUM27x132 CF E WORKSTN INFSR(*PSSR)
F usropn
...
// am pgm anfang
// open dummy size
open dum27x132;
write dummy1;
close dum27x132;
// open proper DSPF
open Gsmtp0FT;
...
// am pgm ende
// Terminate this program.
close Gsmtp0FT;
open dum27x132;
write dummy1;
close dum27x132;
This method prevents problems (abstürtze) not only from the calling program but also, which does happen in Infor System 21, when another menu option is called later.
-
Hallo zusammen nochmals. Danke für die Antworten. Mein Problem war nicht das überlagern der Fenster und der Screens, das hat alles wunderbar funktioniert, selbst mit einer Bildschirmdatei. Habe ich eine Message auf dem 24x80 ausgegeben, dann ist sie auch auf Zeile 24 erschienen und habe ich eine Message auf 27x132 ausgegeben ist sie auch dort erschienen. Alles kein Problem. Das Problem war, dass ein drittes Programm (ohne Screen) Statusmeldungen ausgegeben hat und zwar immer auf Zeile 24 egal welcher Screen. Wahrscheinlich, weil das 2. Programm mit dem jetzt angezeigten Screen nicht mehr offen (also auch die Bildschirmdatei geschlossen) war und das erste Programm nicht wieder sein Format ausgegeben hat. Somit vermute ich als nicht wirklich Wissender, dass er keinen aktiven Sreen hatte und dann die Statusmeldungen immer auf Zeile 24 ausgibt. Deshalb habe ich mir gedacht ich lasse die Bildschirmdatei des Window-Programms offen und siehe da es hat funktioniert. Es stimmt natürlich, dass ich dann das öffnen und schließen der Bildschirmdateien mit unterschiedlicher Bildschirmgrößendefinition selbst steuern muss, was ja aber auch kein Problem ist.
Viele Grüße Harald
Similar Threads
-
By Tschabo in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 03-11-16, 12:52
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks