当前位置:首页 > 虚拟主机 > 正文

pb打开网站的控件

在PowerBuilder(PB)开发中,通过控件打开网站是常见的需求,尤其是在构建需要集成Web服务的桌面应用程序时,PB提供了多种方式实现这一功能,其中最常用的是使用OLE控件或调用系统命令结合浏览器打开指定URL,以下将详细介绍不同控件的实现方法、注意事项及最佳实践。

使用OLE控件打开网站

OLE控件是PB中嵌入外部对象的核心组件,通过它可以调用IE(Internet Explorer)或其他支持OLE接口的浏览器来打开网站,具体步骤如下:

  1. 创建OLE控件

    在窗口画布上放置一个OLE控件,右键选择“Insert Object”,在列表中选择“Microsoft Internet Controls”(需确保系统已安装IE),若列表中未显示,可通过“文件→注册ActiveX控件”手动注册ieframe.dll(位于IE安装目录)。

  2. 编写代码

    在窗口的Open事件或按钮点击事件中,通过OLE控件的Navigate方法打开URL,示例代码:

    ole_1.Object.Navigate("https://www.example.com")

    ole_1是OLE控件的名称,Navigate是IE浏览器提供的接口方法,用于加载指定网页。

  3. 参数说明

    Navigate方法支持多个参数,常用参数包括:

    pb打开网站的控件 第1张

    • URL:必填,要打开的网址。
    • Flags:可选,如navNoHistory(不保存历史记录)。
    • TargetFrameName:可选,指定框架名称。
    • PostData:可选,POST请求的数据。
    • Headers:可选,HTTP请求头信息。
    • 以新窗口打开网页(需结合JavaScript):

    • 注意事项

      • 浏览器兼容性:OLE控件默认调用IE,若系统默认浏览器为Edge(基于Chromium),需通过ShellExecuteAPI调用(后文详述)。
      • 权限问题:若PB程序以管理员身份运行,可能导致OLE控件初始化失败,建议以普通用户权限测试。
      • 错误处理:添加异常捕获,避免因URL无效或浏览器未安装导致程序崩溃: TRY ole_1.Object.Navigate("https://www.example.com") CATCH (ole_error e) messagebox("错误", "无法打开网页: " + e.GetMessage()) END TRY
      • 使用ShellExecute API调用默认浏览器

        若需调用系统默认浏览器(如Chrome、Edge等)而非IE,可通过Windows API的ShellExecute函数实现,步骤如下:

        1. 声明API函数

          在全局外部函数声明中添加:

          pb打开网站的控件 第2张

          Function long ShellExecute( long hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, long nShowCmd ) Library "shell32.dll"
        2. 编写调用代码

          在按钮事件中调用API:

          long ll_return ll_return = ShellExecute(0, "open", "https://www.example.com", "", "", 1) IF ll_return <= 32 THEN messagebox("错误", "无法打开网页,错误码: " + string(ll_return)) END IF
        3. 参数说明

          • hwnd:父窗口句柄,0表示无父窗口。
          • lpOperation:操作类型,”open”表示打开文件/URL。
          • lpFile:要打开的URL或文件路径。
          • nShowCmd:窗口显示方式,1表示正常显示,3表示最大化。
        4. 优势与局限

          • 优势:兼容所有主流浏览器,无需依赖IE。
          • 局限:无法直接控制浏览器窗口(如尺寸、位置),需通过额外API实现。

        使用WebBrowser控件(PB 12.5及以上版本)

        PB 12.5及以上版本支持直接嵌入WebBrowser控件(基于IE内核),实现方式与OLE控件类似,但更简洁:

        1. 在窗口上放置WebBrowser控件(控件列表中直接选择)。
        2. 调用Navigate方法: WebBrowser1.Navigate("https://www.example.com")

        不同控件的对比与选择

        控件类型 适用场景 优点 缺点
        OLE控件 需要精细控制IE浏览器时 支持IE高级功能(如DOM操作) 仅支持IE,兼容性差
        ShellExecute API 调用系统默认浏览器 兼容所有浏览器,无需额外依赖 无法控制浏览器窗口细节
        WebBrowser控件 PB 12.5+版本,需嵌入浏览器功能 原生支持,性能较好 仅限较新PB版本

        常见问题与解决方案

        1. 问题:OLE控件打开网页时提示“类未注册”。

          解决:手动注册IE的ieframe.dll,命令为:regsvr32 ieframe.dll(需以管理员身份运行)。

          pb打开网站的控件 第3张

        2. 问题:ShellExecute调用后网页无响应。

          解决:检查URL是否包含特殊字符(如空格),需使用URLEncode函数处理:

          相关问答FAQs

          Q1: 如何在PB中打开网页并传递POST数据?

          A: 若需通过POST方式提交数据,可使用OLE控件的Navigate2方法(需将OLE控件类型设置为InternetExplorer.Application),并构造POST数据字符串,示例:

          ole_1.Object.Navigate2("https://www.example.com/post", 0, "", "param1=value1&param2=value2", "application/xwwwformurlencoded")

          注意:POST数据需手动编码(如使用URLFormat函数),且目标服务器需支持POST请求。

          Q2: 如何控制打开的浏览器窗口大小和位置?

          A: 使用ShellExecute时,可通过SetWindowPos API调整窗口,先声明SetWindowPos:

          Function long SetWindowPos( long hwnd, long hWndInsertAfter, long X, long Y, long cx, long cy, long uFlags ) Library "user32.dll"

          调用ShellExecute后,获取浏览器窗口句柄并设置位置:

          long lhwnd_browser lhwnd_browser = FindWindow("IEFrame", "") // 获取IE窗口句柄 SetWindowPos(lhwnd_browser, 0, 100, 100, 800, 600, 0) // 设置位置和大小

          非IE浏览器需根据其窗口类名调整(如Chrome为”Chrome_WidgetWin_1″)。

0