LEADTOOLS Windows Forms (Leadtools.WinForms assembly)

DrawItem Event (RasterImageList)

Show in webframe
Example 





Occurs when a request is made to draw an item in an owner-drawn RasterImageList.
Syntax
'Declaration
 
Public Event DrawItem As EventHandler(Of RasterImageListDrawItemEventArgs)
'Usage
 
Dim instance As RasterImageList
Dim handler As EventHandler(Of RasterImageListDrawItemEventArgs)
 
AddHandler instance.DrawItem, handler

            

            
Event Data

The event handler receives an argument of type RasterImageListDrawItemEventArgs containing data related to this event. The following RasterImageListDrawItemEventArgs properties provide information specific to this event.

PropertyDescription
Graphics The Graphics object into which the item should be drawn.
Item The RasterImageListItem to draw.
Remarks

When you set the ViewStyle property to RasterImageListViewStyle.OwnerDraw, the RasterImageList control will fire the DrawItem event for each event that needs to be drawn. The RasterImageListDrawItemEventArgs argument passed to a DrawItem event handler provides a System.Drawing.Graphics object that enables you to perform drawing and other graphical operations on the surface of the RasterImageList along with the RasterImageListItem object that needs to be drawn.

Example
Copy Code  
Imports Leadtools.WinForms
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.Drawing

Private Class MyForm3 : Inherits Form
   Private imageList As RasterImageList
   Private codecs As RasterCodecs
   Public Sub New(ByVal title As String)
      Text = title
      ' Set the size of the form
      Size = New Size(400, 200)

      ' Create a new RasterImageList control
      imageList = New RasterImageList()
      imageList.Dock = DockStyle.Fill
      imageList.SelectionMode = RasterImageListSelectionMode.Single
      imageList.Size = Size
      Controls.Add(imageList)
      imageList.BringToFront()

      codecs = New RasterCodecs()

      ' Create three items
      Dim imagesPath As String = LEAD_VARS.ImagesDir

      For i As Integer = 0 To 2
         ' Load the image
         Dim index As Integer = i + 1
         Dim imageFileName As String = Path.Combine(imagesPath, "ImageProcessingDemo\Image" & index.ToString() & ".cmp")
         Dim image As RasterImage = codecs.Load(imageFileName, 0, CodecsLoadByteOrder.BgrOrGray, 1, 1)
         Dim item As RasterImageListItem = New RasterImageListItem(image, 1, "Item" & index.ToString())

         ' Select the first item
         If i = 0 Then
            item.Selected = True
         End If

         ' Add the item to the image list
         imageList.Items.Add(item)
      Next i

      ' Change the item size
      imageList.ItemSize = New Size(200, 200)

      ' Change the item image size
      imageList.ItemImageSize = New Size(120, 120)

      ' We are going to draw the items ourselves
      imageList.ViewStyle = RasterImageListViewStyle.OwnerDraw

      ' Add a handler to the DrawItem event
      AddHandler imageList.DrawItem, AddressOf rasterImageList_DrawItem

      ' Add the RasterImageList to the control collection.
      Controls.Add(imageList)
   End Sub

   Private Sub rasterImageList_DrawItem(ByVal sender As Object, ByVal e As RasterImageListDrawItemEventArgs)
      Dim item As RasterImageListItem = e.Item
      Dim imageList As RasterImageList = item.ImageList
      Dim g As Graphics = e.Graphics

      ' get the item rectangle
      Dim rc As Rectangle = imageList.GetItemRectangle(item)

      ' sanity check
      If rc.IsEmpty Then
         Return
      End If

      ' we want to draw a 1 pixel black rectangle around the item
      ' then we fill the inside of the rectangle with white if the item
      ' is not selected or lightgray if it is

      g.DrawRectangle(Pens.Black, rc.Left, rc.Top, rc.Width - 1, rc.Height - 1)

      ' we used up 1 pixel
      rc.Inflate(-1, -1)

      Dim b As Brush
      If item.Selected Then
         b = Brushes.LightGray
      Else
         b = Brushes.White
      End If
      g.FillRectangle(b, rc)

      ' calculate the rectangles for image and text
      If imageList.ShowItemText Then
         ' text is visible
         ' draw the text at the bottom of the item
         Dim textHeight As Integer = CInt(g.MeasureString("WWW", imageList.Font).Height + 4)
         Dim textRect As Rectangle = Rectangle.FromLTRB(rc.Left, rc.Bottom - textHeight, rc.Right, rc.Bottom)

         If (Not textRect.IsEmpty) Then
            Dim sf As StringFormat = New StringFormat()
            sf.Alignment = StringAlignment.Center
            sf.LineAlignment = StringAlignment.Center
            sf.Trimming = StringTrimming.EllipsisPath
            sf.FormatFlags = StringFormatFlags.NoWrap

            g.DrawString(item.Text, imageList.Font, Brushes.Black, textRect, sf)
            sf.Dispose()

            ' we need to update the item rectangle for the space
            ' we used up to draw the text
            rc.Height -= textRect.Height
         End If
      End If

      ' rc is the image rectangle
      If (Not rc.IsEmpty) Then
         ' now rc holds the rectangle to draw the image into

         ' first, set the correct page
         Dim savePage As Integer = -1
         If item.Image.Page <> item.Page Then
            ' the page is different

            ' save current image page so we can set it back when we are done
            savePage = item.Image.Page

            ' disable the image events, we are going to set the page back,
            ' so we do not want anybody subscribing to this image Changed
            ' event to know we changed it.
            item.Image.DisableEvents()

            ' set new page
            item.Image.Page = item.Page
         End If

         Try
            ' we want to center the image into whatever left of rc
            Dim itemImageSize As Size = imageList.ItemImageSize
            Dim imageRect As Rectangle = New Rectangle(rc.Left + (rc.Width - itemImageSize.Width) \ 2, rc.Top + (rc.Height - itemImageSize.Height) \ 2, _
                                                       itemImageSize.Width, itemImageSize.Height)

            ' we want to keep the aspect ratio
            imageRect = RasterImageList.GetFixedAspectRatioImageRectangle(item.Image.ImageWidth, item.Image.ImageHeight, imageRect)

            ' draw the image
            Dim lRect As LeadRect = New LeadRect(imageRect.Left, imageRect.Top, imageRect.Width, imageRect.Height)
            RasterImagePainter.Paint(item.Image, e.Graphics, lRect, imageList.PaintProperties)

            ' finally, draw a black rectangle around the image
            imageRect.Inflate(1, 1)
            g.DrawRectangle(Pens.Black, imageRect.Left, imageRect.Top, imageRect.Width - 1, imageRect.Height - 1)
         Finally
            ' reset the old page
            If savePage <> -1 Then
               item.Image.Page = savePage

               ' re-enable the events
               item.Image.EnableEvents()
            End If
         End Try
      End If
   End Sub
End Class

Public Sub RasterImageList_DrawItem(ByVal title As String)
   Dim form As MyForm3 = New MyForm3(title)
   form.ShowDialog()
End Sub

Public NotInheritable Class LEAD_VARS
Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
using Leadtools.WinForms;
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Drawing;

class MyForm3 : Form
{
   RasterImageList imageList;
   RasterCodecs codecs;
   public MyForm3(string title)
   {
      Text = title;
      // Set the size of the form
      Size = new Size(400, 200);

      // Create a new RasterImageList control
      imageList = new RasterImageList();
      imageList.Dock = DockStyle.Fill;
      imageList.SelectionMode = RasterImageListSelectionMode.Single;
      imageList.Size = Size;
      Controls.Add(imageList);
      imageList.BringToFront();

      codecs = new RasterCodecs();

      // Create three items
      string imagesPath = LEAD_VARS.ImagesDir;

      for(int i = 0; i < 3; i++)
      {
         // Load the image
         int index = i + 1;
         string imageFileName = Path.Combine(imagesPath, @"ImageProcessingDemo\Image" + index.ToString() + ".cmp");
         RasterImage image = codecs.Load(imageFileName, 0, CodecsLoadByteOrder.BgrOrGray, 1, 1);
         RasterImageListItem item = new RasterImageListItem(image, 1, "Item" + index.ToString());

         // Select the first item
         if(i == 0)
            item.Selected = true;

         // Add the item to the image list
         imageList.Items.Add(item);
      }

      // Change the item size
      imageList.ItemSize = new Size(200, 200);

      // Change the item image size
      imageList.ItemImageSize = new Size(120, 120);

      // We are going to draw the items ourselves
      imageList.ViewStyle = RasterImageListViewStyle.OwnerDraw;

      // Add a handler to the DrawItem event
      imageList.DrawItem += new EventHandler<RasterImageListDrawItemEventArgs>(rasterImageList_DrawItem);

      // Add the RasterImageList to the control collection.
      Controls.Add(imageList);
   }

   private void rasterImageList_DrawItem(object sender, RasterImageListDrawItemEventArgs e)
   {
      RasterImageListItem item = e.Item;
      RasterImageList imageList = item.ImageList;
      Graphics g = e.Graphics;

      // get the item rectangle
      Rectangle rc = imageList.GetItemRectangle(item);

      // sanity check
      if(rc.IsEmpty)
         return;

      // we want to draw a 1 pixel black rectangle around the item
      // then we fill the inside of the rectangle with white if the item
      // is not selected or lightgray if it is

      g.DrawRectangle(Pens.Black, rc.Left, rc.Top, rc.Width - 1, rc.Height - 1);

      // we used up 1 pixel
      rc.Inflate(-1, -1);

      Brush b;
      if(item.Selected)
         b = Brushes.LightGray;
      else
         b = Brushes.White;
      g.FillRectangle(b, rc);

      // calculate the rectangles for image and text
      if(imageList.ShowItemText)
      {
         // text is visible
         // draw the text at the bottom of the item
         int textHeight = (int)(g.MeasureString("WWW", imageList.Font).Height + 4);
         Rectangle textRect = Rectangle.FromLTRB(
            rc.Left,
            rc.Bottom - textHeight,
            rc.Right,
            rc.Bottom);

         if(!textRect.IsEmpty)
         {
            StringFormat sf = new StringFormat();
            sf.Alignment = StringAlignment.Center;
            sf.LineAlignment = StringAlignment.Center;
            sf.Trimming = StringTrimming.EllipsisPath;
            sf.FormatFlags = StringFormatFlags.NoWrap;

            g.DrawString(
               item.Text,
               imageList.Font,
               Brushes.Black,
               textRect,
               sf);
            sf.Dispose();

            // we need to update the item rectangle for the space
            // we used up to draw the text
            rc.Height -= textRect.Height;
         }
      }

      // rc is the image rectangle
      if(!rc.IsEmpty)
      {
         // now rc holds the rectangle to draw the image into

         // first, set the correct page
         int savePage = -1;
         if(item.Image.Page != item.Page)
         {
            // the page is different

            // save current image page so we can set it back when we are done
            savePage = item.Image.Page;

            // disable the image events, we are going to set the page back,
            // so we do not want anybody subscribing to this image Changed
            // event to know we changed it.
            item.Image.DisableEvents();

            // set new page
            item.Image.Page = item.Page;
         }

         try
         {
            // we want to center the image into whatever left of rc
            Size itemImageSize = imageList.ItemImageSize;
            Rectangle imageRect = new Rectangle(
               rc.Left + (rc.Width - itemImageSize.Width) / 2,
               rc.Top + (rc.Height - itemImageSize.Height) / 2,
               itemImageSize.Width,
               itemImageSize.Height);

            // we want to keep the aspect ratio
            imageRect = RasterImageList.GetFixedAspectRatioImageRectangle(
               item.Image.ImageWidth,
               item.Image.ImageHeight,
               imageRect);

            // draw the image
            LeadRect lRect = new LeadRect(imageRect.Left, imageRect.Top, imageRect.Width, imageRect.Height);
            RasterImagePainter.Paint(item.Image, e.Graphics, lRect, imageList.PaintProperties);

            // finally, draw a black rectangle around the image
            imageRect.Inflate(1, 1);
            g.DrawRectangle(
               Pens.Black,
               imageRect.Left,
               imageRect.Top,
               imageRect.Width - 1,
               imageRect.Height - 1);
         }
         finally
         {
            // reset the old page
            if(savePage != -1)
            {
               item.Image.Page = savePage;

               // re-enable the events
               item.Image.EnableEvents();
            }
         }
      }
   }
}

public void RasterImageList_DrawItem(string title)
{
   MyForm3 form = new MyForm3(title);
   form.ShowDialog();
}

static class LEAD_VARS
{
public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
Requirements

Target Platforms

See Also

Reference

RasterImageList Class
RasterImageList Members

 

 


Products | Support | Contact Us | Copyright Notices
© 2006-2014 All Rights Reserved. LEAD Technologies, Inc.