Seite 1 von 1

Textausgabe in Image haut einfach nicht hin

Verfasst: 21.04.2006 21:55
von Pferd
Hallo. Ich hab mich in den Boards wundgesucht, find aber keine Lösung. Wer weiß, was ich falsch mache?
StartDrawing(ImageOutput()) soll ja laut Doku den DC zurückliefern, was es wohl auch richtig macht, denn das blaue Quadrat erscheint mit FillRect_ korrekt im Image.
DrawText_ macht aber keinerlei Anstalten, den Text wie gewünscht innerhalb des RECTs vertikal und horizontal zu zentrieren, sondern setzt ihn bei 0, 0 ab und clippt ihn auch noch.
Was muss ich machen, damit DrawText_ in einem Image richtig funktioniert?

Code: Alles auswählen

Procedure WindowCallback(WindowID, Message, lParam, wParam)
  If Message = #WM_PAINT
    StartDrawing(WindowOutput())
      DrawImage(UseImage(0), 40, 10)
    StopDrawing()
  EndIf
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

If OpenWindow(0, 100, 100, 500, 300, #PB_Window_SystemMenu, "PureBasic - Image")
  Gosub CreateImage
  SetWindowCallback(@WindowCallback())
  Repeat
    EventID = WaitWindowEvent()
  Until EventID = #PB_Event_CloseWindow
EndIf
End

CreateImage:
  If CreateImage(0, 255, 255)
    imageDC=StartDrawing(ImageOutput())
    trec.RECT
    trec\left=5: trec\top=5: trec\right=100: trec\bottom=100
    hBrush = CreateSolidBrush_($ff0000)
    FillRect_(imageDC, trec, hBrush)
		 DrawText_(imageDC,"TEXT",Len("TEXT"),trec,#DT_CENTER|#DT_VCENTER|#DT_SINGLELINE) 
    StopDrawing()
  EndIf
Return

Verfasst: 22.04.2006 20:44
von ABBKlaus
ich glaub du hast da was vergessen :o
The text alignment mode for the device context must include the TA_LEFT, TA_TOP, and TA_NOUPDATECP flags.

Code: Alles auswählen

CreateImage: 
  If CreateImage(0, 255, 255) 
    imageDC=StartDrawing(ImageOutput()) 
    SetTextAlign_(imageDC,#TA_LEFT|#TA_TOP|#TA_NOUPDATECP)
    trec.RECT 
    trec\left=5: trec\top=5: trec\right=100: trec\bottom=100 
    hBrush = CreateSolidBrush_($ff0000) 
    FillRect_(imageDC, trec, hBrush)
       DrawText_(imageDC,"TEST",Len("TEXT"),@trec,#DT_CENTER|#DT_VCENTER|#DT_SINGLELINE) 
    StopDrawing() 
  EndIf 
Return
MfG Klaus

Verfasst: 23.04.2006 10:51
von Pferd
Ich danke dir. Hat mir sehr geholfen. Darauf wär ich nie gekommen. In einem Window klappt das nämlich auch ohne SetTextAlign_, nur in einem Image klappte es nicht, worauf ich die Welt erst mal nicht verstand.