[gelöst] Zu kleine Werte von Textwidth()

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

[gelöst] Zu kleine Werte von Textwidth()

Beitrag von scholly »

moin, moin...

Ich dokter jetzt an dem Code 'ne Stunde 'rum :? und bekomme nicht heraus, warum Textwidth IMHO zu kleine Werte zurückgibt.

Code: Alles auswählen

InitSprite()
fontsize = 32
zeilenabstand = 8
LoadFont(0,"Verdana",fontsize,#PB_Font_Bold)
#window_height = 600
#window_width  = 900
#screen_height = 570
#screen_width  = 870

OpenWindow(0, #PB_Ignore, #PB_Ignore, #window_width, #window_height, "DisplaySprite3D", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),15,15,#screen_width,#screen_height,0,15,15)

; damit das Sprite und darin der Text zentriert werden können,
; müssen die Werte vorher berechnet werden.
; am besten alles in einer Struktur ablegen
Structure zeile
  text.s
  width.l
EndStructure

Global width_max.l  = 0

Global Dim itext.zeile(25)

Procedure fill_zeile(counter.l,textzeile.s)
    itext(counter)\text  = textzeile
    Debug "Textzeile :" + textzeile
    itext(counter)\width = TextWidth(textzeile)
    Debug "Textbreite: "+ Str(itext(counter)\width)
    If itext(counter)\width  > width_max  : width_max  = itext(counter)\width  : EndIf
    Debug "Max_breite: "+ Str(width_max)
EndProcedure

CreateImage(0, 870, 570)
  StartDrawing(ImageOutput(0))
  
    fill_zeile(0,"Ich will ja nur mal testen")  
    fill_zeile(1,"ob ich das hinbekomme und")
    fill_zeile(2,"für Geschwindigkeit muß am")
    fill_zeile(3,"'Y-Wert' gedreht werden und") 
    fill_zeile(4,"als nächstes probier ich")
    fill_zeile(5,"dann endlosscrollen und dann")
    fill_zeile(6,"zu zentrieren und danach eine")
    fill_zeile(7,"Textur statt Textfarbe und")
    fill_zeile(8,"dann versuch ich, daß es oben")
    fill_zeile(9,"schmaler wird (STAR WARS)")
    fill_zeile(10,"und dann..............")
    
    Debug "Max. Breite: " + Str(width_max)
        
  StopDrawing()
FreeImage(0)

sprite_height = 12*(32+zeilenabstand)
sprite_width  = width_max
y_offset = 0

CreateSprite(0, sprite_width, sprite_height, #PB_Sprite_Texture)
  StartDrawing(SpriteOutput(0))
   
    DrawingMode(1)
    FrontColor(#Red)
    DrawingFont(FontID(0))
    DrawText(0,y_offset,itext(0)\text)
    
    y_offset + fontsize + zeilenabstand
    DrawText(0,y_offset,itext(1)\text)
    
    y_offset + fontsize + zeilenabstand
    DrawText(0,y_offset,itext(2)\text)
    
    y_offset + fontsize + zeilenabstand
    DrawText(0,y_offset,itext(3)\text)
    
    y_offset + fontsize + zeilenabstand
    DrawText(0,y_offset,itext(4)\text)
    
    y_offset + fontsize + zeilenabstand
    DrawText(0,y_offset,itext(5)\text)
    
    y_offset + fontsize + zeilenabstand
    DrawText(0,y_offset,itext(6)\text)
    
    y_offset + fontsize + zeilenabstand
    DrawText(0,y_offset,itext(7)\text)
    
    y_offset + fontsize + zeilenabstand
    DrawText(0,y_offset,itext(8)\text)
    
    y_offset + fontsize + zeilenabstand
    DrawText(0,y_offset,itext(9)\text)
    
    y_offset + fontsize + zeilenabstand
    DrawText(0,y_offset,itext(10)\text)
   
  StopDrawing()

y = sprite_height

Repeat

  EventID = WindowEvent()

  ClearScreen(RGB(0, 0, 0))
 
  For spritecounter = 1 To (Round(#screen_height/sprite_height,1) + 1)
    DisplaySprite(0, 0, (spritecounter -2) * sprite_height + y)
  Next spritecounter
     
  y - 1
  If y < 0
    y = sprite_height
  EndIf
 
  FlipBuffers()

Until EventID = #PB_Event_CloseWindow
Wo sitzt der Fehler ?

mDv... scholly
Zuletzt geändert von scholly am 17.05.2008 15:40, insgesamt 1-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: Zu kleine Werte von Textwidth()

Beitrag von Fluid Byte »

scholly hat geschrieben:Wo sitzt der Fehler ?
Vorm Computer! (Danke für diese Vorlage Bild)

Zum Problem:

Du musst die momentane Schriftart auswählen wenn du die Größe berechnest. Ändere Mal diese Stelle:

Code: Alles auswählen

CreateImage(0, 870, 570)
  StartDrawing(ImageOutput(0))
 	DrawingFont(FontID(0)) 	<-- Muss hier hin
    fill_zeile(0,"Ich will ja nur mal testen")
    ...
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Re: Zu kleine Werte von Textwidth()

Beitrag von scholly »

Fluid Byte hat geschrieben:Vorm Computer! (Danke für diese Vorlage Bild)
Gerne, lockert ja auch auf :)
Fluid Byte hat geschrieben: Du musst die momentane Schriftart auswählen wenn du die Größe berechnest. Ändere Mal diese Stelle:

Code: Alles auswählen

CreateImage(0, 870, 570)
  StartDrawing(ImageOutput(0))
 	DrawingFont(FontID(0)) 	<-- Muss hier hin
    fill_zeile(0,"Ich will ja nur mal testen")
    ...
Arrrgl... >_<
Das tut selbst mit weh, wenn ich jetzt sehe, daß ich das beim Erstellen des Sprites ja weiter unten mache.

Danke...
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Antworten