Monday, March 16, 2009

Using OLE web browser control in PowerBuilder?

Using OLE web browser control in PowerBuilder is easy. You choose "Create OLE control" from control list. Click on "Insert Control" tab and choose "Microsoft Web Browser". You may use it for web browsing or display PDF files. When I worked on a project in 2001, I had an issue with OLE Adobe Reader control in PowerBuilder. It had memory leak. After opening a handful PDF files, it would crash. Finally I found the solution to work around this issue. That was using "Microsoft Web Browser" control.

Here is how to use it and some of the features I used:

1. How to navigate?

ole_browser.object.navigate("http://www.google.com")

2. How to go back and forward?

ole_browser.object.GoBack()

ole_browser.object.GoForward()

If you have the "Back" and "Forward" button, you will want to enable them only when there are pages you can go back and forward. Then you need to have the following code in the "commandstatechange" event of the OLE control.

CHOOSE CASE command
    CASE 1 //CSC_NAVIGATEFORWARD
        cb_forrward.enabled = enable
    CASE 2 //CSC_NAVIGATEBACK
        cb_back.enabled = enable
END CHOOSE

3. How to get the url and name

In "navigatecomplete2" event you can use the following properties

ole_browser.Object.LocationUrl

ole_browser.Object.LocationName

4. How to do some common actions?

You may use ExecWBcmdID As OLECMDID, cmdexecopt As OLECMDEXECOPT,  [pvaIn As Variant,]  [pvaOut As Variant]) to perform some common actions in Web Browser Control. For example, ole_browser.object.ExecWB(12, 2) is to copy the highlighted text. Below is the list of command arguments:

typedef enum  
{
OLECMDID_OPEN = 1,
OLECMDID_NEW = 2,
OLECMDID_SAVE = 3,
OLECMDID_SAVEAS = 4,
OLECMDID_SAVECOPYAS = 5,
OLECMDID_PRINT = 6,
OLECMDID_PRINTPREVIEW = 7,
OLECMDID_PAGESETUP = 8,
OLECMDID_SPELL = 9,
OLECMDID_PROPERTIES = 10,
OLECMDID_CUT = 11,
OLECMDID_COPY = 12,
OLECMDID_PASTE = 13,
OLECMDID_PASTESPECIAL = 14,
OLECMDID_UNDO = 15,
OLECMDID_REDO = 16,
OLECMDID_SELECTALL = 17,
OLECMDID_CLEARSELECTION = 18,
OLECMDID_ZOOM = 19,
OLECMDID_GETZOOMRANGE = 20,
OLECMDID_UPDATECOMMANDS = 21,
OLECMDID_REFRESH = 22,
OLECMDID_STOP = 23,
OLECMDID_HIDETOOLBARS = 24,
OLECMDID_SETPROGRESSMAX = 25,
OLECMDID_SETPROGRESSPOS = 26,
OLECMDID_SETPROGRESSTEXT = 27,
OLECMDID_SETTITLE = 28,
OLECMDID_SETDOWNLOADSTATE = 29,
OLECMDID_STOPDOWNLOAD = 30,
OLECMDID_ONTOOLBARACTIVATED = 31,
OLECMDID_FIND = 32,
OLECMDID_DELETE = 33,
OLECMDID_HTTPEQUIV = 34,
OLECMDID_HTTPEQUIV_DONE = 35,
OLECMDID_ENABLE_INTERACTION = 36,
OLECMDID_ONUNLOAD = 37,
OLECMDID_PROPERTYBAG2 = 38,
OLECMDID_PREREFRESH = 39,
OLECMDID_SHOWSCRIPTERROR = 40,
OLECMDID_SHOWMESSAGE = 41,
OLECMDID_SHOWFIND = 42,
OLECMDID_SHOWPAGESETUP = 43,
OLECMDID_SHOWPRINT = 44,
OLECMDID_CLOSE = 45,
OLECMDID_ALLOWUILESSSAVEAS = 46,
OLECMDID_DONTDOWNLOADCSS = 47,
OLECMDID_UPDATEPAGESTATUS = 48,
OLECMDID_PRINT2 = 49,
OLECMDID_PRINTPREVIEW2 = 50,
OLECMDID_SETPRINTTEMPLATE = 51,
OLECMDID_GETPRINTTEMPLATE = 52,
OLECMDID_PAGEACTIONBLOCKED = 55,
OLECMDID_PAGEACTIONUIQUERY = 56,
OLECMDID_FOCUSVIEWCONTROLS = 57,
OLECMDID_FOCUSVIEWCONTROLSQUERY = 58,
OLECMDID_SHOWPAGEACTIONMENU = 59,
OLECMDID_ADDTRAVELENTRY = 60,
OLECMDID_UPDATETRAVELENTRY = 61,
OLECMDID_UPDATEBACKFORWARDSTATE = 62,
OLECMDID_OPTICAL_ZOOM = 63,
OLECMDID_OPTICAL_GETZOOMRANGE = 64,
OLECMDID_WINDOWSTATECHANGED = 65,
OLECMDID_ACTIVEXINSTALLSCOPE = 66
} OLECMDID;


typedef enum  
{
OLECMDEXECOPT_DODEFAULT = 0,
OLECMDEXECOPT_PROMPTUSER = 1,
OLECMDEXECOPT_DONTPROMPTUSER = 2,
OLECMDEXECOPT_SHOWHELP = 3
} OLECMDEXECOPT;


Although it says OLECMDEXECOPT_DONTPROMPTUSER = 2 doesn't show the dialog, but when you run execwb(6,2) to print a web page, it will always show the dialog. That is be design. Check Microsoft KB http://support.microsoft.com/kb/247671 for more info.

1 comment:

  1. I recently came across your blog and have been reading along. I thought I would leave my first comment. I don't know what to say except that I have enjoyed reading. Nice blog. I will keep visiting this blog very often.
    Thank You
    PowerBuilder

    ReplyDelete