TextObject.PreviewExt.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System.Windows.Forms;
  2. using System.Drawing;
  3. using FastReport.Utils;
  4. using System;
  5. namespace FastReport
  6. {
  7. partial class TextObject
  8. {
  9. #region ISearchable Members
  10. /// <inheritdoc/>
  11. public override void DrawSearchHighlight(FRPaintEventArgs e, CharacterRange range)
  12. {
  13. if (Angle == 0 && FontWidthRatio == 1 && HorzAlign != HorzAlign.Justify)
  14. {
  15. IGraphics g = e.Graphics;
  16. Font font = e.Cache.GetFont(Font.FontFamily, Font.Size * e.ScaleX * 96f / DrawUtils.ScreenDpi, Font.Style);
  17. StringFormat format = GetStringFormat(e.Cache, 0);
  18. RectangleF textRect = new RectangleF(
  19. (AbsLeft + Padding.Left) * e.ScaleX,
  20. (AbsTop + Padding.Top) * e.ScaleY,
  21. (Width - Padding.Horizontal) * e.ScaleX,
  22. (Height - Padding.Vertical) * e.ScaleY);
  23. RectangleF rangeRect;
  24. if (Angle == 0 && FontWidthRatio == 1 && HorzAlign != HorzAlign.Justify)
  25. {
  26. format.SetMeasurableCharacterRanges(new CharacterRange[] { range });
  27. Region[] regions = g.MeasureCharacterRanges(Text, font, textRect, format);
  28. rangeRect = regions[0].GetBounds(g.Graphics);
  29. regions[0].Dispose();
  30. regions[0] = null;
  31. }
  32. else
  33. rangeRect = new RectangleF(AbsLeft * e.ScaleX, AbsTop * e.ScaleY, Width * e.ScaleX, Height * e.ScaleY);
  34. using (Brush brush = new SolidBrush(Color.FromArgb(128, SystemColors.Highlight)))
  35. {
  36. g.FillRectangle(brush, rangeRect);
  37. }
  38. }
  39. else
  40. base.DrawSearchHighlight(e, range);
  41. }
  42. #endregion
  43. }
  44. }