Brukerdefinerte registreringsknapper og objektdialog Paul Hinsch MICADO AS Utviklet MapBasic applikasjoner i 10 år Paul Hinsch MICADO AS 2011
Brukere klarer ikke alltid selv å styre hvilket kartlag data blir registrert i Unngå editable avkryssing i layercontroll og benytt i stedet egne registreringsknapper MICADO->Define user buttons Definer opp til 15 knapper (Button no) Gi knappen en hjelpetekst (Name) Bind knappen til en tabell (Table) Velg geometri type (Geometry type) Velg er egnet ikon (Icon no) En tabell kan ha flere knapper, for eksempel Point, Line og Layer on/off
Du kan få programmet til å opprette tabellen første gang knappen benyttes. Det opprettes en tabell i valgte katalog med samme koordinatsystem som første tabell i layercontrollen. Tabellen får feltene Tekst og Type (endres enkelt i koden) Legg til (eller redigere) felt med Table->Maintenance->Table Structure Registrer et nytt objekt og trykk OK Bruk deretter Object Editor knappen (klikk på objektet) og trykk på knappen. Benytt passord 123 og konfigurer feltene.
Oppsett av Object Dialog Hvert felt kan settes enten som Redigerbart (Read/Write) Synlig men ikke redigerbart (Read Only) Ikke synlig (Hide) Videre kan man velge om feltet skal være Fritekst (Free Text) Faste verdier (Enumerator) Fra tabell med tegnstil (From table) Hente en nærliggende verdi i kartet (From Map)
Oppsett av Object Dialog, From Table Ett av feltene kan styre tegnstilen for objektet Velg From Table og opprett en ny Tegnstiltabell med New Table knappen. I dialogen Set user style kan du nå opprette de typene som brukeren skal kunne velge mellom med tilhørende tegnstil. Velg riktig geometri og trykk New, skriv inn et egnet navn og velg en tilhørende tegnstil. Gjenta dette for alle typer/tegnstiler du vil ha
Oppsett av Object Dialog, From Map Ett av feltene kan hente informasjon fra et nærliggende objekt i kartet Velg From Map og velg tabellen du vil hente data fra. Velg deretter det feltet du vil ha data fra.
Oppsett av Object Dialog, Enumerator Flere av feltene kan hente informasjon fra en Enumerator tabell Velg Enumerator og velg den aktuelle enumaratoren du vil bruke. For å legge til flere Enumerator verdier velg MICADO-> Edit enumerators Ny gruppe (New Enum.) Ny verdi (Add Value)
Redigere Tegnstiler Med menyvalget MICADO->Update styles kan du endre tegnstiler for de forskjellige tabellene. Velg aktuelle tabell som har en koblig til tegnstil, og trykk Edit Style Table Velg riktig geometri og trykk New, skriv inn et egnet navn og velg en tilhørende tegnstil. Gjenta dette for alle typer/tegnstiler du vil ha Trykk Delete hvis du vil slette valgte tegnstil Trykk på Style knappen for å endre valgte tegnstil Har du endret på en tegnstil som er brukt i kartet, velger du Update Hvis ikke kan du velge Exit (nye tegnstiler blir allikevel lagret)
Systemkatalog med hjelpefiler Informasjon om registreringsknapper og oppsett av objektdialoger, samt tegnstiltabeller lagres på filer i en \System\ katalog som opprettes som underkatalog til mappen mbx finnes på. CusButt.ini (tekst fil med info om knappeoppsett) ObjectDialog.TAB (Info om oppsett av objektdialog) Enumerators.TAB (Tabell med alle Enumerator vedier) Style_xxxx.TAB (Tegnstil tabell)
MapBasic kode Main.mb (.mbp) Lite hovedprogram MI_Main.mb (.def) Hovedprogram med menyer og std. knapper Custom_Dialog.mb (.def) Kode for tilpasning av dialoger CustomButtons.mb (.def) Kode for brukerdefinerte knapper Enumerator_Editor.mb (.def) Kode for enumrator editor MI_Style.mb (.def) Kode for tegnstiler MI_Obj_Dialog.mb (.def) Utility kode for objektdialog Obj_Dialog_Setup.mb (.def) Utility kode for objektdialog MI_Util.mb (.def) Generlt utility bibliotek Koden ligger til nedlasting på www.micado.no under nyheter, og vil også bli tilgjengelig på Den danske PBBI blog Om koden benyttes kommersielt skal www.micado.no komme med i en About boks
Main.mb Include "MI_Main.def" Include "MI_Util.def" Declare Sub Main Sub Main() Call Init Call Main_Util End Sub Main.mbp [Link] Application = MICADO.mbx Module = Main.mbo Module = MI_Main.mbo Module = MI_Util.mbo Module = MI_Style.mbo Module = MI_Obj_Dialog.mbo Module = Obj_Dialog_Setup.mbo Module = CustomButtons.mbo Module = Custom_Dialog.mbo Module = Enumerator_Editor.mbo Jeg minimerer alltid koden i Main.mb, siden feilmeldinger i kompilatoren ikke fungerer så godt på denne filen.
Main_Util.mb (forenklet kode) Include "CustomButtons.def" Sub Main_Util() Create Menu "MICADO" As "Define user buttons" Calling CustomButtons_Dialog, "Update styles" Calling UpdateStyles_Dialog, "Edit Enumerators" Calling Enumerator_Editor_Dialog, "About" Calling About, "E&xit" Calling ExitTools Alter Menu Bar Add "MICADO Create ButtonPad "MICADO" As ToolButton Calling ObjectDialog_Click ToolButton Calling EditGeometryClick ToggleButton Calling M_EDIT_RESHAPE '1601 ToolButton Calling M_TOOLS_ADD_NODE '1723 ToolbarPosition(1, 1) Fixed Show Call CreateCustomButtons End Sub 'Main_Util Sub ExitTools() Call CloseMicadoTables End Program End Sub Main_Util.mb vil i hovedsak kun opprette menyer og toolbars Utility biblioteker bør ikke ha referanser oppover (mot for eksempel Main_Util) for å være mest mulig anvendbare i andre prosjekter.
Custom_Dialog.mb (legg til egne funksjoner i Object Dialog) Function GetAppliactionButton( ) As String GetAppliactionButton = "" Do Case UCase$(strObjectName) Case "TEST" Case 1 GetAppliactionButton = "Test1" Case 2 GetAppliactionButton = "Test2" Case 3 GetAppliactionButton = "Test3" GetAppliactionButton = "Test4" Case "AREA" Case 3 GetAppliactionButton = "Calc Area" GetAppliactionButton = "Delete" Case IsCustomTable(strObjectName) GetAppliactionButton = "Delete" End Function Sub ApplicationButtonClick() Do Case UCase$(strObjectName) Case "TEST" Case 1 Note "Test" & ibuttonno Case 2 Note "Test" & ibuttonno Case 3 Note "Test" & ibuttonno Note "Test" & ibuttonno Case "AREA" Case 3 farea = Round(GetAreaFromSelected("sq m"), 2) Call SetDialogValueByName("Areal", Str$(Round(fArea, 2))) Call Delete(strObjectName, irowid) Case "AREA", IsCustomTable(strObjectName) Call Delete(strObjectName, irowid) End Sub
Custom_Dialog.mb (legg til egne funksjoner i Object Dialog) Function GetAppliactionButton( ) As String Case "AREA" Case 3 GetAppliactionButton = "Calc Area" GetAppliactionButton = "Delete" Sub ApplicationButtonClick() Case "AREA" Case 3 farea = Round(GetAreaFromSelected("sq m"), 2) Call SetDialogValueByName("Areal", Str$(Round(fArea, 2))) Call Delete(strObjectName, irowid)
Spørsmål eller kommentarer? (spør gjerne på dansk ) Koden ligger til nedlasting på www.micado.no under nyheter, og vil også bli tilgjengelig på Den danske PBBI blog Koden er MapBasic 6.5 kompatibel. Om koden benyttes kommersielt skal www.micado.no komme med i en About boks