Referenz - DRAW STRING
Syntax: DRAW STRING [Puffer, ] [STEP] (x, y), Text [, [Farbe] [, [Font] [, Methode] ]]
Typ: Anweisung
Kategorie: Grafik
DRAW STRING gibt einen Text im Grafikmodus an pixelgenauen Koordinaten aus. Der Text kann transparent ausgegeben werden, der Hintergrund bleibt dabei erhalten.
DRAW STRING beeinflusst den Grafikcursor (nicht den Textcursor).
- Wird für 'Puffer' ein Pointer auf einen Speicherbereich angegeben, z.B. ein mit IMAGECREATE erstellter Puffer oder ein Array, wird der Text in diesen Bereich gezeichnet. Wird 'Puffer' ausgelassen, zeichnet FreeBASIC direkt auf den Bildschirm.
- 'STEP' gibt an, dass die folgenden Koordinaten (x, y) relativ zur aktuellen Position des Grafikcursors sein sollen.
- 'x' und 'y' sind die Koordinaten der linken oberen Position, an der die Textausgabe beginnen soll.
- 'Text' ist ein beliebiger STRING oder eine Zeichenkette, die ausgegeben werden soll. Auch WSTRINGs werden unterstützt, allerdings können nur die normalen ASCII-Zeichen korrekt dargestellt werden; Symbole, deren Zeichencode über 255 liegt, werden als Fragezeichen '?' dargestellt.
- 'Farbe' ist die Schriftfarbe, in welcher der Text ausgegeben werden soll. Wird dieses Argument ausgelassen, verwendet FreeBASIC die Vordergrundfarbe (siehe COLOR,).
- 'Font' ist ein Pointer auf einen Fontpuffer, der einen benutzerdefinierten Font enthält. Mehr zum Format dieses Puffers siehe unten.
- 'Methode' ist ein Aktionswort (evtl. mit Parameter), wie es bei PUT (Grafik) verwendet wird. Wird das Aktionswort ausgelassen, verwendet FreeBASIC automatisch TRANS. Aktionswörter können nur mit benutzerdefinierten Fonts verwendet werden, nicht mit dem Standard-Schriftsatz.
Beispiel 1: DRAW STRING
SCREENRES 320, 240, 32
Width 320/8, 240/16 ' Einstellen des großen Fonts
PAINT (0, 0), &H0000FF ' blauer Hintergrund
' "Hello World" auf dem Bildschirm ausgeben; Standardfarbe ist weiß
DRAW STRING ( 10, 2), "Hello World "
' Standardfarbe auf grün setzen und "Hello World" in dieser Farbe ausgeben.
' Die Hintergrundfarbe hat keine Auswirkungen auf die Textausgabe.
COLOR &h00FF00, &hFFFFFF
DRAW STRING (20, 20), "Hello World"
' Umleitung der Ausgabe in einen Puffer
DIM TextPuffer AS ANY PTR
TextPuffer = IMAGECREATE(100, 16)
DRAW STRING TextPuffer, (0, 0), "Hello World", &hFFFFFF
' Die Hintergrundfarbe des Puffer wird gezeichnet!
PUT (100, 100), TextPuffer, PSET
' 'STEP' Schreibposition relativ zum letzten PUT (100, 100)
' hier Schriftfarbe gelb; Methode bleibt wirkungslos beim Standard-Schriftsatz
DRAW STRING Step ( -40, +40), "Hello World", &HFFFF00, , PSET
SLEEP
Benutzerdefinierte Schriftarten
Benutzerdefinierte Schriftarten werden Zeichen für Zeichen nebeneinander in einem Puffer (Image) angelegt. Die Farbtiefe des Puffers muss mit der mittels SCREENRES eingestellten Farbtiefe des Grafikfensters übereinstimmen. Andernfalls erzeugt DRAW STRING den Fehler "Unzulässiger Funktionsaufruf" (siehe Fehler-Behandlung in FreeBASIC). Der Puffer muss also so breit sein, wie alle Zeichen nebeneinander sind. Die erste Zeile des Puffers enthält den 'FontHeader' der Schriftart. Darin ist angegeben, welche Zeichen im Font dargestellt sind und wie breit diese sind. Folglich ist die Höhe des Puffers gleich der Höhe der Zeichen plus eins. Insgesamt ergibt sich dieser Speicheraufbau:
Anzahl Type | ImageHeader |
---|---|
UINTEGER | Version des ImageHeaders =7 |
INTEGER | Byte pro Pixel |
UINTEGER | Breite des Image in Pixel |
UINTEGER | Höhe des Image in Pixel |
UINTEGER | Byte pro Zeile des Image (Pitch) |
12 x UBYTE | reserviert |
Anzahl Type | FontHeader (1. Zeile des Image) |
BYTE | Version des FontHeaders =0 |
UBYTE | ASCII-Code des ersten Zeichens im Puffer |
UBYTE | ASCII-Code des letzten Zeichens im Puffer |
UBYTE | Breite des 1. Zeichens |
UBYTE | Breite des 2. Zeichens |
je 1 UBYTE | Breite nächstes Zeichen |
" | " |
UBYTE | Breite des letzten Zeichens |
XX UBYTE | unbenutzt, bis Ende der 1. Zeile |
Image | |
XX | 2. Zeile bis letzte Zeile |
Beispiel 2: Erstellen und Speichern eines benutzerdefinierte Fonts
' CHR-Bereich festlegen
Const Erster = 32, Letzter = 127, Anzahl = (Letzter - Erster) + 1
Dim As UByte Ptr p, myFont 'Pointer um FBF zu füllen
Dim As Long farbe, hoehe=16 'nur 8,14 oder 16
' Einen 256 Farbgrafik-Screen (320*200) erzeugen
ScreenRes 320, 200, 8,,32 Or 4
Width 320\8, 200\hoehe ' Font 8/8, 8/14, 8/16
' Erstellen eines Benutzerfonts in einem Image
' (Anzahl Zeichen * Zeichenbreite , Zeichenhöhe + 1(für Fontheader))
myFont = ImageCreate(Anzahl * 8, hoehe +1)
' p = Zeiger auf den FontHeader
p = myFont + 32 '32 Byte für den Fontheader
p[0] = 0 'Fontversion bisher immer 0
p[1] = Erster 'erster Buchstabe im Font
p[2] = Letzter 'letzter Buchstabe im Font
For i As Long = Erster To Letzter
p[3 + i - Erster] = 8 'Zeichenbreite
farbe = 60 + (i Mod 24) 'Zeichenfarbe, recht bunt
'Zeichen in Font-Puffer kopieren (aus kleinem Standard Font)
Draw String myFont, ((i - Erster) * 8, 1), Chr(i), farbe
Next i
' Den Font-Puffer können wir mit BSAVE abspeichern.
' Die Anzahl zu speichernde Byte berechnet sich aus
' (Anzahl * Zeichenbreite * (Zeichenhöhe + 1) * Byte_per_Pixel) + ImageHeader
BSave "myfont.fbf", myFont, (Anzahl * 8 * (hoehe+1) * 1) + 32
' Als Bitmap können wir den Font so speichern:
'BSave "myfont.bmp", myFont
' Hier zeichnen wir einen String mit unserem Font
Draw String (10, 10), "ABCDEFGHIJKLMNOPQRSTUVWXYZ",, myFont
Draw String (10, 40), "abcdefghijklmnopqrstuvwxyz",, myFont
Draw String (60, 70), "Hello world!",, myFont
ImageDestroy myFont 'Speicherbereich freigeben
Sleep
- Einmal erstellt, kann eine Schriftart wie im Beispiel mit BSAVE gespeichert und später mit BLOAD wieder geladen werden.
- Die Verwendung des Farb-Parameters ist mit eigenen Schriftarten nicht möglich, da die Schriftart selbst schon die Farbe beinhalten kann.
Beispiel 3: Der Parameter 'Methode' mit selbstdefinierten Fonts:
' Einen 256 Farbgrafik-Screen (320*200) erzeugen
ScreenRes 320, 200, 8,,32 Or 4
' Für dieses Beispiel brauchen wir den zuvor erstellten Font 'myfont.fbf'
' Dies brauche ich nur wenn Breite und Hoehe unbekannt sind
Dim As Long breit, hoch, ff = FreeFile
If Open("myfont.fbf" For Binary Access Read As #ff)<>0 Then
Close #ff
Print "keine Fontdatei gefunden!"
Sleep
End
End If
Get #ff, 14, breit
Get #ff, 18, hoch
Close #ff
' Erstellen eines Benutzerfonts im Image
Dim As UByte Ptr myFont = ImageCreate(breit, hoch)
' Jetzt können wir den Font mit BLoad laden
BLoad "myfont.fbf", myFont
Paint (0, 0), 1' Ein blauer Hintergrund
' Hier zeichnen wir einen String mit unserem Font und 'Methode'
Draw String (10, 10), "PSET: ABCDEFGHIJKLMNOPQRSTUVWXYZ",, myFont, PSet
Draw String (10, 30), "PRESET: ABCDEFGHIJKLMNOPQRSTUVWXYZ",, myFont, PReset
Draw String (10, 50), "AND: ABCDEFGHIJKLMNOPQRSTUVWXYZ",, myFont, And
Draw String (10, 70), "OR: ABCDEFGHIJKLMNOPQRSTUVWXYZ",, myFont, Or
Draw String (10, 90), "XOR: ABCDEFGHIJKLMNOPQRSTUVWXYZ",, myFont, Xor
Draw String (10, 110), "normal: abcdefghijklmnopqrstuvwxyz",, myFont
Draw String (66, 130), "Hello world!",, myFont
ImageDestroy myFont 'Speicherbereich freigeben
Sleep
Für die Verwendung des Aktionswortes CUSTOM siehe PUT (Grafik).
Unterschiede zu QB: neu in FreeBASIC
Unterschiede zu früheren Versionen von FreeBASIC:
- DRAW STRING existiert seit FreeBASIC v0.16.
- Das Aktionswort ADD existiert seit FreeBASIC v0.17.
Siehe auch:
DRAW (Grafik), PRINT (Anweisung), LOCATE (Anweisung), WIDTH (Anweisung), Grafik
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|