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两个组件即可,然后复制这里的代码。好象再没有什么可写的了。

  • 相关阅读:
    [k8s]kube-dns/dashboard排错历险记(含sa加载用法/集群搭建)
    禁用nginx的access日志
    redis info 各信息意义
    使用JProfiler进行内存分析
    lr11 BUG?Failed to send data by channels
    loadrunner 怎么能得到返回的http状态?
    SQL SERVER查看当前连接情况
    总结: Struts2 + Spring 的线程安全问题
    转发:maven打包时始终出现以下提示:-source 1.3 中不支持泛型(请使用 -source 5 或更高版本以启用泛型)
    SQL Server 索引结构及其使用(一)
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/14939742.html
Copyright © 2011-2022 走看看