Anmelden

View Full Version : Window Anzeige Problem



Seiten : 1 [2] 3

MrBonZai
21-10-03, 07:28
... auch dieses Schlüsselwort habe ich nun eingefügt...
das RCLRSC wird nur im ersten Start-CL aufgerufen, der das SFL aufruft...
Die Windows-Programme werden ganz normal aufgerufen mit Call innerhalb des SFL-Programmes

funktionieren tut es nicht.

so sieht mein Source Code nun aus...

A R FMT01
A WINDOW(16 5 7 71 *NOMSGLIN)
A N41 ROLLUP(25)
A USRRSTDSP
A OVERLAY
A WDWBORDER((*DSPATR HI))
A 1 31'NC2112' DSPATR(HI)

Als Dateianhang mal ein Screenshot vom zweiten Aufruf des Windows... damit ihr seht was ich meine...

MrBonZai
21-10-03, 07:29
und so sieht das Window aus, nach dem ersten Aufruf...

Fuerchau
21-10-03, 08:31
Dies scheint mir eher ein Problem von CA zu sein. Da ich beim Rahmen immer mit Leerzeichen, Farbe weiß und Attribut Reverse arbeite, bekomme ich zwar nicht so schöne Rahmen, aber es funktioniert immer !

MrBonZai
21-10-03, 09:11
@Fuerchau
könntest Du da mal den Source-Code posten für die Window-Darstellung?

Ich habe mein Programm gerade auf der Konsole getestet... gleiches Problem... liegt also nicht am CA.

Fuerchau
21-10-03, 09:56
Ich glaub ich seh jetzt dein Problem.
In deinem Fenster gibst du *NOMSGLN an, du überlagerst aber dann die Nachrichtenzeile (24) aber mit deinem Fenster !!

Entweder mach das Fenster mit Nachrichtenzeile, oder verschiebe es nach oben, so dass die Nachrichtenzeile sichtbar bleibt.

Das Schlüsselwort USRRSTDSP sowie die Umwandlung mit RSTDSP(*NO) sind erforderlich.

Ansonsten sieht meine DSPF genauso aus wie deine.

holly
21-10-03, 11:13
Hallo,
ich habe in meinem DUMMY-Record (assume) auch nochmal das OVERLAY drin, weiss aber nicht, ob das ein Unterschied macht.
Gruß Holger :confused:

Fuerchau
21-10-03, 11:49
Das Overlay im Dummy hat keine Auswirkung, da dieses Format ja nicht verwendet wird.

ASSUME soll ja nur nur drinstehen, damit der Bildschirm nicht gelöscht wird !

Fuerchau
21-10-03, 12:10
Ich habs jetzt nochmal ausprobiert und kann das Problem nachvollziehen.
Es liegt tatsächlich ein Problem in der Bildschirmsteuerung vor, wenn das Window das einzige Format dieser Programmebene ist !

Da ich bei Fenstern jedoch immer noch ein Record-Format ausgebe (Fehlerzeile + F-Tasten), kommt bei mir der Fehler natürlich nicht.

Verlege z.B. die F-Tasten in ein eigenes RECORD-Format, dass du vor die Ausgabe des Fensters legst.
Allerdings gibt es auch hier teilweise seltsames Verhalten, wenn man hier OVERLAY verwendet. Anstelle dessen muss man CLRL(nn) verwenden. In diesem Falle werden genau so viele Zeilen gelöscht, wie der Parameter "nn" angibt.
Dann wird auch das Fenster korrekt angezeigt.

RSTDSP(*NO) und USRRSTDSP sind auf jeden Fall trotzdem erforderlich !

Mein Fussformat:



A R FUEBETBO
A*%%TS SD 20000531 113908 RHTESTN REL-V4R2M0 5769-PW1
A CLRL(02)
A 24 3'F1:'
A COLOR(WHT)
A FLD001 15 O 24 7MSGID(DSP 0047 VOUSER)
A 31 DSFETX 78 O 23 3COLOR(WHT)
A DSPATR(RI)


Das Fenster sieht genauso aus wie deins.

MrBonZai
21-10-03, 14:51
@Fuerchau
das ist ja genial... jetzt funktioniert es...
besten Dank für die ganze Zeit, die Du investiert hast.

jetzt habe ich allerdings noch ein kleines Problem...
Ich versuche es mal zu beschreiben:

"Pgm1-SFL" ruft "Pgm2-WINDOW" auf.
über eine Funktinstaste kann ich in "Pgm2" ein weiteres Programm ("Pgm3") aufrufen, das im Vollbildmodus aufgerufen wird.
Verlasse ich nun Pgm3 wird mein Window aus "Pgm2" wieder hergestellt... allerdings mit dem Hintergrund aus Pgm3 :(
Das wäre natürlich falsch, da es ja eine Aufrufhirarchie darstellt und normal sollte er, wenn ich mich in Pgm2 befinde, den Hintergrund aus Pgm1 anzeigen...

Eigentlich bräuchte ich ja hier nun RSTDSP(*YES) in Pgm2... allerdings wäre ich dann bei meinem bekannten Problem angelangt... :(

Alle Programme (Pgm1+2+3) werden mit *INRT beendet.

gruss Alex

Fuerchau
21-10-03, 16:27
Dies ist leider nur durch einen kleinen Trick durchführbar:

Pgm-1 ruft Pgm-2 auf.
Bei F-Taste mit Funktionscode zurück nach Pgm-1, dass nun Pgm-3 aufruft.
Bei Rückkehr von Pgm-3, Write des Bildschirmes aus Pgm-1 und wieder Aufruf von Pgm-2 mit Ausgabe des Window.

Bei "Windows" ist es nun mal so, dass immer der aktuelle Inhalt überschrieben wird, woher soll das Programm auch wissen, was da vorher stand ?


Ansonsten gibts da ein paar Api's, siehe unter
http://publib.boulder.ibm.com/iseries/v5r2/ic2924/info/apis/QsnSavScr.htm
http://publib.boulder.ibm.com/iseries/v5r2/ic2924/info/apis/QsnRstScr.htm

Möglicherweise funktioniert es auch, wenn du die DSPF des Windows mit RSTDSP(*YES) umwandelst und Pgm-2 grundsätzlich mit "eval *INLR = *on" verläßt.
Dies beendet das Programm, die Displayfile wird geschlossen !
Beim nächsten Open und EXFMT in Pgm-2 wird natürlich der Screen gesichert und nach Rückkehr aus PGM-3 wiederhergestellt.

PS:

*INRT ist ausschließlich bei Zyklus-Programmierung (IP=Input Primary usw.) nötig, wenn man VOR *INLR zurückkehrt.

*INLR bedeutet:
wenn Aus => Dateien und Variablen bleiben im letzten Status, bei erneutem Aufruf kein Open und *INZSR
Wenn An => Programm wird deaktiviert, alle Dateien geschlossen, bei erneutem Aufruf wie 1. Aufruf mit *INZSR