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";
}