I rarely deal with long text (paragraphs) in canvases and was suprised to see that g.drawstring does not respect “endofline”. Is there a special trick to drawing text with endoflines in them? I could have sworn a few years ago I was drawing endofline in canvases just fine…
Have a look at the third parameter of the drawstring function: http://documentation.xojo.com/index.php/Graphics.DrawString
Actually you mean the fourth parameter Wrapwidth
Ah yes. Counting is harder than it seems
While currently working on a project which uses EndOfLine in a DrawString for a Canvas, I can confirm it still works as expected in Xojo like it did in RS. WrapWidth just does this automatically for you.
I’m rather wondering how to wrap text using StringShapes…
@Alex von Siebenthal: Indeed, line breaks are not supported in StringShapes. I wonder too…
Got it working I can post an example if desired.
Solutions are always welcome. So, yes, post yours. Others will be thankful, when stumbling across this matter.
I can wrap text, that is not the issue. I can’t get endofline or line breaks to work in canvases. Here’s a screenshot of what happens. I copied some text from CNN, paste it into a textfield (with styledtext turned off) and have them rendered on a canvas: http://koualo.com/beta/eofissueoncanvas.png
All of those little diamonds with the ? in them are line breaks or endoflines. I even manually put “hello” + endofline + endofline + “world.” and still get the little black diamond.
I would certainly love to see how you are doing it because it is not working for me.
Perhaps there’s a better way to create dynamically sized “listboxes” (height-wise) than faking it with a canvas?
I would certainly love to see how you are doing it because it is not working for me.[/quote]
To handle drawing multiline strings I wrote code that handled wrapping myself. It first splits the text into paragraphs at linebrakes, then wraps the lines for each paragraph and returns the physical lines as a string array…
(all this assume a unstyled text)
Once you have that array, using g.textheight you know how tall it needs to be and can easily draw it…
I use the same approach when dealing with stringshapes
This approach lets me control line spacing and justification… and for list box use I also have it add an ellipsis if the wrapped text won’t fit in a specified rectangle.
If you copy text from elsewhere it may not have the right EndOfLine format for your platform. That’s the reason.
Indeed, make sure you use ReplaceLineEndings(), otherwise I do it exactly as Karen described.
Funy, I actually thought of doing that but I just became very lazy last night. But this morning, I was thinking that maybe it would be much simpler for me to use a HTML Viewer instead of a canvas to “fake” a dynamic listbox…
I also said that I entered directly into the paint event: “hello” + endofline + endofline + “world.” – and same thing happened.
I think the only solution to this canvas issue is to use a split and then manually calculate the next position of the text in the split array. I wish that canvas would just support endofline natively.
Then something else must be wrong. As I stated above, it works for me. (tested)
Whew, figured it out. I forgot to .DefineEncoding(Encodings.UTF8) when retreiving from the sqlite db.
Thank you everyone, for helping me figure this out.