Consultor Eletrônico



Kbase 22100: How To Integrate Progress and Microsoft MapPoint Via ActiveX
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   7/16/2002
SUMMARY:

This Knowledge Base Solution applies to Progress Versions 8.x and 9.x.
It shows you how to integrate Progress and Microsoft MapPoint through
ActiveX programming techniques.

SOLUTION:

The code found below deals with the Microsoft MapPoint COM Object (ActiveX Automation Object or ActiveX Control). To find additional references on this COM Object's methods, attributes, and events, open the <Microsoft MapPoint installation directory>\MPNA80.tlb file with the Progress COM Object Viewer Tool.

DEFINE VARIABLE vchMapPoint AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE vchActiveMap AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE vchLocation1 AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE vchLocation2 AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE vchActiveRoute AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE vcFilePath AS CHARACTER NO-UNDO.
DEFINE VARIABLE viReturnCode AS INTEGER NO-UNDO.

DEFINE BUTTON btnCalculate
LABEL "Calculate"
SIZE 15 BY 1.14.

DEFINE BUTTON btnViewMap
LABEL "View Map"
SIZE 15 BY 1.14.

DEFINE VARIABLE fillinAddressFrom AS CHARACTER FORMAT "X(40)":U
INITIAL "24 Beacon Street"
LABEL "Street Address"
VIEW-AS FILL-IN
SIZE 66 BY 1 NO-UNDO.

DEFINE VARIABLE fillinAddressTo AS CHARACTER FORMAT "X(40)":U
INITIAL "14 Oak Park Drive"
LABEL "Street Address"
VIEW-AS FILL-IN
SIZE 66 BY 1 NO-UNDO.

DEFINE VARIABLE fillinCityFrom AS CHARACTER FORMAT "X(25)":U
INITIAL "Boston"
LABEL "City"
VIEW-AS FILL-IN
SIZE 23 BY 1 NO-UNDO.

DEFINE VARIABLE fillinCityTo AS CHARACTER FORMAT "X(25)":U
INITIAL "Bedford"
LABEL "City"
VIEW-AS FILL-IN
SIZE 23 BY 1 NO-UNDO.

DEFINE VARIABLE fillinDistance AS CHARACTER FORMAT "X(256)":U
LABEL "Distance"
VIEW-AS FILL-IN
SIZE 15 BY 1 NO-UNDO.

DEFINE VARIABLE fillinDrivingTime AS CHARACTER FORMAT "X(256)":U
LABEL "Driving time"
VIEW-AS FILL-IN
SIZE 15 BY 1 NO-UNDO.

DEFINE VARIABLE fillinStateFrom AS CHARACTER FORMAT "!!":U
INITIAL "MA"
LABEL "State"
VIEW-AS FILL-IN
SIZE 7 BY 1 NO-UNDO.

DEFINE VARIABLE fillinStateTo AS CHARACTER FORMAT "!!":U
INITIAL "MA"
LABEL "State"
VIEW-AS FILL-IN
SIZE 7 BY 1 NO-UNDO.

DEFINE VARIABLE fillinZipCodeFrom AS CHARACTER FORMAT "X(256)":U
INITIAL "02133"
LABEL "Zip Code"
VIEW-AS FILL-IN
SIZE 14 BY 1 NO-UNDO.

DEFINE VARIABLE fillinZipCodeTo AS CHARACTER FORMAT "X(256)":U
INITIAL "01730"
LABEL "Zip Code"
VIEW-AS FILL-IN
SIZE 14 BY 1 NO-UNDO.

DEFINE RECTANGLE rectTo
EDGE-PIXELS 2 GRAPHIC-EDGE NO-FILL
SIZE 88 BY 3.81.

DEFINE RECTANGLE rectFrom
EDGE-PIXELS 2 GRAPHIC-EDGE NO-FILL
SIZE 88 BY 3.81.

DEFINE FRAME DEFAULT-FRAME
fillinDrivingTime AT ROW 13.86 COL 94 RIGHT-ALIGNED
fillinAddressFrom AT ROW 2.91 COL 19 COLON-ALIGNED
fillinCityFrom AT ROW 4.1 COL 19 COLON-ALIGNED
fillinStateFrom AT ROW 4.1 COL 51 COLON-ALIGNED
fillinZipCodeFrom AT ROW 4.1 COL 71 COLON-ALIGNED
fillinAddressTo AT ROW 7.67 COL 19 COLON-ALIGNED
fillinCityTo AT ROW 8.86 COL 19 COLON-ALIGNED
fillinStateTo AT ROW 8.86 COL 51 COLON-ALIGNED
fillinZipCodeTo AT ROW 8.86 COL 71 COLON-ALIGNED
btnCalculate AT ROW 11.7 COL 25 COLON-ALIGNED
btnViewMap AT ROW 11.7 COL 50 COLON-ALIGNED
fillinDistance AT ROW 13.86 COL 28 RIGHT-ALIGNED
rectTo AT ROW 6.95 COL 4
rectFrom AT ROW 1.95 COL 4
"From" VIEW-AS TEXT
SIZE 6 BY .62 AT ROW 1.71 COL 12
FONT 6
"To" VIEW-AS TEXT
SIZE 5 BY .62 AT ROW 6.71 COL 12
FONT 6
WITH 1 DOWN NO-BOX KEEP-TAB-ORDER OVERLAY
SIDE-LABELS NO-UNDERLINE THREE-D
AT COL 1 ROW 1
SIZE 95 BY 14.

ASSIGN CURRENT-WINDOW:TITLE = "Driving Distance"
CURRENT-WINDOW:HEIGHT = 14
CURRENT-WINDOW:WIDTH = 95.

ASSIGN fillinDistance:HIDDEN IN FRAME DEFAULT-FRAME = TRUE
fillinDrivingTime:HIDDEN = TRUE.

ON CHOOSE OF btnCalculate IN FRAME DEFAULT-FRAME
DO:

CREATE "MapPoint.Application.NA":U vchMapPoint.

ASSIGN /* vchMapPoint:VISIBLE = TRUE
vchMapPoint:WindowState = 0 */
vchActiveMap = vchMapPoint:ActiveMap
vchActiveMap:MapStyle = 1.

/*vchLocation = vchActiveMap:ShowFindDialog
("14 Oak Park Drive,Bedford,MA,01730",
1,
CURRENT-WINDOW:HWND).
vchLocation = vchLocation:Location.
vchLocation:GOTO(). */

vchLocation1 = vchActiveMap:Find(fillinAddressFrom:SCREEN-VALUE
+ "," +
fillinCityFrom:SCREEN-VALUE
+ "," +
fillinStateFrom:SCREEN-VALUE
+ "," +
fillinZipCodeFrom:SCREEN-VALUE).
vchLocation2 = vchActiveMap:Find(fillinAddressTo:SCREEN-VALUE
+ "," +
fillinCityTo:SCREEN-VALUE
+ "," +
fillinStateTo:SCREEN-VALUE
+ "," +
fillinZipCodeTo:SCREEN-VALUE).

vchActiveRoute = vchActiveMap:ActiveRoute.
vchActiveRoute:Waypoints:ADD(vchLocation1,
fillinCityFrom:SCREEN-VALUE
+ ", ":U +
fillinStateFrom:SCREEN-VALUE).
vchActiveRoute:Waypoints:ADD(vchLocation2,
fillinCityTo:SCREEN-VALUE
+ ", ":U +
fillinStateTo:SCREEN-VALUE).
NO-RETURN-VALUE vchActiveRoute:Calculate().

ASSIGN
fillinDistance:SCREEN-VALUE =
STRING(ROUND(vchActiveRoute:Distance,1)) + " miles":U
fillinDrivingTime:SCREEN-VALUE =
STRING(TRUNCATE(((vchActiveRoute:drivingTime * 60) / 0.041666),0)) +
" minutes":U
fillinDistance:VISIBLE = TRUE
fillinDrivingTime:VISIBLE = TRUE.

vcFilePath = vchMapPoint:DefaultFilePath.
NO-RETURN-VALUE vchActiveMap:SaveAs(vcFilePath +
"\SaveAsTest.htm":U,4,FALSE).

/* NO-RETURN-VALUE vchMapPoint:QUIT().*/

IF VALID-HANDLE(vchActiveRoute) THEN
RELEASE OBJECT vchActiveRoute.
IF VALID-HANDLE(vchLocation2) THEN
RELEASE OBJECT vchLocation2.
IF VALID-HANDLE(vchLocation1) THEN
RELEASE OBJECT vchLocation1.
IF VALID-HANDLE(vchActiveMap) THEN
RELEASE OBJECT vchActiveMap.
IF VALID-HANDLE(vchMapPoint) THEN
RELEASE OBJECT vchMapPoint.

btnViewMap:SENSITIVE = TRUE.
END.

ON CHOOSE OF btnViewMap IN FRAME DEFAULT-FRAME
DO:
RUN ShellExecuteA(0,
"open":U,
vcFilePath + "\SaveAsTest.htm":U,
"":U,
"":U,
0,
OUTPUT viReturnCode).
END.

DISPLAY fillinAddressFrom
fillinCityFrom
fillinStateFrom
fillinZipCodeFrom
fillinAddressTo
fillinCityTo
fillinStateTo
fillinZipCodeTo
WITH FRAME DEFAULT-FRAME.

ENABLE fillinAddressFrom
fillinCityFrom
fillinStateFrom
fillinZipCodeFrom
fillinAddressTo
fillinCityTo
fillinStateTo
fillinZipCodeTo
btnCalculate
rectTo
rectFrom
WITH FRAME DEFAULT-FRAME.

WAIT-FOR CLOSE OF THIS-PROCEDURE.

PROCEDURE ShellExecuteA EXTERNAL "shell32.dll":U:
/* Handle to parent window */
DEFINE INPUT PARAMETER plHWND AS LONG NO-UNDO.
/* Operation to perform: open, print */
DEFINE INPUT PARAMETER pcOperation AS CHARACTER NO-UNDO.
/* Document or executable name */
DEFINE INPUT PARAMETER pcFile AS CHARACTER NO-UNDO.
/* Command line parameters to executable in File */
DEFINE INPUT PARAMETER pcParameters AS CHARACTER NO-UNDO.
/* Default directory */
DEFINE INPUT PARAMETER pcDirectory AS CHARACTER NO-UNDO.
/* whether shown when opened:
0 hidden, 1 normal, minimized 2, maximized 3,
0 if File is a document */
DEFINE INPUT PARAMETER plShowCmd AS LONG NO-UNDO.
/* Return Code: less than or equal to 32 */
DEFINE RETURN PARAMETER plInstance AS LONG NO-UNDO.
END.