Peter H. Møller presented ways to modify the MapInfo Professional user interface using MapBasic and .NET languages. MapBasic is a scripting language that allows automation of MapInfo tasks and modification of elements like menus and toolbars. The document discussed modifying the menu file to rearrange menus and add shortcut keys, building custom dialogs to collect user input, and using .NET languages like C# to create advanced windows and interfaces beyond modal dialogs. It provided examples and code snippets to demonstrate how to declare methods, build dialog controls, and call .NET assemblies from within MapBasic applications.
2. Using MapBasic to modify your user interface
Peter Horsbøll Møller
Pitney Bowes Software
2
3. What is MapBasic?
• MapBasic is a scripting language that makes it easy to
automate MapInfo Professional
• MapBasic is also a freely available compiler (and editor)
to compile MapBasic source code into MapBasic
applications (MBX)
• MapBasic is also the text that you see when you open a
workspace in a text editor
• MapBasic is all over within MapInfo Professional!
3
4. What is C#?
• C# is a Windows programming language developed by
Microsoft.
• C# does require a .NET Framework to be able to run
• Since MapInfo Professional v9.5 you can call/access
methods within C# (and other .NET language)
assemblies
4
5. What is the user interface?
• The user interface is what you use to make MapInfo
Professional do what you want it to do
• The user interface is
–
–
–
–
the toolbars and the buttons
the menus and the menu items
the Layer Control and the Table List windows
the different dialogs that pops up within MapInfo Professional
5
6. Using MapBasic to modify your user interface
Rearranging and creating shortcut keys
1
Modifying the MapInfo menu file
2
Adding shortcut keys using a MapBasic application
3
Building your own dialogs
4
Using .NET languages to build good looking user interfaces
6
7. What is the MapInfo menu file?
• The menu file - mapinfow.mnu is used by MapInfo Professional
to build the menus and toolbars
• It contains a number of
MapBasic statements for doing
this
• The menu file is plain ascii and
can be edited in a text editor,
like NotePad
7
8. Create Menu statements
Let’s look at the content
• Defining a new menu
• Defining a new menu item
• Ending a menu defintion (no
comma)
• Defining a sub menu in a menu
• Defining a separator
8
9. Create ButtonPad statements
Let’s look at the content
• Defining a new buttonpad/toolbar
• Defining a new button (push)
• Defining a new button (toggle)
• Defining a new button (tool)
• Setting initial state and width
• Defining a separator
9
10. Some notes
• Make a copy of your mapinfow.mnu before you start
modifying it!
• You mapinfow.mnu is normally found in the directory
where you installed MapInfo Professional. I can however
be read from other places. Use this statement in the
MapBasic window to locate the correct file, see path in
the message window afterwards:
– Print LocateFile$(7)
• Do remember the menu file i version specific, so you will
need to modify the file for each new version of MapInfo
Professional
10
13. Using MapBasic to modify your user interface
Static shortcut keys in an application
1
Modifying the MapInfo menu file
2
Adding shortcut keys using a MapBasic application
3
Building your own dialogs
4
Using .NET languages to build good looking user interfaces
13
14. What is a shortcut key?
• A shortcut key makes it
possible to access a feature
thru a key combination on
your keyboard
• Only menu items can have
shortcut keys – buttons can
not ...
• ... but you can create menu
items that ”call” the same
handler as the button
14
15. How do you define a shortcut key?
• Create Menu statement:
Create Menu newmenuname [ ID menu_id ] As
menuitem [ ID menu_item_id ] [ HelpMsg help ] {
Calling handler | As menuname } [ , menuitem
... ]
• You specify the shortcut key as part of the menu item
title:
15
16. Examples
• ”/W^N” is the shortcut for Ctrl + N
• ”tCtrl+N” adds the text ”Ctrl+N” at
the right side of the menu
• That is not necessay after v10 –
just create the shortcut and the
matching text will appear by default
16
17. Special keys
• It’s easy to assign ”normal” keys like a, b and z to menu items
using their character.
• But you can also use special key like F1, F2 and Home by
referring to their number
• Here is list of virtual key codes:
http://www.kbdedit.com/manual/low_level_vk_list.html
• For example Home has the numeric value 0x24 (hex). You
need to convert this to a decimal number. Use for instance:
http://www.statman.info/conversions/hexadecimal.html
• Now you can assign the value to a menu item like this:
“Zoom entire layer.../W#%36"
HelpMsg "Display an individual or all map layer(s)."
calling 807
17
20. Using MapBasic to modify your user interface
Custom made dialogs to make things easier
1
Modifying the MapInfo menu file
2
Adding shortcut keys using a MapBasic application
3
Building your own dialogs
4
Using .NET languages to build good looking user interfaces
20
21. Custom dialogs
• With MapBasic you can build applications containing
custom dialogs designed for your specific need
• These dialogs can be designed to access data, analyse
data, update attribute information and a number of other
use cases
• MapBasic dialogs are modal (like the old Layer Control
prior to MapInfo Pro 10.0). They can’t be floating (like the
new Layer Control added in MapInfo Pro 10.0)
21
25. Handlers
• A handler is a subprocedure, called from the dialog
• A handler on the dialog itself is called when the dialog is
created and is being loaded
• You can use it to insert default values
• A handler on a control is called when the user ”uses” the
control
• It can be used to react to the actions/choices of the user,
like updating other control
25
26. Handler on the dialog
•
Creates a list of map windows
• Refreshes the control with the
•
list of windows
Activates the handler for this
control
26
27. Handler on a control
• Reads which windows is
selected in the control
• Creates a list of layers
• Refreshes the control with the
list of layers
27
29. Using MapBasic to modify your user interface
Fancy looking windows, not dialogs
1
Modifying the MapInfo menu file
2
Adding shortcut keys using a MapBasic application
3
Building your own dialogs
4
Using .NET languages to build good looking user interfaces
29
30. Using .NET
• From MapInfo Professional 9.5 you have been able to
call .NET methods from your MapBasic applications
• This has given a wide range of new possibilities when
building applications to run inside MapInfo Professional
30
31. How is this done?
• Create a class with one or more static method
• Compile it into an assembly (.dll)
• Make the assembly
accessible for your
MapBasic app (copy it
to the same folder as
the app)
• Run your app
• Use the Declare Method statement to declare your
.NET method to MapBasic
• Call/use the method in your MapBasic app
• Compile (and link) your application
31
32. Create a new project in Visual Studio
• Choose the type ”Class Library”
• Name your project, here ”MapInfoDialog”
33. Add a static method
• Here we have added the method ShowDialog
34. Compile your .NET assembly
• Compiler your project thru Build > Build MapInfoDialog
– Or hit Shift + F6
• Note if there were any compile errors
35. Make the assembly accessible
• Copy the assembly to the folder where your compiled
MapBasic application will be located:
– MapInfoDialog.dll: The assembly
– MapInfoDialog.pdb: Debug information
36. Build your MapBasic application
• Declare Method
– Class: including Namesspaces
– Lib: without path but with ”.dll”
• Declare Sub Main
• Call ShowDialog(”some title”, ”some text to show in dialog”)
37. Compile and run your MapBasic application
• Compile
– Check for errors
• Run the application in MapInfo Pro
39. Getting started with MapBasic?
Use the MapBasic
window
Look at your
workspaces
Open the MapBasic window.
Look at the statements MapInfo Pro write here when you do certain tasks
Try to open a workspace in a text editor
Look at the statements here
Find tools with
source code
Have a look at the tools site, like MapInfoTools.com. Some tools do come with
source code.
Have a look at these and try to modify them to fit your needs
Sign up for
MapInfo-L
Signup for MapInfo-L on Google Groups: groups.google.com/group/mapinfo-l
Follow and learn from the conversation here and start asking questions
39