Seite 1 von 1

Ist Locate() ungenau?

Verfasst: 04.05.2006 10:26
von Delle
Hallo,

ich schreibe mit Locate(5,5) einen Text auf ein Bild,
die linke obere Ecke des Textes ist aber dann
letztendlich auf dem Bild X=6 und Y=8.

Arbeitet der Befehl ungenau oder liegt das ev. am Font?

PS: Ich weiß ab PB4 gibt's den Befehl nicht mehr...

Verfasst: 04.05.2006 12:47
von PureLust
Hi Delle, ...

der Locate Befehl arbeitet natürlich korrekt (s.Beispiel).
Ich vermute mal, dass Du jedoch den oberen linken Pixel des ersten Zeichen meinst.

Ein Text besteht jedoch nicht nur aus den sichtbaren Pixeln, sondern auch noch aus einigem Platz drumherum.
So benötigen ja z.B. die Punkte auf Umlaute oder auch Unterlängen ebenfalls Platz.

An dem kleinen Beispiel kannst Du leicht erkennen WAS genau an der Position 5,5 platziert wird und wieviel Platz ein Text tatsächlich benötigt.

Code: Alles auswählen

If OpenWindow(0,100,100,50,50,"Locate Test")
	Repeat
		Event = WaitWindowEvent()
		Select Event
			Case #PB_Event_CloseWindow
				Quit = 1
			Case #PB_Event_Repaint
				For n = 0 To 40
					StartDrawing(WindowOutput(0))
					Box(n,n,50-n*2,50-n*2,(n&1)*$808080)
					DrawText(5,5," Hallo ")
					StopDrawing()
				Next n
		EndSelect
	Until Quit
	CloseWindow(0)
EndIf
End
Und hier das Ganze nochmals in PB3.94 Code:

Code: Alles auswählen

If OpenWindow(0,100,100,50,50,#PB_Window_SystemMenu,"Locate Test")
	Repeat
		Event = WaitWindowEvent()
		Select Event
			Case #PB_Event_CloseWindow
				Quit = 1
			Case #PB_Event_Repaint
				For n = 0 To 40
					StartDrawing(WindowOutput())
					Box(n,n,50-n*2,50-n*2,(n&1)*$808080)
					Locate(5,5)
					DrawText(" Hallo ")
					StopDrawing()
				Next n
		EndSelect
	Until Quit
	CloseWindow(0)
EndIf
End
Gruß, PureLust.

Verfasst: 04.05.2006 12:53
von Delle
Hm, kann natürlich sein, dass die PB4-Version von DrawText() genauer ist als Locate()...

Ich hab extra Verdana Größe 8 genommen und am Anfang mal ein großer "W" etc. hingemacht, die "falsche" Position bleibt leider trotzdem naja...

Verfasst: 04.05.2006 16:33
von ABBKlaus
Text richtig positionieren : :mrgreen:

Code: Alles auswählen

FontID=LoadFont(#PB_Any,"Arial",8)
;FontID=LoadFont(#PB_Any,"Arial",20)
UseFont(FontID)

If OpenWindow(0,100,100,50,50,#PB_Window_SystemMenu,"Locate Test") 
   Repeat 
      Event = WaitWindowEvent() 
      Select Event 
         Case #PB_Event_CloseWindow 
            Quit = 1 
         Case #PB_Event_Repaint
            DC=StartDrawing(WindowOutput())
            DrawingFont(FontID())
            GetTextMetrics_(DC,TM.TEXTMETRIC)
            Height=TM\tmAscent
            Debug Height ; 16 Pixel
            ;SetTextAlign_(DC,#TA_UPDATECP) ; TOP
            ;SetTextAlign_(DC,#TA_BASELINE|#TA_UPDATECP) ; BASELINE
            SetTextAlign_(DC,#TA_BOTTOM|#TA_UPDATECP) ; BOTTOM
            For n = 0 To 40 
               Box(n,n,50-n*2,50-n*2,(n&1)*$808080) 
            Next n 
            Locate(5,Height) 
            DrawText("-Hallo-") 
            StopDrawing() 
      EndSelect 
   Until Quit 
   CloseWindow(0) 
EndIf 
End