Mehrzeiligen Text zentriert mit drawstring

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?

Nö. Aber siehe hierzu http://www.monkeybreadsoftware.eu/listarchive-realbasic-nug/2004-05-11-6.shtml

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

(screen(0).Width/2) ???

Zentriert auf den Bildschirm, nicht den Canvas?