WebBrowserにEditのテキストを送るには?

解決


みゆ  2002-08-26 07:14:58  No: 1349

いつもお世話になっています。
色々調べてたんですけど、WebBrowserにテキストを送るのは過去ログのとかでは出来ない(?)みたいなんです。(違いますか?(^^;)
なので、「Buttonを押したら、WebBrowserのキャレットがある位置にEdit.Textを送る」のは、OnMouseMoveイベントのときにIniFileにキャレットの場所を入れて置いてOnClickイベントでその場所にEdit.textを入れようとしたんですけど、コードが上手く書けなくて、悩んでいます。どなたか教えて下さい!


にしの  2002-08-26 08:42:23  No: 1350

以前の質問の、「WebBrowserを印刷するには?」の応用です。

下のようなコードでできます。
副作用として、Edit1の値がクリップボードに入ります。
# 以前のクリップボードの値は消えます

var
  tmp:OleVariant;
begin
  Clipboard.AsText := Edit1.Text;
  WebBrowser1.ExecWB(OLECMDID_PASTE,
    OLECMDEXECOPT_DONTPROMPTUSER ,
    tmp,
    tmp);
end;


にしの  2002-08-26 08:43:33  No: 1351

もう一つ副作用。
選択状態の箇所を、Edit1の値で置き換えてしまいます。
入力欄でなくても置き換えます。


みゆ  2002-08-26 21:44:47  No: 1352

にしのさん、いつもありがとうございます!
>選択状態の箇所を、Edit1の値で置き換えてしまいます。
>入力欄でなくても置き換えます。
とは、最初に「あ」と入れて、同じ所に「か」と入れたら、
「あ」が消えて「か」だけになるという意味ですか?
ちゃんと「あか」って入ったから、違うのかなと思って。。。
あと、もしWebBrowserが選択状態になってなかったら、
メッセージボックスを出したいんですけど、if〜thenの部分を、
何て書けばいいのかわからなくて、それも教えて下さい<(_  _)>


にしの  2002-08-26 22:53:12  No: 1353

いえ、選択状態とは、HTMLのどこか(入力欄でない部分でも)で、マウスの右ボタンを押下し(あげず)、ドラッグして、ボタンを放すことでできる「選択」です。
たとえば、名前の「にしの」から、下の「追加発言」までを「選択状態」にして、上のような処理を行うと、この発言より下、名前の入力欄の上までが、Edit1.Textで置き換わります。

選択状態かどうかを判断するには、QueryStatusWBを使って「コピーできる状態か」を調べます。

(WebBrowser1.QueryStatusWB(OLECMDID_COPY) and OLECMDF_ENABLED)<>0

がtrueなら、コピー可能=選択状態です。


みゆ  2002-08-27 00:31:22  No: 1354

そういうことでしたか〜、わかりました!出来ました(*^ー^*)
あの、もう1つ悩んでるのが、ブラウザの文字のサイズを変える機能がありますよね。それをしたいんですけど、Imageを使ってしようとしたんですけど、上手くいきません。よかったら教えて下さい<(_  _)>


みゆ  2002-08-27 00:58:58  No: 1355

すいません、出来たと思ったけど、出来てませんでした(>_<。)
elseにメッセージボックスの文を書くんですよね?
どこも選択しないで送っても、選択して送っても、elseに行きます。
WebBrowser1.QueryStatusWB(OLECMDID_COPY)だけにしたりと、色々試したんですけど、上手く出来ません。。。なぜでしょう?(^^;


にしの  2002-08-27 01:06:18  No: 1356

フォントサイズを変える方法ですか?
OLECMDID_ZOOMを使います。与える引数は、0〜4の数値らしいです。

var
  size, tmp: OleVariant;
begin
  size := 3;
  WebBrowser1.ExecWB(OLECMDID_ZOOM,
    OLECMDEXECOPT_DONTPROMPTUSER,
    size,
    tmp);
end;

ちょっと気になる記事がありました。
うちの環境はDelphi5Proで、正常に動作しているのですが、D3以前では起きるかもしれません。
http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/021/021022.html


にしの  2002-08-27 01:10:15  No: 1357

文法を間違えていたりしませんか?

  // 選択状態の時、SELECTEDと表示
  if (WebBrowser1.QueryStatusWB(OLECMDID_COPY) and OLECMDF_ENABLED)<>0 then
    ShowMessage('SELECTED');

  // 選択状態でない時、NGと表示
  if (WebBrowser1.QueryStatusWB(OLECMDID_COPY) and OLECMDF_ENABLED)=0
    ShowMessage('NG');

こんな感じ。

elseに書くときは、then の最後にセミコロンは置きません。これを間違えると、一つ上の階層のifにelseをつけることになるかもしれませんから。


みゆ  2002-08-27 01:43:16  No: 1358

if (WebBrowser.QueryStatusWB(OLECMDID_COPY) and OLECMDF_ENABLED)<>0 then
  begin
    Clipboard.AsText := Txt_tab.Text;
    WebBrowser.ExecWB(OLECMDID_PASTE,
    OLECMDEXECOPT_DONTPROMPTUSER ,
    temp,
    temp);
    Txt_tab.text:=''
  end
else
  Application.MessageBox('入力する場所を指定してね', 'あらら',);
でelseばかりに行くんですけど、文法間違っていますか?


にしの  2002-08-27 02:09:44  No: 1359

選択状態のときにも、elseにいきますか?
たぶん、選択状態という言葉の意味を間違えています。

僕は、クリップボードにコピーできる状態を、選択状態といっています。
入力できる状態ではありません。
# だから、入力欄以外でも選択状態だとTxt_tabの値で置換されます

もし、入力可能状態かを知りたいのであれば、DOMの機能が必要になります。
WebBrowserには、Documentプロパティがありますが、通常は参照できません。
# IDispatchのオブジェクトだからです

TUIWebBrowserには、TDOMLibというクラスがあり、簡単に操作ができるのですが、TDOMLibはシェアウェアです。


みゆ  2002-08-27 02:19:23  No: 1360

あぁ〜!そうでしたぁ!!すいません(−.−;

フォントサイズですが、にしのさんのは正常に動作してるんですよね?
私はDelphi6Proを使ってて、エラーは出てないですけど、ならない・・・です。
全く同じに書いてるんですけど・・・?


にしの  2002-08-27 02:42:47  No: 1361

フォントのサイズ、これでも駄目ですか?
先ほどのリンクを見ると、WebBrowser.ExecWBの部分の解釈を、Delphiが間違うことがあるようです。

var
  size, tmp: OleVariant;
  web : iwebbrowser2;
begin
  size := 3;
  web :=browser.ControlInterface;
  web.ExecWB(OLECMDID_ZOOM,
    OLECMDEXECOPT_DONTPROMPTUSER,
    size,
    tmp);
end;


みゆ  2002-08-27 03:42:06  No: 1362

すいません、元ので出来ました!でも何度か強制終了になっちゃったんですよ〜。
でも今はもうならないので多分大丈夫・・・ですっ!
色々とどうもありがとうございました<(_  _)>


みゆ  2002-08-27 03:43:33  No: 1363

解決のチェックを忘れてました(‾▽‾;


超初心者+1  2004-08-30 12:18:24  No: 1364

難しすぎてどういう事か理解できないんですけれども、
その「WebBrowserにEditのテキストを送る」を応用して

WebBrowser上のある点(座標)をクリックする

といった事はできるのでしょうか?
  SendMessage(Form1.WebBrowser1.Handle, WM_LBUTTONDOWN, 0, MakeLParam(x,y));
  SendMessage(Form1.WebBrowser1.Handle, WM_LBUTTONUP, 0, MakeLParam(x,y));
とやってみてもうまくいかず・・・

(今の所は
  mouse_event(MOUSEEVENTF_ABSOLUTE+MOUSEEVENTF_MOVE,x,y,0,0);
  mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
  mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
  として間に合わせているのですが、ウィンドウが最前にある必要もあり
  また、ポインタが移動してしまうため不便です。)


便乗っすか?  2004-08-30 21:35:06  No: 1365

別スレたてたほうがいいんでないの?


超初心者+1  2004-08-31 05:13:15  No: 1366

そうします(汗


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








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