неділя, 15 грудня 2019 р.

Delphi - Opening TWebBrowser external link in default browser

  1. unit Unit1;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, StdCtrls, ActiveX, OleCtrls, SHDocVw;
  6. const
  7.   DISPID_NEWWINDOW3 = 273;
  8. type
  9.   TWebBrowserNewWindow3 = procedure(ASender: TObject; var ppDisp: IDispatch; var Cancel: WordBool;
  10.     dwFlags: Longint; const bstrUrlContext: WideString; const bstrUrl: WideString) of object;
  11.   TWebBrowser = class(SHDocVw.TWebBrowser)
  12.   private
  13.     FOnNewWindow3: TWebBrowserNewWindow3;
  14.   protected
  15.     procedure InvokeEvent(ADispID: TDispID; var AParams: TDispParams); override;
  16.   public
  17.     property OnNewWindow3: TWebBrowserNewWindow3 read FOnNewWindow3 write FOnNewWindow3;
  18.   end;
  19. type
  20.   TForm1 = class(TForm)
  21.     WebBrowser1: TWebBrowser;
  22.     procedure FormCreate(Sender: TObject);
  23.   private
  24.     procedure WebBrowserNewWindow3(ASender: TObject; var ppDisp: IDispatch; var Cancel: WordBool;
  25.       dwFlags: Longint; const bstrUrlContext: WideString; const bstrUrl: WideString);
  26.   public
  27.     { Public declarations }
  28.   end;
  29. var
  30.   Form1: TForm1;
  31. implementation
  32. {$R *.dfm}
  33. { TWebBrowser }
  34. procedure TWebBrowser.InvokeEvent(ADispID: TDispID; var AParams: TDispParams);
  35. begin
  36.   if (ADispID = DISPID_NEWWINDOW3) and Assigned(FOnNewWindow3) then
  37.   Begin
  38.     FOnNewWindow3(Self, AParams.rgvarg^[4].pdispVal^,
  39.       AParams.rgvarg^[3].pbool^, AParams.rgvarg^[2].lVal,
  40.       WideString(AParams.rgvarg^[1].bstrVal), WideString(AParams.rgvarg^[0].bstrVal));
  41.   end
  42.   else
  43.     inherited;
  44. end;
  45. { TForm1 }
  46. procedure TForm1.FormCreate(Sender: TObject);
  47. const
  48.   URL = 'http://www.w3schools.com/;
  49. begin
  50.   WebBrowser1.OnNewWindow3 := WebBrowserNewWindow3;
  51.   WebBrowser1.Navigate(URL);
  52. end;
  53. procedure TForm1.WebBrowserNewWindow3(ASender: TObject; var ppDisp: IDispatch;
  54.   var Cancel: WordBool; dwFlags: Longint; const bstrUrlContext, bstrUrl: WideString);
  55. begin
  56.   Cancel := True;
  57.   ShowMessage(bstrUrl);
  58. end;
  59. end.
By default, it opens in InternetExplorer. Here is an alternative HTML view control.
Source

Немає коментарів:

Дописати коментар