Hi,
ich habe einen mehrzeiligen Text, den ich zentriert in ein Canvas malen möchte…
Auf die Schnelle würde ich den Text in Zeilen zerlegen, mit g.stringwidth die breite ermitteln und dann die einzelnen zeilen mit g.drawstring malen
hat jemand eine besser Idee?
Passt nicht, da ich Flietext habe, ohne Zeilenumbruch… ich muss schauen wie viel text in eine Zeile passt ohne umzubrechen, den nehme ich dann und male ihn zentriert hin, dann den resttext usw…
Du könntest eine TextArea verwenden die links außerhalb des Fensters ist (und damit unsichtbar). Die TextArea ist zentriert, ohne Scrollbalken, und du malst den Inhalt der TextArea dann in den Canvas:
[code]Sub Paint(g As Graphics)
TextArea1.DrawInto ( g, 10, 20 )
End Sub[/code]
In the Canvas paint event:
Sub Paint(g As Graphics)
TextArea1.Visible = True
TextArea1.DrawInto ( g, 10, 20 )
TextArea1.Visible = False
End Sub
In the Window’s Resizing event
Sub Resizing()
TextArea1.Left = self.Left - Canvas1.Width - 10
TextArea1.Width = Canvas1.Width - 20
TextArea1.Height = Canvas1.Height
End Sub
see a little movie of it in action https://dl.dropboxusercontent.com/u/992591/REALbasic/Forum/Centered%20Text.mp4
zu spt (-: ich habs so gelst:
//----------------------------- Zentriert malen
dim strings(-1) as string
dim i, iMax as integer
strings = Split(text," ") // in Text stehen ein paar Stze
text=""
iMax = UBound(strings)
for i = 0 to iMax
text = text+strings(i)+" "
if g.StringWidth(text) > breite then
text=left(text,len(text)-len(strings(i))-1)
x = (screen(0).Width/2) - (g.StringWidth(text)/2)
g.DrawString(text,x,y)
y=y+g.TextSize
text=strings(i)+" "
end if
next
// hier noch den Rest zentriert malen
if len(text)>len(strings(iMax))+1 then
x = (screen(0).Width/2) - (g.StringWidth(text)/2)
g.DrawString(text,x,y)
end if
Schick. Werd ich mir merken.
Allerdings kann meine Lösung StyledText, von daher deine vielleicht noch erweitern
(screen(0).Width/2) ???
Zentriert auf den Bildschirm, nicht den Canvas?