IL Thomas,

Thanks very much for the information - it has enabled me to get everything working except that, while I can extract a value from a MapInfo table and display it with the MessageBox.Show function, I cant write to a textbox on my VB.NET form. The line that sets the textbox text value appears to do nothing - not even an error message (I have removed the Try..Catch code from the snippet below).

I have included some code snippets below in the hope that you can clear up this last thing for me.

David Hebblethwaite


The VB.NET application is called  IntMap

START OF CODE SNIPPET

Public Delegate Sub pMenu(ByVal sCmd As String)

Public Delegate Sub pTool(ByVal sCmd As String)



Public Class clsCallbackWrap

Declare Sub HandleMenuSelection Lib "..\LibPinvokelib.dll" (ByVal pM As pMenu, _

ByVal sCmd As String)

Declare Sub HandleToolButton Lib "..\LibPinvokelib.dll" (ByVal pT As pTool, _

ByVal sCmd As String)

End Class   'clsCallbackWrap









Imports MapInfo



Public Class frmMain



   Public Shared pM As pMenu

   Public Shared pT As pTool



   Public Shared ctlResult As TextBox



   Private Sub frmMain_Load(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles MyBase.Load

       Dim cCallback As New clsHandleMI



       pM = AddressOf cCallback.HandleMenuSelection

       pT = AddressOf cCallback.HandleToolButton



       gMI.SetCallback(cCallback)



       Dim sTable As String = "MITable"



       gMI.Do("Set Application Window " & Me.Handle.ToString)

gMI.Do("Set Next Document Parent " & Me.pbxMap.Handle.ToString & " Style 1")

       gMI.Do("Open Table """ & sTable & """ Interactive")

       gMI.Do("Map From """ & sTable & """")



       <code to create MapperShortcut menu>



 <code to create custom tool buttons>



       ctlResult = Me.txtResult



COMMENT > txtResult is a textbox on frmMain to view variable values extracted from the MapInfo Window. It is shared as the public object ctlResult



   End Sub



End Class   'frmMain













Imports MapInfo

Imports IntMap.frmMain



Public Class clsHandleMI



   Public Sub HandleMenuSelection(ByVal CommandInfoStr As String)

'This routine determines which menu item was selected, then performs the

       'appropriate action.



   <code for handling menu actions>



   End Sub





   Public Sub HandleToolButton(ByVal CommandInfoStr As String)

'This method is called when the custom tools are used in the map window.

       Dim iTool As Integer

       Dim x As Double

       Dim y As Double



       'Strip off the 'MI: part of the string

       If Mid$(CommandInfoStr, 1, 3) = "MI:" Then

           CommandInfoStr = Mid$(CommandInfoStr, 4)

           '* determine which tool was used

           iTool = CInt(GetItem(CommandInfoStr, ",", CMD_INFO_TOOLBTN))

           Select Case iTool

               Case 2001

                   'The point info tool

x = CDbl(GetItem(CommandInfoStr, ",", CMD_INFO_X)) 'Get x and y values

y = CDbl(GetItem(CommandInfoStr, ",", CMD_INFO_Y)) 'from CommandInfo



                   frmMain.ctlResult.Text = x



COMMENT > The line above fails to enter the value of x into the textbox on frmMain but the MessageBox.Show function will display it





           End Select

       End If



   End Sub





   Private Function GetItem(ByVal sStr As String, ByVal sDel As String, _

ByVal iItem As Integer) As String

       'sStr is string with items delimited by the sDel character

       'Returns the Item found at Position iItem in the String sStr

   End Function



End Class    'clsHandleMI



END OF CODE SNIPPET








----- Original Message ----- From: "SCISOFT" <[EMAIL PROTECTED]> To: "'David Hebblethwaite'" <[EMAIL PROTECTED]>; <[email protected]>
Sent: Tuesday, May 30, 2006 11:55 PM
Subject: RE: [MI-L] Callbacks with VB.NET2005


David



This time, it's not MapInfo you should be blaming; it is the syntax in .NET interop that you need to get on top of. If you have the MSDN Library, have a
look at Pinvoke and COM, and search for Callbacks.



There is a very simple example called "Callback Sample" (one place where you
can see it is on MSDN2 website,
http://msdn2.microsoft.com/en-us/library/5zwkzwf4.aspx) which explains what
you need to do.



Fortunately for VB6 people, the Declare syntax can be used (the alternative
[ DllImport(PathToSomeDLL)] is mandatory for C#, optional for VB.NET). I
will paste in the code and article here, for benefit of others who might be
tempted to try the .NET way "sometime soon".



Otherwise, it is much the same as you are used to in VB6.



IL Thomas
GeoSciSoft  - Perth, Australia

 _____

> From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of David
Hebblethwaite
Sent: Tuesday, May 30, 2006 2:17 PM
To: [email protected]
Subject: [MI-L] Callbacks with VB.NET2005



I am trying to get an integrated mapping application working with Mapinfo
7.8 and VB.NET2005. I have created similar applications before with VB6 and
MapInfo but I have been unable to get the callback function working with
vb.NET. I have created a standard Windows project and a class containing the
methods by which MapInfo notifies the calling program. In the main form I
create a public instance of the class and call MapInfo's SetCallBack method
with the instance as the argument. Although I can quite happily control
MapInfo from the VB.NET program I get no response at all from actions in the
MapInfo window. I have tried to implement some of the ideas that have
appeared in MI-L but with no success.  I know I am not the only one with
this problem. Does anyone know of any rules/steps that will lead to a
successful implementation of the callback function? I find it hard to
believe that MapInfo would provide this method without some clear-cut way of
implementing it. Any advice would be appreciated.



David Hebblethwaite





_______________________________________________
MapInfo-L mailing list
[email protected]
http://www.directionsmag.com/mailman/listinfo/mapinfo-l

Reply via email to