PDA

View Full Version : Window Anzeige Problem



Seiten : [1] 2 3

MrBonZai
17-10-03, 08:04
Ich habe ein Problem mit einer Window Anzeige.

Ich habe ein Programm für das Subfile und ein separates Programm für das Window.
Das Window wurde mit "Anzeige wiederherstellen RSTDSP *YES" übersetzt.

Wird das Window nun das erste mal aufgerufen, klappt alles wunderbar. Das Window-Programm wird danach mit *INRT verlassen.
Rufe ich nun erneut das Window auf, erscheint im Hintergrund der Inhalt, der beim ersten Aufruf aktuell war, sprich, es werden im Hintergrund "uralte Daten" angezeigt.

Ich habe schon diverse Schlüselwörter probiert, bekomme es aber nicht hin.

Wenn ich das DSPF mit "Anzeige wiederherstellen RSTDSP *NO" übersetze, funktioniert die "Hintergrundanzeige" wunderbar... allerdings wird dann der Rahmen des Windows beim zweiten Aufruf nicht mehr angezeigt.

Gibt es hier eine Möglichkeit, dass das Window-Programm den "aktuellen" Hintergrund einliest?
Würde ich mein Window-Programm mit *INLR verlassen, würde es natürlich gehen. Das ist aber nicht die Lösung die ich anstrebe.

Zur Verdeutlichung, hier der Hauptteil des Sourcecode des DSPF

A DSPSIZ(24 80 *DS3)
A CHGINPDFT(HI UL)
A PRINT
A HELP
A ALTHELP(CA01)
A HLPRTN(01)
A CA03(03 'VERLASSEN')
A CA12(12 'ZURÜCK')
A*
A*----------------------------------------------------------------
A*
A R DUMMY ASSUME
A 1 2' '
A*
A R FMT01
A WINDOW(16 5 7 71 *NOMSGLIN)
A N41 ROLLUP(25)
A KEEP
A OVERLAY
A WDWBORDER((*DSPATR HI))
A 1 31'bla bla' DSPATR(HI)

Bin über jeden Hinweis dankbar.

Gruss Alex

Thimi
17-10-03, 08:48
Hallo MrBonZai

ich meine, es fehlen nach OVERLAY folgende Schlüsselwörter:
siehe Beispiel:

A R REC23F
A*%%TS SD 19990607 094130 REL-V4R2M0 5769-PW1
A WINDOW(2 3 16 73)
A OVERLAY
A PUTOVR
A OVRDTA
A OVRATR

R DMMY ASSUME
DMMY1 10 3 1

Die Datei anschließend mit RSTDSP(*YES) umwandeln

Gruss Thierry

MrBonZai
17-10-03, 09:03
Danke für die Antwort, leider aber funktioniert es so nicht.
gleicher Effekt wie vorher.

wird Dein Programm auch mit *INRT beendet?

--------

sonst vielleicht noch jemand einen Tipp?

Fuerchau
17-10-03, 09:13
RSTDSP(*NO) ist erforderlich, da die AS/400 sich pro Aufrufebene 1 Bildschirminhalt merken kann.
RSTDSP(*YES) bedeutet, dass beim erneuten Aufruf des Programmes oder bei der Rückkehr aus einem anderen Programm der Bildschirminhalt automatisch wiederhergestellt wird.

OVERLAY ist genauso erforderlich, da ansonsten der Bildschirm vor der 1. Ausgabe gelöscht wird (bei WINDOW scheint das nicht immer so zu sein).

PUTOVR/OVRDTA/OVRATR macht nur Sinn, wenn man mit langsamen Leitungen (ferne Bildschirme) arbeitet und gezielt nur geänderte Informationen übertragen will. Hierzu muss aber jedes Feld mit enstsprechende Attributen und Bezugszahlen definiert werden um einen Effekt zu haben (doch wen interessiert heute noch das Datenvolumen).
Daher sind diese absolut nicht erforderlich.

Das Dummyformat mit Assume macht genauso Sinn (siehe auch hierzu andere Beiträge).

KEEP solltest du entfernen und dein Programm mit *INLR = *OFF verlassen:

Use this record-level keyword to keep the display from being deleted when the display file is closed. The entire display is kept if any of the
records on the display have KEEP specified. The default causes the entire display to be deleted when the file is closed.

In addition, the name of the first, uppermost record on the display that has the KEEP attribute is saved by the OS/400 program for possible
use by subsequent programs. The name kept can be used by a subsequent program that does not specify a record name on its first input
operation. This keyword enables you to leave data on the display for review after your program ends, or use that data as input for
subsequent programs.

MrBonZai
17-10-03, 10:23
@Fuerchau
danke auch Dir für die sehr ausführliche Nachricht.

was meintest Du mit "*INLR = *OFF verlassen"?
also *INRT=*ON oder ;)
*INLR habe ich aus allen Programmen entfernt und im "Aufruf-CL" habe ich ein RCLRSC eingesetzt.

Die von dir beschriebene Methode funktioniert soweit ganz gut.
Der Hintergrund bleibt immer aktuell... allerdings verschindet ab dem zweiten Aufruf der Window-Border (die Umrandung um das Fenster)... alles andere wie Eingabefelder usw. bleiben sichtbar...

Fehlt mir hierzu noch irgendein Schlüsselwort?

MrBonZai
20-10-03, 07:37
kann mir sonst niemand einen Tipp geben?

holly
20-10-03, 10:22
Hi,
das laesst sich nur klären, wenn Du die komplette DDS des Windows (also auch die Felder im Fenster) hier mal postest.
Meine Fenster mit RSTDSP(*NO) klappen immer.
Gruß Holger

MrBonZai
20-10-03, 15:09
@holly
das kann ich gerne tun...

hier der komplette Sourcecode... ich hoffe Du kannst das Lesen...
oder gibt es einen Trick, wie man Sourcecode besser darstellt?

noch ne Info bzgl des RPG-Programms:
Bei mir sieht jedes Window gleich aus und verhält sich auch gleich...
Das DSPF wird NICHT mit User-Open geöffnet sondern automatisch... und wie bereits beschrieben, werden die Programme alle mit *INRT beendet...
bei *INLR funktioniert es auch bei mir...

EDIT: Source siehe nächster Post als Anhang...

Danke & Gruss
Alex

MrBonZai
20-10-03, 15:10
ups... habe gesehen, dass ich auch eine Datei anhängen kann...
hier der Sourcecode als TXT...

Fuerchau
20-10-03, 15:27
Natürlich fehlte noch ein Schlüsselwort:

4.170 USRRSTDSP (User Restore Display) Keyword

Use this record-level keyword on a window record to specify that the application will manage the display. Window records are not
automatically removed. If this keyword is not specified, the system saves and restores the underlying display when a window record is
displayed.

This keyword has no parameters.

The WINDOW keyword must be specified on the same record as the USRRSTDSP keyword. The USRRSTDSP keyword functions only
when the window keyword defines a window. The USRRSTDSP keyword does not function if the window keyword specified a record
format name. For more information, see "WINDOW (Window) Keyword" in topic 4.176.

Option indicators are valid for this keyword.

Das Fenster solltest du immer mit EXFMT (WRITE/READ) ausgeben.

Wenn du ausserdem noch RCLRST in dem aufrufenden Programm verwendest, schließt du die DSPF auf jeden Fall.
Dies solltest du unterlassen, wenn das Programm mehrfach aufgerufen werden soll.