MapBasic &.NET interaktion MapBasic.NET Jakob Lanstorp IT konsulent COWI Odense 23. Juni 2011 1
MapBasic &.NET interaktion Erfaring med MapBasic.NET / Visual Studio Anden programmering 2
Program Hurtig gennemgang MapBasic god arkitektur praksis.net framework Visual Studio Opgaver Integration mellem MapInfo, MapBasic og.net 3
Opgaver 01: Fra MapBasic kald matematiske funktioner i en.net DLL 02: Fra MapBasic kald og vis en standard.net MessageBox 03: Læs og skriv til inifiler med.net fra MapBasic 04: Via en.net dialog styres Zoom og Pan i kortvinduet i MapInfo 05: Overfør Typer mellem MapBasic og.net 06: Revers geokoding. Fra MapBasic brug en REST web service via.net 07: Lav en customer dialog i.net 08: OLE kommunikation til dialog docking i MapInfo 4
Arbejdsgang Jeg gennemgår koden et punkt af gangen for alle opgaver. Her efter får I mulighed for, via de udleverede løsninger, at lave ændringer eller udvidelser til koden. 5
MapBasic - God arkitektur praksis Man kan simulere OOP i MapBasic for bedre, at kunne styre små og især store projekter Brug typer til at indpakke variabler der "hører" sammen Type T_POINT x As Float y As Float End Type Navngiv filer sigende MainMitProgram TabFunc Navngiv sub rutiner (Sub og Function) med filenavn som prefix Deklarer kun "public" metoder i def filer Nedbryd programlogik i flere MB filer der linkes til en MBX 6
Visual Studio Integrated Development Environment (IDE) til.net Understøtter flere sprog, f.eks. C, VB.NET, J m.fl. Understøtter udvikling til både desktop, web og PDA 7
Opret projekter og filer i Visual Studio Projekttyper I forbindelse med MapBasic udvikling anvendes ClassLib Alle CLR sprog kan anvendes C er det mest udbredte CLR sprog Filer og referencer tilføjes ved at højreklikke i Solution Explorer Klasser Formular (Dialogboks) Referencer En formular består af flere filer Formulardesigneren Ny kontroller kan vælges i værktøjskassen Egenskaber for hver kontrol kan ændres Hændelser kan eksekvere kode ved brugerinput 8
Koderedigering i Visual Studio Kodevinduet vises ved at dobbeltklikke på en klasse eller højreklikke på en formular og vælge View code. Intellisence hjælper med syntax mens der skrives kode En typisk kodefil består af disse sektioner Namespace referencer Namespace definition Klasse definition Felter Konstruktører Properties Metoder region kan bruges til at gruppere koden 9
Assemblies og namespaces Hvert projekt i Visual Studio kompileres til én Assembly. En assembly er en.exe eller.dll fil. En assembly indeholder MSIL kode ikke kildekode. Namespaces er en logisk gruppering af funktionalitet. En assembly kan indeholde flere namespaces. Et namespace kan være spredt over flere assemblies. En assembly kan placers lokalt sammen med applikationen eller registreres i Global Assembly Cache (GAC). 10
C Syntax Variabler deklareres med syntaxen: Type variabelnavn = new Type(args); DataTable mydatatable = new DataTable(); Navngivningskonvention i C: Typer (klasser) starter med stort. Variabler starter med småt. Der kan loopes gennem alle elementer i en liste med foreach kontruktionen: foreach(string mystring in mystringlist) MessageBox.Show(myString); Der findes generiske (typestærke) samlinger i namespacet System.Collections.Generic. F.eks. kan en liste af strenge oprettes sådan: List<String> mystringlist = new List<String>(); En simpel dialogboks kan vises med MessageBox.Show(message); En subroutine defineres som en funktion med returtype void 11
Eksempel Opret nyt VS projekt Vælg typen Class Library Navngiv projektet, her MapInfoDialog 12
Tilføj en statisk metode Her er metoden ShowDialog tilføjet 13
Kompiler.NET assembly Kompiler projektet via Build > Build MapInfoDialog Eller tryk på Shift + F6 Læg mærke til om der er kompileringsfejl 14
Gør assembly tilgængelig for MapInfo Pro Kopier assembléen til mappen hvor det kompilerede MapBasicprogrammet placeres: MapInfoDialog.dll: assembly MapInfoDialog.pdb: Debug information 15
Byg dit MapBasic-program Declare Method Class: inkl. Namesspaces Lib: uden sti men med.dll Declare Sub Main Call ShowDialog(, ) 16
Kompiler og kør dit MapBasic-program Kompilér Kontrol for evt. kompileringsfejl Kør programmet i MapInfo Professional 17
Opgave 01 Fra MapBasic kald matematiske funktioner i en.net DLL Print Chr$(12) Print "PI() = " + PI() Print "Pow(2,3) = " + Pow(2,3) Print "GetGuid() = " + GetGuid() 18
Opgave 02 Fra MapBasic kald og vis en standard.net MessageBox Call ShowDialog("Tekst til overskrift", "Denne besked er sendt til en.net dialog") 19
Opgave 03 Læs og skriv til inifiler med.net fra MapBasic [ADMIN] USERNAME=Anders And Call WriteKey(FILE_CONFIG, ssection, skey, svalue) svalueread = ReadKey(FILE_CONFIG, ssection, skey) Call DeleteKey(FILE_CONFIG, ssection, skey) 20
Opgave 04 Via en.net dialog styres Zoom og Pan i kortvinduet i MapInfo 21
Opgave 05 Overfør typer mellem MapBasic og.net Type MyType str As String d As Float i As Integer End Type 22
Opgave 06 Revers geokoding. Fra MapBasic brug en REST web service via.net Et klik i kortet skal kunne returnere den nærmeste adresse 23
Opgave 07 Brug to standard.net dialoger fra MapBasic OpenFileDlg FolderBrowserDlg Lav en custom dialog i.net og vis den i MapInfo 24
Opgave 08 OLE kommunikation Indlejre dialog i MapInfo docking system Sample: c:\program Files\MapInfo\MapBasic105\Samples\DOTNET\NAMEDVIEWS\ 25