2nd Step

Rund um MS-MapPoint

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11468
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

2nd Step

Beitrag von AUGE_OHR » So, 28. Sep 2008 6:00

hi,

nachdem wir die Form (Dialog) für das activeX haben müssen wir nun die Methiden dazu schreiben.

Nun haben wir ja gewöhnlich nicht nur die Anzeige sondern unsere DBF für die wir eine extra "Detail"
Form haben. Wir nehmen also wieder den XppFD.EXE und plazieren in der Form unsere Felder und
XbpButton´s zum auslösen von Aktionen.
Leider nennt der FormDesigner die Form immer NEWFORM bzw. _NEWFORM. Ich habe die für das
Beispiel in MapDetail umbenannt.

Code: Alles auswählen

CLASS XbMap FROM MapDetail
   EXPORTED:
      METHOD init
      METHOD create 
      METHOD MapInit()
      METHOD MapExit()
      VAR oDlgMap                                // Dialog of MAP
      VAR oMap                                   // "the" MAP
      VAR nVersion                               // avtiveX Version
ENDCLASS

METHOD XbMap:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
   * Methode der Superklasse rufen
   ::MapDetail:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
RETURN self

METHOD XbMap:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
* Methode der Superklasse rufen
   ::MapDetail:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
* Datenbanken öffnen und Workareas auswählen
    USE myDBF
* Werte in Editcontrols übertragen
   AEval ( ::EditControls, { | oXbp | oXbp:SetData() } )
* Formular anzeigen
   ::show()
* init activeX
   ::MapInit()
RETURN self

******************************************************************************
* Main Prozedur zum Testen des Formulars
******************************************************************************
PROCEDURE Main
LOCAL nEvent, oXbp, mp1, mp2
LOCAL oApp

   oApp := XbMap():New()
   oApp:close := {|| PostAppEvent( xbeP_Close ) }
   oApp:Create()

   nEvent := xbe_None
   WHILE nEvent != xbeP_Close
      nEvent := AppEvent ( @mp1, @mp2, @oXbp )
      oXbp:HandleEvent ( nEvent, mp1, mp2 )
      IF nEvent == xbeP_Quit
         QUIT   // AppQuit()
      ENDIF
   ENDDO

   oApp:oMap:SaveMapAs("MAP_A7")
   oApp:MapExit()
   oApp:destroy()
RETURN
In Grunde also nichts besonderes, nur zum Schluss kommt was mit :SaveMapAs() was lediglich
unsere Resultat sichern soll.

Jetzt zu der Init / Exit Methoden :

Code: Alles auswählen

METHOD XbMap:MapInit()
LOCAL i,iMax
LOCAL aSize := AppDeskTop():CurrentSize()
LOCAL aRand := {100,30}
   //
   // Class mit Dialog createn
   //
   ::oDlgMap := MapBig():New(AppDeskTop(),,aRand,{aSize[1]-aRand[1],aSize[2]-aRand[2]})
   ::oDlgMap:close := {|| ::oDlgMap:hide(), ::oDetail:show() }
   ::oDlgMap:Create()
   //
   // ActiveX initialisieren
   //
   ::oMap := ::oDlgMap:oAXControl
   //
   // different Version Number
   //
   ::nVersion := ::oMap:Version()
   //
   // Border of ActiveX
   //
   ::oMap:BorderStyle := 1 // has border
   ::oMap:Appearance  := 1 // border is 3D
   //
   // setzte auf EUR Version
   //
   ::oMap:NewMap( geoMapEurope )
   //
   // mesure in KM
   //
   ::oMap:Units := geoKm
   //
   // Toolbar for RoutePlanner
   //
   ::oMap:PaneState := geoPaneRoutePlanner
   //
   // here i try to enable item like "saveas" ...
   //
   iMax := ::oMap:Toolbars:Count()
   IF iMax > 0
      FOR i := 1 TO iMax
         ::oMap:Toolbars:Item(i):Visible := .T.
      NEXT
   ENDIF
   //
   // show MAP
   //
   ::oMap:show()
RETURN self

METHOD XbMap:MapExit()
   ::oMap:ActiveMap:Saved := .T.
   ::oMap:Quit()
   ::oMap:destroy()
   ::oMap := NIL
   ::oDlgMap:destroy()
RETURN self
damit haben wir nun die Grund Methoden und können manuell, wie beim Original, Daten eingeben
und eine Routen Planung machen.

... aber wir wollen ja die Daten aus der DBF als Waypoints automatisch setzten lassen.
Fortsetzung in Teil 3
gruss by OHR
Jimmy

Antworten