Referenz - SCREENRES
Syntax: SCREENRES (Breite, Höhe[, [Farbtiefe][, [Seitenzahl][, [Flags][, Bildwiederholrate]]]])
Typ: Funktion
Kategorie: Grafik
SCREENRES initiiert ein Grafikfenster. Der Befehl entspricht der SCREEN-Anweisung aus Version 0.10. Die Syntax ist ähnlich dem jetzigen SCREEN-Befehl, jedoch ist es möglich, eine benutzerdefinierte Bildschirmauflösung anzugeben.
- 'Breite' und 'Höhe' sind die Breite und die Höhe des zu initiierenden Grafikfensters.
- 'Farbtiefe' ist die Farbtiefe in Bits pro Pixel (bpp). Wenn Sie diesen Parameter auslassen, wird die Standard-Farbtiefe von 8 bpp (256 Farben) verwendet.
Achtung: Die Farbtiefe kann im Fenstermodus nicht über der Farbtiefe der Desktopoberfläche liegen; wird dennoch eine höhere Farbtiefe angegeben, setzt FreeBASIC diese automatisch auf die Desktop-Farbtiefe zurück. - 'Seitenzahl' gibt an, wie viele Bildschirmseiten reserviert werden sollen. Eine Bildschirmseite ist entweder ein Speicherbereich, in dem die Daten gespeichert sind, die auf dem Bildschirm ausgegeben werden sollen (sichtbare Seite), oder ein Datenpuffer derselben Größe wie die der sichtbaren Seite (ein solcher Puffer wird aktive Seite oder Arbeitsseite genannt). Sie können auf einer Seite arbeiten, während die andere angezeigt wird; siehe dazu die SCREENSET-Anweisung. Sie können beliebig viele Bildschirmseiten reservieren (die einzige Grenze stellt der verfügbare Speicher dar). Wenn Sie 'Seitenzahl' nicht angeben, wird nur die aktive Seite (mit der Nummer 0) verfügbar sein.
- 'Flags' gibt verschiedene Modusinformationen an (siehe unten). Wenn dieser Parameter ausgelassen wird, nimmt FreeBASIC automatisch 0 an.
- 'Bildwiederholrate' gibt die Bildwiederholrate in Hz an. Wenn dieser Parameter ausgelassen wird, nimmt FreeBASIC 0 an. Dadurch wird automatisch die günstigste Rate ermittelt. Lassen Sie diesen Parameter am besten einfach aus, außer Sie sind sich völlig im Klaren darüber, was Sie tun - es gibt eigentlich nicht viele Gründe, die vom Benutzer oder System festgelegten Wiederholraten außer Kraft zu setzen. Ganz im Gegenteil, eine Ihrerseits fest gewählte Bildwiederholrate könnte auf einem anderen Bildschirm eventuell gar nicht dargestellt werden!
- Der Rückgabewert ist 0, wenn das Grafikfenster initialisiert werden konnte, und 1, wenn ein Fehler auftrat. Der Rückgabewert kann verworfen werden; SCREENRES wird dann wie eine Anweisung eingesetzt.
VORSICHT: Geben Sie keine Auflösung an, welche die aktuelle Bildschirmgröße übersteigt!
Benutzen Sie im Zweifelsfall vorher SCREENINFO, um die aktuelle Auflösung zu ermitteln.
Hinweis: Falls Sie Alphatransparenz nutzen möchten, muss als 'Farbtiefe' mindestens 24-Bit angegeben werden. Des Weiteren muss als 'Flags' der Wert &h40 gesetzt werden oder mit eingebundener fbgfx.bi die Konstante GFX_ALPHA_PRIMITIVES, damit Drawing Primitives wie PSET, LINE etc. die Alphatransparenz verarbeiten (siehe dazu auch die folgende Beschreibung zu 'Flags').
Bedeutung des Parameters 'Flags'
'Flags' ist einer von folgenden Werten, die durch ein logisches OR miteinander verknüpft werden können.
Binden Sie per #INCLUDE die Datei fbgfx.bi ein, um die Bezeichner in der Spalte 'Symbol' verwenden zu können! Bitte beachten Sie, dass die genannten Konstanten Elemente des NAMESPACEs 'FB' sind.
Wert | Symbol | Wirkung |
---|---|---|
&h00 | GFX_WINDOWED | Normaler Fenstermodus Standard-Option |
&h01 | GFX_FULLSCREEN | Vollbildmodus |
&h02 | GFX_OPENGL | OpenGL-Modus |
&h04 | GFX_NO_SWITCH | kein Moduswechsel |
&h08 | GFX_NO_FRAME | kein Rahmen |
&h10 | GFX_SHAPED_WINDOW | Splashscreen-Modus |
&h20 | GFX_ALWAYS_ON_TOP | Fenster, das immer auf oberster Ebene bleibt |
&h40 | GFX_ALPHA_PRIMITIVES | Bearbeite auch ALPHA-Werte bei Drawing Primitives wie PSET, LINE, etc. |
&h80 | GFX_HIGH_PRIORITY | Höhere Priorität für Grafikprozesse, nur unter Win32 |
&h10000 | GFX_STENCIL_BUFFER | Stencil Buffer (Schablonenpuffer) verwenden (nur im OpenGL-Modus) |
&h20000 | GFX_ACCUMULATION_BUFFER | Accumulation Buffer (nur im OpenGL-Modus) |
&h40000 | GFX_MULTISAMPLE | Bewirkt im Vollbildmodus Antialiasing durch die ARB_multisample-Erweiterung |
-1 | GFX_NULL | Grafikmodus ohne visuelles Feedback |
- Wenn das Vollbild-Flag gesetzt ist, wird SCREENRES versuchen, den angegebenen Bildschirmmodus zu initialisieren. Wenn es gesetzt ist und das System den Bildschirm nicht im Vollbildmodus initialisieren kann, wird SCREENRES versuchen, den Bildschirm im Fenstermodus zu initialisieren. Wenn das Vollbild-Flag nicht gesetzt ist und das System den Bildschirm nicht im Fenstermodus initialisieren kann, wird SCREENRES versuchen, den Bildschirm im Vollbildmodus zu initialisieren. Wenn beide Versuche fehlschlagen, hat SCREENRES keine Auswirkungen.
- Wenn das OpenGL-Flag gesetzt ist, initiiert die Gfxlib den OpenGL-Modus. Alle Drawing Primitives haben keine Auswirkungen, und der Bildschirm wird nicht automatisch aktualisiert. Im OpenGL-Modus stehen Ihnen nur ein funktionierendes OpenGL-Fenster und die Befehle zum direkten Speicherzugriff auf den VideoRAM zur Verfügung. Wenn Sie eine Bildschirmaktualisierung durchführen wollen, benutzen Sie die Anweisung FLIP.
- Wenn das Moduswechsel-Flag gesetzt ist, kann der User nicht mehr mit [ALT]+[ENTER] zwischen Vollbild- und Fenstermodus hin- und herschalten. Der Maximieren-Button am Fenster erscheint als inaktiv.
- Wenn das Stencil-Buffer-Flag gesetzt ist, wird ein Stencil Buffer (Schablonenpuffer) erstellt. Dieser Buffer wird verwendet, um Pixel zu maskieren, d. h. die Farbe bestimmter Pixel durch eine andere Farbe zu ersetzen oder diese erst gar nicht zu zeichnen. Man kann dieses Flag nur setzen, wenn man OpenGL verwendet.
- Das Accumulation-Flag hat auch nur im OpenGL-Modus eine Wirkung. Dadurch wird ein Accumulation Buffer erstellt. Dieser kann eine höhere Auflösung haben als der Bildschirmmodus. Somit kann man eine Szene z.B. mit einer Auflösung von 1024x768 in den Puffer zeichnen, aber mit einer Auflösung von 800x600 auf den Bildschirm rendern. Dies bewirkt eine Glättung der gesamten Szene (Anti-Aliasing).
- Das Rahmen-Flag bewirkt, dass auf dem Bildschirm ein Grafikbereich ohne Titelleiste und Fensterrahmen erscheint. Der User kann dieses Fenster mit der Maus nicht verschieben, und es hat keinen Schließen-, Maximieren- und Minimieren-Button. Allerdings reagiert das Fenster auf die üblichen Tastaturkommandos, wechselt also mit [ALT]+[ENTER] in den Vollbildmodus und wird mit [WINDOWSTASTE]+[D] minimiert. Es erscheint in der Taskleiste, bekommt dort aber kein Kontextmenü. Sinnvollerweise wird dieses Flag nicht mit dem Vollbild-Flag kombiniert.
- Das Splashscreen-Flag bewirkt dasselbe wie das Rahmen-Flag. Zusätzlich ist die transparente Farbe (modusabhängig) in diesem Fall tatsächlich transparent, d. h. der Desktop bzw. die Fenster, die sich hinter dem FreeBASIC-Grafikfenster befinden, sind 'durch das Grafikfenster hindurch' sichtbar. Siehe PUT (Grafik) für die Transparenzfarben. Sinnvollerweise wird dieses Flag nicht mit dem Vollbild-Flag kombiniert. Ein Klick auf transparente Flächen wird von SCREENEVENT nicht erkannt; nur 'solide Flächen' werden für die Ereigniserkennung beachtet. Es ist auch möglich, 'durch das Fenster hindurch' Elemente anzuklicken, die sich hinter transparenten Flächen befinden.
- Der Grafikmodus ohne visuelles Feedback aktiviert alle Grafikbefehle und reserviert einen entsprechenden Speicherbereich. Auf dem Bildschirm werden diese Änderungen jedoch nicht sichtbar. Mit GET (Grafik) können von dieser virtuellen Bildschirmseite Ausschnitte eingelesen und später in einem sichtbaren Bildschirmmodus mit PUT (Grafik) ausgegeben werden. Nützlich, um Grafiken für betriebssystem-abhängige Systeme (GDI, Gtk etc.) einzubinden. Wird dieses Flag benutzt, können keine weiteren Flags verwendet werden.
Wenn ein Bildschirmmodus einmal eingestellt wurde, können Sie ihn jederzeit durch Drücken von [ALT]+[ENTER] zwischen Vollbild- und Fenstermodus umschalten, vorausgesetzt, das System unterstützt dies und das Umschalten wurde nicht durch Verwendung des Moduswechsel-Flags unterbunden.
Anders als im Konsole-Modus wird ein Programm beim Klick auf den Schließen-Button nicht beendet; stattdessen wird ein CHR(255, 107) in den Tastaturpuffer geschrieben, der mit INKEY abgerufen werden kann. Diese Kombination entspricht [ALT]+[F4]. Ein Klick auf den Maximieren-Button hingegen wird automatisch in den Vollbildmodus wechseln, wenn dieser verfügbar ist.
FreeBASIC wird versuchen, den Bildschirmmodus so gut wie möglich zu initialisieren; wenn alle Versuche fehlschlagen, hat SCREENRES keine Auswirkungen. Die Ausführung des Programms wird mit der Zeile nach der SCREENRES-Anweisung fortgesetzt. Sie sollten daher nachprüfen, ob der Bildschirmmodus erfolgreich initialisiert wurde; dies können Sie mit der SCREENPTR-Funktion tun.
Beispiel 1: ein 320x240 Pixel großes Grafikfenster öffnen und prüfen, ob der Aufruf erfolgreich war
SCREENRES 320, 240, 16
IF SCREENPTR = 0 THEN
PRINT "Bildschirmmodus nicht initialisiert!"
SLEEP
END
END IF
'...
SLEEP
Beispiel 2: ein 200x200 Pixel großes Grafikfenster im Splashscreen-Modus, immer im Vordergrund
Ob das Fenster korrekt initialisiert werden konnte, wird mithilfe des Rückgabewertes geprüft.
#INCLUDE "fbgfx.bi"
IF SCREENRES(200, 200, 32,, FB.GFX_SHAPED_WINDOW or FB.GFX_ALWAYS_ON_TOP) THEN
PRINT "Fehler: Grafikfenster konnte nicht initialisiert werden!"
SLEEP
END
END IF
CIRCLE (100, 100), 50, RGB(255, 0, 255),,,, F
DO
SLEEP 1
LOOP UNTIL LEN(INKEY)
Weitere Auswirkungen von SCREENRES:
Ein erfolgreicher SCREENRES-Aufruf setzt ...
- die Nummer der sichtbaren als auch die der aktiven Bildschirmseite auf 0
- in den indizierten Farbmodi die Palette zurück (siehe Standard-Paletten)
- die Clipping-Bereiche (bestimmt durch die vorhergehenden Anweisungen WINDOW und VIEW (Grafik)) des Bildschirms zurück
- den Text-Cursor in die obere linke Ecke des Bildschirms
- die Schriftgröße auf 8x8 (dies kann geändert werden, indem mit WIDTH die Anzahl der Zeilen und Spalten festgelegt wird)
- den Grafik-Cursor in die Mitte des Bildschirms
- die Vordergrundfarbe auf Weiß (Farbnummer 15 in einer Farbtiefe bis zu 8bpp bzw. &hFFFFFF in allen höheren Farbtiefen)
- die Hintergrundfarbe auf Schwarz (Farbnummer 0)
- den Mauszeiger auf 'sichtbar' (Sie können den Mauszeiger innerhalb des Fensters mit SETMOUSE verbergen)
Unterschiede zu QB: neu in FreeBASIC
Unterschiede zu früheren Versionen von FreeBASIC:
Seit FreeBASIC v0.90.0 lässt sich SCREENRES als Funktion mit Rückgabewert aufrufen.
Einige Bildschirmflags existierten in früheren Versionen nicht oder hatten eine andere Bedeutung:
- GFX_HIGH_PRIORITY (&h80) existiert seit FreeBASIC v0.18
- Folgende Flags existieren erst seit FreeBASIC v0.17: GFX_NO_FRAME (&h08), GFX_ALPHA_PRIMITIVES (&h80) und GFX_MULTISAMPLE (&h40000)
- GFX_STENCIL_BUFFER hatte vor FreeBASIC v0.17 den Wert &h10.
- GFX_ACCUMULATION_BUFFER hatte vor FreeBASIC v0.17 den Wert &h20.
Unterschiede unter den FB-Dialektformen:
In der Dialektform -lang qb steht SCREENRES nicht zur Verfügung und kann nur über __SCREENRES aufgerufen werden.
Siehe auch:
SCREEN (Anweisung), SCREENINFO, SCREENLIST, Grafik
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|