Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - DRAW STRING

Referenz-Navigation

 

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).

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 BefehlsreferenzeintragSCREENRES eingestellten Farbtiefe des Grafikfensters übereinstimmen. Andernfalls erzeugt DRAW STRING den Fehler "Unzulässiger Funktionsaufruf" (siehe BefehlsreferenzeintragFehler-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 TypeImageHeader
UINTEGERVersion des ImageHeaders =7
INTEGERByte pro Pixel
UINTEGERBreite des Image in Pixel
UINTEGERHöhe des Image in Pixel
UINTEGERByte pro Zeile des Image (Pitch)
12 x UBYTEreserviert
Anzahl TypeFontHeader (1. Zeile des Image)
BYTEVersion des FontHeaders =0
UBYTEASCII-Code des ersten Zeichens im Puffer
UBYTEASCII-Code des letzten Zeichens im Puffer
UBYTEBreite des 1. Zeichens
UBYTEBreite des 2. Zeichens
je 1 UBYTEBreite nächstes Zeichen
""
UBYTEBreite des letzten Zeichens
XX UBYTEunbenutzt, bis Ende der 1. Zeile
Image
XX2. 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
Dim As Integer farbe
' Einen 256 Farbgrafik-Screen (320*200) erzeugen
ScreenRes 320, 200, 8

' Erstellen eines Benutzerfonts in einem Image
' (Anzahl Zeichen * Zeichenbreite , Zeichenhöhe + 1(für Fontheader))
myFont = ImageCreate(Anzahl * 8, 8 +1)
' p = Zeiger auf den FontHeader
p = myFont + IIf(myFont[0] = 7, 32, 4)
p[0] = 0       'Fontversion bisher immer 0
p[1] = Erster  'erster Buchstabe im Font
p[2] = Letzter 'letzter Buchstabe im Font

For i As Integer = Erster To Letzter
  p[3 + i - Erster] = 8   'Zeichenbreite
  farbe = 60 + (i Mod 24) 'Zeichenfarbe
  '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 * 9 * 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, 26), "abcdefghijklmnopqrstuvwxyz",, myFont
Draw String (66, 58), "Hello world!",, myFont

ImageDestroy myFont 'Speicherbereich freigeben

Sleep

Beispiel 3: Der Parameter 'Methode' mit selbstdefinierten Fonts:

' Einen 256 Farbgrafik-Screen (320*200) erzeugen
ScreenRes 320, 200, 8

' Für dieses Beispiel brauchen wir den zuvor
' erstellten Font 'myfont.fbf', siehe Beispiel 2

' Dies brauche ich nur wenn Breite und Hoehe unbekannt sind
' sonst breit = Anzahl * 8 : hoch = 9
Dim As Integer 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

' Ein blauer Hintergrund
Paint (0, 0), 1
' Hier zeichnen wir einen String mit unserem Font und 'Methode'
Draw String (10, 10), "PSET:   ABCDEFGHIJKLMNOPQRSTUVWXYZ",, myFont, PSet
Draw String (10, 26), "PRESET: ABCDEFGHIJKLMNOPQRSTUVWXYZ",, myFont, Preset
Draw String (10, 42), "AND:    ABCDEFGHIJKLMNOPQRSTUVWXYZ",, myFont, And
Draw String (10, 58), "OR:     ABCDEFGHIJKLMNOPQRSTUVWXYZ",, myFont, Or
Draw String (10, 74), "XOR:    ABCDEFGHIJKLMNOPQRSTUVWXYZ",, myFont, Xor
Draw String (10, 90), "normal: abcdefghijklmnopqrstuvwxyz",, myFont
Draw String (66, 106), "Hello world!",, myFont
ImageDestroy myFont 'Speicherbereich freigeben

Sleep

Für die Verwendung des Aktionswortes BefehlsreferenzeintragCUSTOM siehe BefehlsreferenzeintragPUT (Grafik).

Unterschiede zu QB: neu in FreeBASIC

Unterschiede zu früheren Versionen von FreeBASIC:

Siehe auch:
BefehlsreferenzeintragDRAW (Grafik), BefehlsreferenzeintragPRINT (Anweisung), BefehlsreferenzeintragLOCATE (Anweisung), BefehlsreferenzeintragWIDTH (Anweisung), BefehlsreferenzeintragGrafik


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 24.07.2007 von RedakteurVolta angelegt.
  • Die aktuellste Version wurde am 27.12.2012 von Redakteurnemored gespeichert.
  Versionen Versionen