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 :
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