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
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
und eine Routen Planung machen.
... aber wir wollen ja die Daten aus der DBF als Waypoints automatisch setzten lassen.
Fortsetzung in Teil 3