Anmelden

View Full Version : Bildschirm zentrieren (in verschiedenen Auflösungen)



Alex Zauner
05-11-14, 15:53
Hallo liebe Community,
ich habe folgendes Problem.
Ich wollte ein Fenster mit einer festen Größe zabhängig von der Bildschirmauflösung entriert einblenden.
Dazu definierte ich im Displayfile ein Positionsfenster dessen Rahmen mit dynamischen Attributen belegt ist:

35 DSPMOD(*DS4)
A OVERLAY
A WINDOW(&POSY &POSX 20 74)
A WDWTITLE((*TEXT &TITEL) *CENTER)
A TITEL 40A P
A POSY 3S 0P
A POSX 3S 0P

Im dazugehörigen RPG-Programm prüfte ich dann mit Hilfes des externen Programmes OPDSPSIZ die aktuelle Bildschirmauflösung (DS3 oder DS4) und passte die Koordinaten des oberen linken Bildschirmfensters entsprechend der Auflösung an:
callp opdspsiz(i_ds4); // i_ds4 = flag für DS4-Bildschirm

if i_ds4;
POSX = 10;
POSY = 3;
else;
POSX = 2;
POSY = 2;
endif;

Allein: beim Starten stürzt das Programm zur Laufzeit ab. (und das liegt leider nicht an der Bildschirmauflösung).
Danke für die Hilfe im voraus.
LG Alex

Robi
05-11-14, 16:23
Sehr interesannt ...
und so aufschlußreich!
Gibt es den sowas wie eine Fehlermeldung?
Ein Joblog!

Robi
der Hellsehen und Bauchreden seid Jahren erfolglos übt

Fuerchau
05-11-14, 17:15
Da machst du dir etwas viel Mühe, da es so gar nicht funktioniert.
Mittels *DS3 oder *DS4 entscheidest du beim Write, ob dein Bildschirm auf 24x80 oder 27x132 umschalten soll. Gesteuert wird dies mit der entsprechenden Bezugszahl.
Danach wird das Format erst ausgegeben.

Nun entscheidet allerdings das System bereits beim Open einer DSPF, ob das Device überhaupt 27x132 (DS4) unterstützt. Wenn nicht, kann die DSPF gar nicht geöffnet werden und es gib einen Fehler.

Zu empfehlen ist hier sowieso mit 2 DSPF's zu arbeiten, die DS4-DSPF mit UsrOpn (UC) zu definieren und entsprechend des gewünschten Modus, das entsprechende Format auszugeben.
So kann man mittel "Open(E)" den Fehler zumindest abfangen.

Was soll dir das OPDSPSIZ denn liefern?

Alex Zauner
06-11-14, 07:52
Danke für die prompte kompetente Antwort,
UserOpen werde ich auf jeden Fall einbauen,
zu deiner Frage: OPDSPSIZ setzt einen internen Flag
auf true wenn die Bildsschirmauflösung DS4 ist.

Robi
06-11-14, 08:12
Na ja, je nach Anforderung funktioniert das (ein bischen anders) schon, und macht auch Sinn!
Unsere Schirme sind nahezu alle von 80 auf 132 umschatbar (vom User),
Wenn der User eine 80 Schirm eingeschaltet hat, muß ein zusätzliches Pgm, das z.B. ein Window zeigt schon wissen wie die letzte Anzeige war. Das funktioniert auch prima!
Die Trennung, ein DSPF 132 und ein anderes 80 Stellen haben wir wieder verworfen, da der Anwender zur Laufzeit wechseln kann.
Robi

Fuerchau
06-11-14, 08:34
Getrennte DSPF's sind in RPG ja ganz einfach, da ja nur das Format und nicht der Dateiname relevant ist.
Sie helfen aber, wenn man mal an ein falsch konfiguriertes Terminal gerät (OpsNav->rechte Maustaste->5250 ist grundsätzlich nicht umschaltbar), der Open fehlschlägt und die Anwendung stirbt.