zoukankan      html  css  js  c++  java
  • 为app建立一个浏览器窗口

    为了显示一个网页,我做了一个窗口,同样参考前面写过的为Android做一个ShowModal窗口。先看一下代码:

    unit Form.WebBrowser;
    
    interface
    
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      System.Threading, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
      FMX.Objects, FMX.Layouts, CC.NavigationBar, CC.StatusBar, CC.X5WebView, FMX.WebBrowser;
    
    type
      TWebBrowserForm = class(TForm)
        CCStatusBar1: TCCStatusBar;
        CCNavigationBar1: TCCNavigationBar;
        Rectangle1: TRectangle;
        WebBrowser1: TWebBrowser;
        CCX5WebView1: TCCX5WebView;
        procedure FormCreate(Sender: TObject);
        procedure FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
            Shift: TShiftState);
      private
        FURL: string;
        procedure SetURL(const Value: string);
      public
        property URL:string read FURL write SetURL;
      end;
    
    procedure ShowWebBrowserForm(const AURL:string; AFormResult: TProc<TModalResult>=nil);
    
    implementation
    
    {$R *.fmx}
    //调用方法:
    //   ShowWebBrowserForm('https://www.baidu.com/',
    //    procedure(AResult: TModalResult)
    //    begin
    //
    //    end);
    
    var
      WebBrowserForm: TWebBrowserForm;
    
    procedure ShowWebBrowserForm(const AURL:string; AFormResult: TProc<TModalResult>);
    begin
      if not assigned(WebBrowserForm) then
      begin
           WebBrowserForm := TWebBrowserForm.Create(Application);
      end;
    
      WebBrowserForm.URL:=AURL;
    
      WebBrowserForm.ShowModal(
        procedure(AResult: TModalResult)
        begin
          if Assigned(AFormResult) then
            AFormResult(AResult);
    
          TTask.Run(
                    procedure
                    begin
                      TThread.Synchronize(nil,
                        procedure
                        begin
                          WebBrowserForm.DisposeOf;
                          WebBrowserForm := nil;
                        end);
                    end);
        end);
    end;
    
    procedure TWebBrowserForm.FormCreate(Sender: TObject);
    begin
    {$IFDEF ANDROID}
      WebBrowser1.Free;
    {$ELSE}
      CCX5WebView1.Free;
    {$ENDIF}
    end;
    
    procedure TWebBrowserForm.FormKeyUp(Sender: TObject; var Key: Word;
        var KeyChar: Char; Shift: TShiftState);
    begin
      if Key = vkHardwareBack then
           self.ModalResult := mrCancel;
    end;
    
    procedure TWebBrowserForm.SetURL(const Value: string);
    begin
      FURL := Value;
    {$IFDEF ANDROID}
      CCX5WebView1.loadURL(Value);
    {$ELSE}
      WebBrowser1.Navigate(Value);
    {$ENDIF}
    end;
    
    end.

    通过代码,可以看到:

    1.使用了ChinaCock的X5WebView来支持android

    2.使用了原生的WebBrowser来支持Windows平台,因为ChinaCock的X5WebView现在不支持Windows平台。这里有个小坑,我在运行期建立WebBrowser实例,发现不显示网页,设计期放置到Form上,就正常,这应该是10.4.2的bug.

    3.调用方法在注释中写了,可以使用回调函数,也可以省略,只显示一个网页。

    4.最后,开发环境:在10.4.2下测试通过

    你要是使用,建一个Form,放置一个X5WebView及WebBrowser两个组件即可,然后复制这里的代码。好象再没有什么可写的了。

  • 相关阅读:
    poj 1007:DNA Sorting(水题,字符串逆序数排序)
    蓝桥杯北京之旅【第二篇·2014.5.31】
    poj 1006:Biorhythms(水题,经典题,中国剩余定理)
    蓝桥杯北京之旅【第一篇·2014.5.30】
    【2014年6月份日常记录表(2014.6.1—6.30,30天)】
    poj 1002:487-3279(水题,提高题 / hash)
    ThreadPoolExecutor机制探索-我们到底能走多远系列(41)
    ibatis批量操作补充
    Maven管理 划分模块
    顺序队列实现任务以此执行-任务调度系列2
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/14939742.html
Copyright © 2011-2022 走看看