LEADTOOLS Annotations (Leadtools.Annotations assembly)

AnnRunDesigner Class

Show in webframe
Example 





Members 
This class extends AnnDesigner to provide standard functionality for running Annotation objects on an annotation container.
Object Model
Syntax
[SerializableAttribute()]
public class AnnRunDesigner : AnnDesigner 
'Declaration
 
<SerializableAttribute()>
Public Class AnnRunDesigner 
   Inherits AnnDesigner
'Usage
 
Dim instance As AnnRunDesigner

            

            
[SerializableAttribute()]
public ref class AnnRunDesigner : public AnnDesigner 
Remarks
Other specific annotation object classes such as AnnButtonRunDesigner and AnnAudioRunDesigner derive from this base class.
Example
Copy Code  
Imports Leadtools
Imports Leadtools.Annotations
Imports Leadtools.Codecs
Imports Leadtools.WinForms

Private Class MyForm1 : Inherits Form
   Private myAnnContainer As AnnContainer
   Private viewer As RasterImageViewer
   Private codecs As RasterCodecs
   Private currentDesigner As AnnDesigner
   Public Sub New(ByVal title As String)
      Text = title
      Size = New Size(500, 200)

      viewer = New RasterImageViewer()
      AddHandler viewer.TransformChanged, AddressOf viewer_TransformChanged
      AddHandler viewer.PostImagePaint, AddressOf viewer_PostImagePaint
      AddHandler viewer.MouseDown, AddressOf viewer_MouseDown
      AddHandler viewer.MouseMove, AddressOf viewer_MouseMove
      AddHandler viewer.MouseUp, AddressOf viewer_MouseUp
      AddHandler viewer.LostFocus, AddressOf viewer_LostFocus

      ' load an image into the viewer
      codecs = New RasterCodecs()
      viewer.Image = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "image1.cmp")) ' fix this path to an existing image file on your system

      ' create and set up the container
      myAnnContainer = New AnnContainer()
      myAnnContainer.Bounds = New AnnRectangle(0, 0, viewer.ImageSize.Width, viewer.ImageSize.Height)
      myAnnContainer.UnitConverter = New AnnUnitConverter(viewer.ImageDpiX, viewer.ImageDpiY)

      ' Add the viewer
      viewer.Dock = DockStyle.Fill
      Controls.Add(viewer)
      viewer.BringToFront()

      ' add a few objects to the container
      Dim rectObj As AnnRectangleObject = New AnnRectangleObject()
      rectObj.Bounds = New AnnRectangle(100, 100, 200, 200, AnnUnit.Pixel)
      rectObj.Pen = New AnnPen(Color.Blue, New AnnLength(2, AnnUnit.Pixel))
      rectObj.Brush = New AnnSolidBrush(Color.Yellow)
      myAnnContainer.Objects.Add(rectObj)

      Dim buttonObj As AnnButtonObject = New AnnButtonObject()
      buttonObj.Bounds = New AnnRectangle(100, 320, 200, 24, AnnUnit.Pixel)
      buttonObj.Text = "Goto Leadtools website"
      buttonObj.TextColor = Color.Black
      buttonObj.Font = New AnnFont("Arial", New AnnLength(8, AnnUnit.Point), FontStyle.Regular)
      buttonObj.Hyperlink = "http://www.leadtools.com"
      myAnnContainer.Objects.Add(buttonObj)
   End Sub

   Private Sub viewer_TransformChanged(ByVal sender As Object, ByVal e As EventArgs)
      ' set up the container transformation
      If Not viewer.Image Is Nothing AndAlso Not myAnnContainer Is Nothing Then
         myAnnContainer.Transform = viewer.Transform.Clone()
      End If
   End Sub

   Private Sub viewer_PostImagePaint(ByVal sender As Object, ByVal e As PaintEventArgs)
      ' draw the container and its objects on this viewer
      If Not viewer.Image Is Nothing AndAlso Not myAnnContainer Is Nothing Then
         myAnnContainer.Draw(e.Graphics)
      End If
   End Sub

   Private Sub viewer_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)
      Dim handled As Boolean = False

      ' see if a designer is currently running, if so, let it handle this event
      If Not currentDesigner Is Nothing Then
         handled = currentDesigner.MouseDown(e)
      End If

      If (Not handled) Then
         ' the mouse click was not handled by a designer
         ' check if the click was on top of an existing object that we can start running
         Dim pt As AnnPoint = New AnnPoint(e.X, e.Y)
         Dim obj As AnnObject = myAnnContainer.HitTest(pt, 2)
         If Not obj Is Nothing Then
            ' yes, start the run designer for this object
            If TypeOf obj Is AnnButtonObject Then
               Dim buttonRunDesigner As AnnButtonRunDesigner = New AnnButtonRunDesigner()
               StartRunning(buttonRunDesigner, obj, e)
            Else
               Dim runDesigner As AnnRunDesigner = New AnnRunDesigner()
               StartRunning(runDesigner, obj, e)
            End If
         End If
      End If
   End Sub

   Private Sub StartRunning(ByVal runDesigner As AnnRunDesigner, ByVal obj As AnnObject, ByVal e As MouseEventArgs)
      ' set up the current designer
      AddHandler runDesigner.Run, AddressOf OnDesignerRun
      runDesigner.Owner = viewer
      runDesigner.Container = myAnnContainer
      runDesigner.ClipCursor = True
      runDesigner.Object = obj
      runDesigner.HitTestBuffer = 2
      runDesigner.Start()
      currentDesigner = runDesigner
      currentDesigner.MouseDown(e)
   End Sub

   Private Sub OnDesignerRun(ByVal sender As Object, ByVal e As AnnRunDesignerEventArgs)
      ' show information on the current edit operation
      Console.WriteLine("Object: {0}, Status: {1}, ", e.Object.GetType().Name, e.OperationStatus)

      If e.OperationStatus = AnnDesignerOperationStatus.End Then
         ' check if the object does not have a hyperlink, if so, show a message box
         If e.Object.Hyperlink Is Nothing OrElse e.Object.Hyperlink = String.Empty Then
            MessageBox.Show(String.Format("You clicked an object of type {0} that does not have a hyperlink", e.Object.GetType().Name))
         End If
      End If
   End Sub

   Private Sub viewer_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)
      Dim handled As Boolean = False

      ' see if a designer is currently running, if so, let it handle this event
      If Not currentDesigner Is Nothing Then
         handled = currentDesigner.MouseMove(e)
      End If
   End Sub

   Private Sub viewer_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs)
      Dim handled As Boolean = False

      ' see if a designer is currently running, if so, let it handle this event
      If Not currentDesigner Is Nothing Then
         handled = currentDesigner.MouseUp(e)
      End If
   End Sub

   Private Sub viewer_LostFocus(ByVal sender As Object, ByVal e As EventArgs)
      ' see if a designer is currently running, if so, cancel it
      If Not currentDesigner Is Nothing Then
         currentDesigner.Cancel()
      End If
   End Sub
End Class

Public Sub AnnRunDesigner_AnnRunDesigner(ByVal title As String)
   Dim form As MyForm1 = New MyForm1(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;
using Leadtools.Annotations;
using Leadtools.Codecs;
using Leadtools.WinForms;

class MyForm1 : Form
{
   AnnContainer container;
   RasterImageViewer viewer;
   RasterCodecs codecs;
   AnnDesigner currentDesigner;
   public MyForm1(string title)
   {
      Text = title;
      Size = new Size(500, 200);

      viewer = new RasterImageViewer();
      viewer.TransformChanged += new EventHandler(viewer_TransformChanged);
      viewer.PostImagePaint += new PaintEventHandler(viewer_PostImagePaint);
      viewer.MouseDown += new MouseEventHandler(viewer_MouseDown);
      viewer.MouseMove += new MouseEventHandler(viewer_MouseMove);
      viewer.MouseUp += new MouseEventHandler(viewer_MouseUp);
      viewer.LostFocus += new EventHandler(viewer_LostFocus);

      // load an image into the viewer
      codecs = new RasterCodecs();
      string fileName = Path.Combine(LEAD_VARS.ImagesDir, "image1.cmp");
      viewer.Image = codecs.Load(fileName);

      // create and set up the container
      container = new AnnContainer();
      container.Bounds = new AnnRectangle(0, 0, viewer.ImageSize.Width, viewer.ImageSize.Height);
      container.UnitConverter = new AnnUnitConverter(viewer.ImageDpiX, viewer.ImageDpiY);

      // Add the viewer
      viewer.Dock = DockStyle.Fill;
      Controls.Add(viewer);
      viewer.BringToFront();

      // add a few objects to the container
      AnnRectangleObject rectObj = new AnnRectangleObject();
      rectObj.Bounds = new AnnRectangle(100, 100, 200, 200, AnnUnit.Pixel);
      rectObj.Pen = new AnnPen(Color.Blue, new AnnLength(2, AnnUnit.Pixel));
      rectObj.Brush = new AnnSolidBrush(Color.Yellow);
      container.Objects.Add(rectObj);

      AnnButtonObject buttonObj = new AnnButtonObject();
      buttonObj.Bounds = new AnnRectangle(100, 320, 200, 24, AnnUnit.Pixel);
      buttonObj.Text = "Goto Leadtools website";
      buttonObj.TextColor = Color.Black;
      buttonObj.Font = new AnnFont("Arial", new AnnLength(8, AnnUnit.Point), FontStyle.Regular);
      buttonObj.Hyperlink = @"http://www.leadtools.com";
      container.Objects.Add(buttonObj);
   }

   private void viewer_TransformChanged(object sender, EventArgs e)
   {
      // set up the container transformation
      if(viewer.Image != null && container != null)
         container.Transform = viewer.Transform.Clone();
   }

   private void viewer_PostImagePaint(object sender, PaintEventArgs e)
   {
      // draw the container and its objects on this viewer
      if(viewer.Image != null && container != null)
         container.Draw(e.Graphics);
   }

   private void viewer_MouseDown(object sender, MouseEventArgs e)
   {
      bool handled = false;

      // see if a designer is currently running, if so, let it handle this event
      if(currentDesigner != null)
         handled = currentDesigner.MouseDown(e);

      if(!handled)
      {
         // the mouse click was not handled by a designer
         // check if the click was on top of an existing object that we can start running
         AnnPoint pt = new AnnPoint(e.X, e.Y);
         AnnObject obj = container.HitTest(pt, 2);
         if(obj != null)
         {
            // yes, start the run designer for this object
            if(obj is AnnButtonObject)
            {
               AnnButtonRunDesigner buttonRunDesigner = new AnnButtonRunDesigner();
               StartRunning(buttonRunDesigner, obj, e);
            }
            else
            {
               AnnRunDesigner runDesigner = new AnnRunDesigner();
               StartRunning(runDesigner, obj, e);
            }
         }
      }
   }

   private void StartRunning(AnnRunDesigner runDesigner, AnnObject obj, MouseEventArgs e)
   {
      // set up the current designer
      runDesigner.Run += new EventHandler<AnnRunDesignerEventArgs>(OnDesignerRun);
      runDesigner.Owner = viewer;
      runDesigner.Container = container;
      runDesigner.ClipCursor = true;
      runDesigner.Object = obj;
      runDesigner.HitTestBuffer = 2;
      runDesigner.Start();
      currentDesigner = runDesigner;
      currentDesigner.MouseDown(e);
   }

   private void OnDesignerRun(object sender, AnnRunDesignerEventArgs e)
   {
      // show information on the current edit operation
      Console.WriteLine("Object: {0}, Status: {1}, ", e.Object.GetType().Name, e.OperationStatus);

      if(e.OperationStatus == AnnDesignerOperationStatus.End)
      {
         // check if the object does not have a hyperlink, if so, show a message box
         if(e.Object.Hyperlink == null || e.Object.Hyperlink == string.Empty)
            MessageBox.Show(String.Format("You clicked an object of type {0} that does not have a hyperlink", e.Object.GetType().Name));
      }
   }

   private void viewer_MouseMove(object sender, MouseEventArgs e)
   {
      bool handled = false;

      // see if a designer is currently running, if so, let it handle this event
      if(currentDesigner != null)
         handled = currentDesigner.MouseMove(e);
   }

   private void viewer_MouseUp(object sender, MouseEventArgs e)
   {
      bool handled = false;

      // see if a designer is currently running, if so, let it handle this event
      if(currentDesigner != null)
         handled = currentDesigner.MouseUp(e);
   }

   private void viewer_LostFocus(object sender, EventArgs e)
   {
      // see if a designer is currently running, if so, cancel it
      if(currentDesigner != null)
         currentDesigner.Cancel();
   }
}

public void AnnRunDesigner_AnnRunDesigner(string title)
{
   MyForm1 form = new MyForm1(title);
   form.ShowDialog();
}

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

Target Platforms

See Also

Reference

AnnRunDesigner Members
Leadtools.Annotations Namespace

 

 


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