Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
{ 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: } unitUnit1; 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;