Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > WebBrowser: не работают некоторые клавиши


Автор: December 14.11.2004, 03:04
Сабж. Берём TWebBrowser, скармливаем ему любую страницу форума, где можно текст печатать, пытаемся испольлзовать клавиши "Enter", Ctrl+C, Ctrl+Ins и т.п. В DRKB есть вроде solution, но во-первых не всё лечит, во-вторых кривой (с ошибками, кажется), в-третьих, я его не полностью понял. ЗЫ Отгадайте, почему этот текст написан в одну строку, точнее, одним абзацем smile

Автор: Alex 14.11.2004, 11:28
проект свой выложи, я посмотрю

Автор: December 14.11.2004, 14:42
Alex это стандартное поведение TWebBrowser. Просто положи его на форму и пошли на эту страничку (которую ты сейчас смотришь smile)

Автор: Alex 14.11.2004, 17:20
В коде включается поддержка всех функциональных клавиш:

Код

unit Unit3;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, OleCtrls, SHDocVw, ActiveX, AppEvnts;

type
 TForm1 = class(TForm)
   WebBrowser1: TWebBrowser;
   ApplicationEvents1: TApplicationEvents;
   procedure FormCreate(Sender: TObject);
   procedure ApplicationEvents1Message(var Msg: tagMSG;
     var Handled: Boolean);
 private
   { Private declarations }
 public
   { Public declarations }
   
 end;

var
 Form1: TForm1;

threadvar
 FOleInPlaceActiveObject: IOleInPlaceActiveObject;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 WebBrowser1.Navigate('http://forum.vingrad.ru/index.php?showtopic=34567&st=0&unread=&#entry256086');
end;

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
 var Handled: Boolean);
var
 iOIPAO: IOleInPlaceActiveObject;
 Dispatch: IDispatch;
begin
 if not Assigned(WebBrowser1) then begin
   Handled:= False;
   Exit;
 end;

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

 if (Handled) {and (not WebBrowser.Busy)} then begin
   //{and (not WebBrowser.Busy)} - если "разкомментировать", то код будет
   //                              работать только после полной загрузки
   //                              страницы
   if not Assigned(FOleInPlaceActiveObject) then begin
     Dispatch := WebBrowser1.Application;
     if Assigned(Dispatch) then begin
       Dispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO);
       if Assigned(iOIPAO) then FOleInPlaceActiveObject:= iOIPAO;
     end;
   end;
   if Assigned(FOleInPlaceActiveObject) then
     if Msg.wParam = VK_RETURN then
       FOleInPlaceActiveObject.TranslateAccelerator(Msg);
 end;
end;

initialization
OleInitialize(nil);

finalization
OleUninitialize;
FOleInPlaceActiveObject:= nil;

end.

Автор: December 15.11.2004, 21:48
Alex Спасибо!!! Всё работает.

Автор: Alex 11.1.2005, 00:23
Для включения всех функциональных клавиш нужно в место:
Код

if Msg.wParam = VK_RETURN then

Написать:
Код

if (Msg.wParam = VK_SPACE) or (Msg.wParam = VK_LEFT) or (Msg.wParam = VK_UP) or (Msg.wParam = VK_BACK)
or (Msg.wParam = VK_DOWN) or (Msg.wParam = VK_RIGHT)
then exit;



Автор: ТипТопыч 28.10.2006, 01:03
Опробовал все способы, представленные на форуме- работают все функциональные клавиши кроме enter'a smile помогите плиз заставить его работать

Автор: _hunter 30.10.2006, 12:04
таки не все...
http://forum.vingrad.ru/index.php?showtopic=42769&view=findpost&p=340559

Автор: ТипТопыч 31.10.2006, 23:06
_hunter, спасибо, осталось разобраться и переписать не дельфи)) (просто в сях вообще не шарю)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)