Example #1
0
        private void lbSearchVerses_MeasureItem(object sender, MeasureItemEventArgs e)
        {
            if (e.Index < 0)
            {
                return;
            }
            BibleSearchResult si = (BibleSearchResult)lbSearchVerses.Items[e.Index];

            e.ItemHeight = (int)e.Graphics.MeasureString(si.ToString(), lbSearchVerses.Font, lbSearchVerses.Width - 15).Height + 6;
        }
Example #2
0
        private void lbSearchVerses_DrawItem(object sender, DrawItemEventArgs e)
        {
            if (e.Index < 0)
            {
                return;
            }

            // Init
            BibleSearchResult si            = (BibleSearchResult)lbSearchVerses.Items[e.Index];
            string            txt           = si.ToString();
            SolidBrush        brushNormal   = new SolidBrush(Color.FromArgb(223, 223, 223));
            SolidBrush        brushSelected = new SolidBrush(Color.FromArgb(255, 204, 91));
            StringFormat      sf            = new StringFormat();

            sf.SetMeasurableCharacterRanges(SearchHelper.FindCharacterRanges(txt, searchTerms));
            int       h = (int)e.Graphics.MeasureString(txt, lbSearchVerses.Font, lbSearchVerses.Width - 15).Height;
            Rectangle r = new Rectangle(e.Bounds.X + 7, e.Bounds.Y + 3, lbSearchVerses.Width - 15, h);

            // Draw the background
            if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
            {
                e.Graphics.FillRectangle(brushSelected, e.Bounds.X + 1, e.Bounds.Y + 1, e.Bounds.Width - 2, e.Bounds.Height - 2);
            }
            else
            {
                e.Graphics.FillRectangle(brushNormal, e.Bounds.X + 1, e.Bounds.Y + 1, e.Bounds.Width - 2, e.Bounds.Height - 2);
            }

            // Fill in the highlights
            foreach (Region rg in e.Graphics.MeasureCharacterRanges(txt, lbSearchVerses.Font, r, sf))
            {
                e.Graphics.FillRegion(new SolidBrush(Color.FromArgb(100, Color.Yellow)), rg);
            }

            // Draw text
            if (si.score > 600)
            {
                e.Graphics.DrawString(txt, lbSearchVerses.Font, new SolidBrush(Color.FromArgb(80, 80, 80)), r, sf);
            }
            else
            {
                e.Graphics.DrawString(txt, lbSearchVerses.Font, Brushes.Black, r, sf);
            }
        }