3.6.1 Zeichnen auf dem Bildschirm

Um Informationen auf dem Bildschirm darzustellen, bietet das PVOS zahlreiche Funktionen an, die sich prinzipiell in Folgende Kategorien gliedern lassen:
Dabei gibt es oft mehrere Funktionen, die die gleiche Funktionalität erfüllen.
Häufig gibt es auch einen Befehl, der die Funktionen der einzelnen Befehle zusammenfasst.

Punkte setzen

Um Punkte zu setzen und zu löschen, stehen folgende Befehle zur Verfügung:

LibDotOnEin Punkt wird an einer x/y Koordinate gesetzt (schwarz)
LibDotOffEin Punkt wird an einer x/y Koordinate gelöscht
LibGdsDotOnHat die gleiche Funktionalität wie LibDotOn
LibGdsDotOffHat die gleiche Funktionalität wie LibDotOff
LibGdsDotCmpinvertiert den durch x/y angesprochenen Punkt
LibPutDotSubsetzt einen Punkt an der x/y Koordinate, oder löscht ihn, oder invertiert ihn

Zu beachten ist, dass der Punkt erst dann tatsächlich dargestellt wird, wenn LibPutDisp() aufgerufen wurde.

Linien

Auch für die Linien gibt es eine Reihe von Funktionen, die oft die gleiche Funktion erfüllen

LibLineZeichnet eine Linie von einer x/y-Koordinate zu einer relativen Endkoordinate mit einer bestimmten Dicke. Diese Dicke wird allerdings nur ausgewertet, wenn es sich um horizontale, oder vertikale Linien handelt. Die relativen Koordinaten können negativ sein, jedoch nicht 0. Eine Relative Koordinate von 1 zeichnet eine gerade Linie.
LibMeshLineIm Prinzip die gleiche Funktion wie LibLine(), ausser dass die Linie gepunktet gezeichnet wird und eine Dicke nicht angegeben werden kann.
LibLineClrLöscht eine Linie wieder vom Bildschirm. Entspricht LibLine() mit der Hintergrundfarbe. Es kann aber keine Dicke angegeben werden.
LibLineCplmntZeichnet eine Linie, die den Hintergrund invertiert. Es kann keine Dicke angegeben werden
LibGdsLinezeichnet eine Linie von x1/y1 nach x2/y2 (in absoluten Koordinaten)
LibGdsLineClrLöscht eine Linie von x1/y1 nach x2/y2
LibGdsLineMeshzeichnet eine gepunktete Linie von x1/y1 nach x2/y2
LibGdsLineCmpinvertiert die Linie zwischen x1/y1 und x2/y2
LibPutLineSubZeichnet eine Linie von x1/y1 nach x2/y2 nach allen obigen Arten

Zum Linie zeichnen sollten die Befehle LibGds... benutzt werden, weil man dann die Umrechnung in relative Koordinaten nicht beachten muss.

Rechtecke

Prinzipiell gibt es nur ein paar Befehle, um Rechtecke zu zeichnen:

LibBoxzeichnet ein Rechteck von x1/y1 zu den relativen Endkoordinaten mit einer bestimmten Liniendicke
LibGdsBoxZeichnet ein Rechteck von x1/y1 bis x2/y2 (in absoluten Koordinaten)
LibGdsBoxMeshWie LibGdsBox() allerdings mit gepunkteten Linien
LibGdsBoxCmpDie Linien invertieren den Hintergrund, ansonsten wie LibGdsBox()
LibGdsBoxClrDie Linien des Rechtecks werden im Hintergrund gelöscht
LibPutBoxSubKann alles, was die einzelnen Funktionen erfüllen in einer Funktion

Auch hier lautet die Empfehlung, LibGds... zu nutzen, um die relativen Koordinaten nicht zu gebrauchen.

Flächen

Flächen lassen sich auf dem PocketViewer prinzipiell nur löschen oder invertieren. Es gibt aber auch eine Funktion, um eine Fläche zu schattieren. Dafür stehen wieder mehrere Funktionen zur Verfügung:

LibReverseinvertiert einen rechteckigen Bereich, der durch x1/y1 und die relative Grösse definiert ist
LibMeshDer durch x1/y1 und die relative Grösse bestimmte Bereich wird schattiert dargestellt, was bedeutet, dass gezeichnete Linien durch gepunktete Linie ersetzt werden und gefüllte Flächen werden durch gerasterte Flächen ersetzt. Freie Bereiche werden nicht verändert.
LibGrpUpDer Bereich, der durch x1/y1 und die relativen Angaben definiert ist, wird um die angegebenen Pixel nach oben verschoben. Der unten nachgeschobene Bereich ist leer.
LibGrpDwnDer Bereich, der durch x1/y1 und die relativen Angaben definiert ist, wird um die angegebenen Pixel nach unten verschoben. Der oben nachgeschobene Bereich ist leer.
LibClrBoxein Bereich, der durch x1/y1 und die relativen Angaben definiert ist, wird gelöscht
LibSKeyRevSubEin Bereich, der durch x1/y1 und x2/y2 (in absoluten Koordinaten) angegeben ist wird invertiert dargestellt. Im Gegensatz zu anderen Funktionen erfolgt die Ausgabe sofort am Bildschirm und nicht erst durch LibPutDisp(). Diesem Befehl können eine Menge von Parametern mitgegeben werden, deren Bedeutung erst offensichtlich wird, wenn man sich den Effekt tatsächlich am Bildschirm betrachtet (Flackereffekte, nachgezeichnete Rahmen)
LibGdsClrLöscht einen durch x1/y1 und x2/y2 definierten Bereich
LibGdsReverseinvertiert einen durch x1/y1 und x2/y2 definierten Bereich
LibGdsMeshzeichnet die Punkte eines definierten Bereichs gerastert
LibCngeBoxSubDefiniert das Aussehen eines definierten Bereichs (Löschen, Invertieren, Rastern)

Die Funktionen mit relativen Angaben können genutzt werden, wenn der Bereich, der sich ändert immer gleich gross bleiben soll, aber immer an verschiedenen Stellen auftauchen soll.
Typischen Beispiel sind Auswahlbalken (z.B. in Listen)

Schrift

Zur Schriftausgabe stehen ebenfalls unterschiedliche Funktionen zur Verfügung, die sich allerdings jetzt unterscheiden:

LibPutProFontGibt ein Zeichen an einer x/y Koordinate in einem bestimmten Font aus. Als Rückgabewert liefert die Funktion die x-Koordinate für das nächste mögliche Zeichen.
LibPutProStrGibt einen Text an x/y Koordinaten aus. Dabei kann der Font mit angegeben werden und wieviele Pixel der Text maximal lang sein darf. Ist der text länger, so wird er abgeschnitten.
LibPut35FontGibt ein Zeichen an einer x/y Koordinate in einem sehr kleinen Font aus. Es sind nur folgende Zeichen erlaubt:

Andere Zeichen werden durch ein gefülltes Rechteck der Größe 3x5 Pixel ersetzt.
LibPut35StrGibt eine Zeichenkette in dem sehr kleinen Font aus, die nur aus den erlaubten Zeichen bestehen darf.
LibStringDspGibt eine Zeichenkette an einer x/y Koordinate mit einem bestimmten Font aus. Die Zeichenkette wird bis zu einer bestimmten Anzahl von Pixeln ausgegeben. Ist die Zeichenkette länger, als in den definierten Bereich passt so werden die letzten Zeichen durch ... ersetzt, um anzuzeigen, dass der Text eigentlich länger wäre.

Grafiken ausgeben

Neben der Möglichkeit, Linien auf den Bildschirm zu malen, kann man auch bereits vordefinierte Bitmaps ausgeben lassen.
Dabei unterscheidet der PocketViewer zwischen den internen Grafiken und den durch den Programmierer definierten Icons.
Die Definition und Ausgabe von frei definierten Icons ist im Kapitel 3.6.4 ausführlicher erläutert.
Um die fest definierten Grafiken ausgeben zu lassen, gibt es den Befehl LibPutFarData(), der an einer x/y Position eine vordefinierte Grafik ausgibt. Vordefinierte Grafiken werden über eine Nummer angesprochen. Eine Übersicht aller vordefinierten Grafiken ist in Kapitel 7 aufgeführt.

Für Ergänzungen wenden Sie sich bitte an: Jürgen Wagner