Page 1 of 1

Annotation with styles

Posted: Wed Dec 14, 2016 11:38 am
by 15678407
Hello,
is there some way how to create Annotation with styled text? I think that it could be enough mix of normal and bold text. I have several lines in the Annotation and I want to stress the most important things.
can you please provide me some example how to do it?
I thought about creating my own Annotation class which inherits from yours and override painting, but it would be easier with some sample code from your side :-).
Thank you.

Re: Annotation with styles

Posted: Wed Dec 14, 2016 4:42 pm
by Christopher
Hello!

yes, there is a simple, although not obvious, hack you can use. Here's the MyAnnotation class:

Code: Select all

  public class MyAnnotation : Annotation
  {
    public MyAnnotation(Chart c) : base(c) { }

    protected override void DrawString(Graphics3D g, int x, int y, int t, int tmpHeight, string[] s)
    {
      g.TextOut(x, y + (t - 1) * tmpHeight, 0, s[t - 1], Shape.TextFormat == TextFormat.Html);
    }
  }
And here it is used:

Code: Select all

    private void InitializeChart()
    {
      MyAnnotation tool = new MyAnnotation(tChart1.Chart);
      tool.Shape.TextFormat = TextFormat.Html;
      tool.Shape.Font.Size = 20;
      tool.Text = "<b>Hello</b>" + Utils.NewLine + "<i>World</i>";
    }
which gives me the following:
636173338531141609.jpg
636173338531141609.jpg (18.98 KiB) Viewed 14175 times

Re: Annotation with styles

Posted: Thu Dec 15, 2016 10:03 am
by 15678407
Hello Christopher,
thank you for your quick reply. I didn't notice that I had old version of TeeChart in that project (from 2013) and html was not working in that version - it even didn't have TextOut method with five parameters.

Now I have problem with auto width. If I have normal and bold text on one line, it calculates wrong width for the annotation:
Image
Width is correct if I don't use bold:
Image
I also notice that the problem starts with enough long normal text - if I wrote only "Long normal: Long bold text" it works as expected.
Image
I set ClipText = false to see the whole text.

When I changing to the newest TeeChart version I notice that if I create Theme without Chart in constructor and then call Apply with my Chart it throws NullReferenceException, but it worked in the old 2013 version. When I create Theme with new Chart() in constructor and then call Apply with my Chart it works as expected.

Code: Select all

new Steema.TeeChart.Themes.TeeChartTheme(new Chart()).Apply(chart); //this works
new Steema.TeeChart.Themes.TeeChartTheme().Apply(chart); //this worked only in older version and now throws NullReferenceException
Is this behaviour correct?

Thank you

Martin

Re: Annotation with styles

Posted: Thu Dec 15, 2016 11:50 am
by Christopher
Hello,
BMR wrote:

Code: Select all

new Steema.TeeChart.Themes.TeeChartTheme(new Chart()).Apply(chart); //this works
new Steema.TeeChart.Themes.TeeChartTheme().Apply(chart); //this worked only in older version and now throws NullReferenceException
Is this behaviour correct?
No - this is a small defect which I've entered into our issue tracking software with id=1723 and which I've already fixed.

Re: Annotation with styles

Posted: Thu Dec 15, 2016 11:51 am
by Christopher
BMR wrote: I set ClipText = false to see the whole text.
So setting this property to this value gives you the result you need, is that correct?

Re: Annotation with styles

Posted: Thu Dec 15, 2016 11:58 am
by 15678407
Sorry, I didn't wrote it clearly.
Images I posted are what it looks like if I set ClipText = false. If I set ClipText = true, the size of the Annotation is same, but the text is clipped, so it looks like this:
Image

Martin

Re: Annotation with styles

Posted: Thu Dec 15, 2016 12:28 pm
by Christopher
BMR wrote:Sorry, I didn't wrote it clearly.
Images I posted are what it looks like if I set ClipText = false. If I set ClipText = true, the size of the Annotation is same, but the text is clipped, so it looks like this:
Okay, I see. Yes, there is an issue with this "hack" in which AutoSize is not sizing to the text, in which case you will have to set it to false and manually set the width and height. I have added an enhancement to our issue tracking software with id=1725 to deal with this.

Re: Annotation with styles

Posted: Thu Dec 15, 2016 3:06 pm
by 15678407
I appreciate your quick help.
Since I only need to handle bold and normal text I also overrode CalcTempWidth(Graphics3D g, string tmp, out int NumLines) method and now it looks almost OK - still not quite sure why there is such a big space between normal and bold text, because there is only one space in the source text (and it looks like at least two in the Annotation) but I guess it doesn't matter.
Thank you.

Martin