[NEWSboard IBMi Forum]

Thema: 24x80 27x132

  1. #1
    Registriert seit
    May 2004
    Beiträge
    444

    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    May 2004
    Beiträge
    444
    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 ?

  4. #4
    Registriert seit
    May 2004
    Beiträge
    444
    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

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Jan 2007
    Beiträge
    189
    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.
    mfg

    Kit
    www.ecofitonline.com
    DeskfIT - ChangefIT - XrefIT

  7. #7
    Registriert seit
    May 2004
    Beiträge
    444
    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

  1. Window im Anzeigemodus 24x80 und 27x132
    By Tschabo in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 03-11-16, 13:52

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •