Активизировать клавишу возврата для TWebBrowser

Советы » Браузер » Активизировать клавишу возврата для TWebBrowser

{ 
  Problem: 

  Web forms that have multi-line text boxes and/or Submit buttons do not 
  respond to the Enter key when displayed on a TWebbrowser. 
  Also when browsing local folders, some keys don't respond. 

  How to solve it: 
}

 unit

Unit1; interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, SHDocVw_TLB, ActiveX, StdCtrls; type

TForm1 = class

(TForm) WebBrowser1: TWebBrowser; Button1: TButton; Button2: TButton; procedure

FormDestroy(Sender: TObject); procedure

FormCreate(Sender: TObject); procedure

Button1Click(Sender: TObject); procedure

Button2Click(Sender: TObject); private

{ Private declarations } FOleInPlaceActiveObject: IOleInPlaceActiveObject; procedure

MsgHandler(var

Msg: TMsg; var

Handled: Boolean); public

{ Public declarations } end

; var

Form1: TForm1; implementation

{$R *.dfm} procedure

TForm1.FormDestroy(Sender: TObject); begin

FOleInPlaceActiveObject := nil

; end

; procedure

TForm1.FormCreate(Sender: TObject); begin

Application.OnMessage := MsgHandler; end

; procedure

TForm1.MsgHandler(var

Msg: TMsg; var

Handled: Boolean); const

DialogKeys: set

of

Byte = [VK_LEFT, VK_RIGHT, VK_BACK, VK_UP, VK_DOWN, $30..$39, $41..42, $44..$55, $57, $59..$5A]; var

iOIPAO: IOleInPlaceActiveObject; Dispatch: IDispatch; begin

{ exit if we don't get back a webbrowser object } if

(WebBrowser1 = nil

) then

begin

Handled := System.False; Exit; end

; Handled := (IsDialogMessage(WebBrowser1.Handle, Msg) = System.True); if

(Handled) and

(not

WebBrowser1.Busy) then

begin

if

FOleInPlaceActiveObject = nil

then

begin

Dispatch := WebBrowser1.Application; if

Dispatch <> nil

then

begin

Dispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO); if

iOIPAO <> nil

then

FOleInPlaceActiveObject := iOIPAO; end

; end

; if

FOleInPlaceActiveObject <> nil

then

if

((Msg.message

= WM_KEYDOWN) or

(Msg.message

= WM_KEYUP)) and

(Msg.wParam in

DialogKeys) then

// nothing - do not pass on the DialogKeys else

FOleInPlaceActiveObject.TranslateAccelerator(Msg); end

; end

; initialization

OleInitialize(nil

); finalization

OleUninitialize;

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com