WebBrowserでの入力が・・・


akky  2003-09-17 21:42:41  No: 4878

こんにちは、akkyと言います。
Delphi6 PersonalでWebBrowserを使って簡単なブラウザを作っているのですが、
それでナビゲートしたホームページ上のテキスト入力ボックスに文字を入力すると、普通の文字は大丈夫なのですが、改行をしようとすると出来ないのです。
何か解決方法がありましたら、よろしくお願い致します。


にしの  2003-09-17 23:26:34  No: 4879

WebBrowserのバグです。

このバグ回避は、TUIWebBrowserを使った方が簡単です。
http://plaza21.mbn.or.jp/~takoyakusi/


akky  2003-09-20 05:59:41  No: 4880

にしのさん、回答ありがとうございます。
何回か、教えて貰ったURLにあるコンポーネントをインストールしようとしたのですが、上手く行きませんでした(^^;
もう少し色々やってみます。


torum  2003-09-20 16:59:52  No: 4881

これでいけます。

private
  FOleInPlaceActiveObject: IOleInPlaceActiveObject;
-----

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := MsgHandler;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
  FOleInPlaceActiveObject := nil;
end;
procedure TForm1.MsgHandler(var Msg: TMsg; var Handled: Boolean);
var
  iOIPAO: IOleInPlaceActiveObject;
  Dispatch: IDispatch;
begin
  if WebBrowser1 = nil then begin
        Handled := False;
        Exit;
    end;
  Handled := (IsDialogMessage(WebBrowser1.Handle, Msg) = True);
  if (Handled) and (not WebBrowser1.Busy) then begin
    Dispatch := WebBrowser1.Application;
    if Dispatch <> nil then begin
      Dispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO);
    if iOIPAO <> nil then begin
      FOleInPlaceActiveObject := iOIPAO;
    end;
  end;
  if FOleInPlaceActiveObject <> nil then
  if ((Msg.message = WM_KEYDOWN) or (Msg.message = WM_KEYUP)) and
          ((Msg.wParam = VK_BACK) or (Msg.wParam = VK_LEFT) or (Msg.wParam = VK_RIGHT)) then
        else
          FOleInPlaceActiveObject.TranslateAccelerator(Msg);
end;


torum  2003-09-20 17:04:46  No: 4882

補足。

uses
 ***,ActiveX;

ファイルの末尾、end.の前あたりに、オマジナイを忘れずに。

initialization
    OleInitialize(nil);

finalization
    OleUninitialize;

end.


Third  2003-10-24 09:42:24  No: 4883

torumさんのコードと殆ど同じなのですが下のようにして使っています

uses
  SHDocVw_TLB, ActiveX;
  Delphi6ならSHDocVw_TLBをSHDocVwに
---------------------------------------------------------------
  private
    FOleInPlaceActiveObject: IOleInPlaceActiveObject;
  procedure MsgHandler(var Msg: TMsg; var Handled: Boolean);
---------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := MsgHandler;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FOleInPlaceActiveObject := nil;
end;

procedure TForm1.MsgHandler(var Msg: TMsg; var Handled: Boolean);
var
  iOIPAO: IOleInPlaceActiveObject;
  Dispatch: IDispatch;
begin
  if WebBrowser1 = nil then
    begin
      Handled := False;
      Exit;
    end;
  Handled := (IsDialogMessage(WebBrowser1.Handle, Msg) = True);
  if (Handled) and (not WebBrowser1.Busy) then
    begin
      Dispatch := WebBrowser1.Application;
      if Dispatch <> nil then
        begin
          Dispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO);
      if iOIPAO <> nil then
        begin
          FOleInPlaceActiveObject := iOIPAO;
        end;
    end;
  if FOleInPlaceActiveObject = nil then
    FOleInPlaceActiveObject.TranslateAccelerator(Msg);
  end;
end;

initialization
  OleInitialize(nil);
finalization
  OleUninitialize;

end.


Third  2003-10-24 23:09:19  No: 4884

間違ったコードを投書してしまいました。
torumさんのコードと比較して見ていただくと、
if FOleInPlaceActiveObject <> nil then(以下略を
if FOleInPlaceActiveObject = nil then(以下略
に書き換えています。
上に投書したコードは半角英数入力時、'aa' のように重複してしまう事があるので、それを迂回するときに使っている物でした。
これをそのまま使うとまったく問題の解決にはなりません(^^;
お騒がせ致しました<(_ _)>


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加