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...
Ist Locate() ungenau?
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
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.
Und hier das Ganze nochmals in PB3.94 Code:
Gruß, PureLust.
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
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
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
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
PureBasicPower TailBite Printer_Lib / PDFBarcode / PrintBarcode / ExcelWriter