いつもお世話になっています。
色々調べてたんですけど、WebBrowserにテキストを送るのは過去ログのとかでは出来ない(?)みたいなんです。(違いますか?(^^;)
なので、「Buttonを押したら、WebBrowserのキャレットがある位置にEdit.Textを送る」のは、OnMouseMoveイベントのときにIniFileにキャレットの場所を入れて置いてOnClickイベントでその場所にEdit.textを入れようとしたんですけど、コードが上手く書けなくて、悩んでいます。どなたか教えて下さい!
以前の質問の、「WebBrowserを印刷するには?」の応用です。
下のようなコードでできます。
副作用として、Edit1の値がクリップボードに入ります。
# 以前のクリップボードの値は消えます
var
tmp:OleVariant;
begin
Clipboard.AsText := Edit1.Text;
WebBrowser1.ExecWB(OLECMDID_PASTE,
OLECMDEXECOPT_DONTPROMPTUSER ,
tmp,
tmp);
end;
もう一つ副作用。
選択状態の箇所を、Edit1の値で置き換えてしまいます。
入力欄でなくても置き換えます。
にしのさん、いつもありがとうございます!
>選択状態の箇所を、Edit1の値で置き換えてしまいます。
>入力欄でなくても置き換えます。
とは、最初に「あ」と入れて、同じ所に「か」と入れたら、
「あ」が消えて「か」だけになるという意味ですか?
ちゃんと「あか」って入ったから、違うのかなと思って。。。
あと、もしWebBrowserが選択状態になってなかったら、
メッセージボックスを出したいんですけど、if〜thenの部分を、
何て書けばいいのかわからなくて、それも教えて下さい<(_ _)>
いえ、選択状態とは、HTMLのどこか(入力欄でない部分でも)で、マウスの右ボタンを押下し(あげず)、ドラッグして、ボタンを放すことでできる「選択」です。
たとえば、名前の「にしの」から、下の「追加発言」までを「選択状態」にして、上のような処理を行うと、この発言より下、名前の入力欄の上までが、Edit1.Textで置き換わります。
選択状態かどうかを判断するには、QueryStatusWBを使って「コピーできる状態か」を調べます。
(WebBrowser1.QueryStatusWB(OLECMDID_COPY) and OLECMDF_ENABLED)<>0
がtrueなら、コピー可能=選択状態です。
そういうことでしたか〜、わかりました!出来ました(*^ー^*)
あの、もう1つ悩んでるのが、ブラウザの文字のサイズを変える機能がありますよね。それをしたいんですけど、Imageを使ってしようとしたんですけど、上手くいきません。よかったら教えて下さい<(_ _)>
すいません、出来たと思ったけど、出来てませんでした(>_<。)
elseにメッセージボックスの文を書くんですよね?
どこも選択しないで送っても、選択して送っても、elseに行きます。
WebBrowser1.QueryStatusWB(OLECMDID_COPY)だけにしたりと、色々試したんですけど、上手く出来ません。。。なぜでしょう?(^^;
フォントサイズを変える方法ですか?
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
文法を間違えていたりしませんか?
// 選択状態の時、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をつけることになるかもしれませんから。
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ばかりに行くんですけど、文法間違っていますか?
選択状態のときにも、elseにいきますか?
たぶん、選択状態という言葉の意味を間違えています。
僕は、クリップボードにコピーできる状態を、選択状態といっています。
入力できる状態ではありません。
# だから、入力欄以外でも選択状態だとTxt_tabの値で置換されます
もし、入力可能状態かを知りたいのであれば、DOMの機能が必要になります。
WebBrowserには、Documentプロパティがありますが、通常は参照できません。
# IDispatchのオブジェクトだからです
TUIWebBrowserには、TDOMLibというクラスがあり、簡単に操作ができるのですが、TDOMLibはシェアウェアです。
あぁ〜!そうでしたぁ!!すいません(−.−;
フォントサイズですが、にしのさんのは正常に動作してるんですよね?
私はDelphi6Proを使ってて、エラーは出てないですけど、ならない・・・です。
全く同じに書いてるんですけど・・・?
フォントのサイズ、これでも駄目ですか?
先ほどのリンクを見ると、WebBrowser.ExecWBの部分の解釈を、Delphiが間違うことがあるようです。
var
size, tmp: OleVariant;
web : iwebbrowser2;
begin
size := 3;
web :=browser.ControlInterface;
web.ExecWB(OLECMDID_ZOOM,
OLECMDEXECOPT_DONTPROMPTUSER,
size,
tmp);
end;
すいません、元ので出来ました!でも何度か強制終了になっちゃったんですよ〜。
でも今はもうならないので多分大丈夫・・・ですっ!
色々とどうもありがとうございました<(_ _)>
解決のチェックを忘れてました(‾▽‾;
難しすぎてどういう事か理解できないんですけれども、
その「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);
として間に合わせているのですが、ウィンドウが最前にある必要もあり
また、ポインタが移動してしまうため不便です。)
別スレたてたほうがいいんでないの?
そうします(汗
ツイート | ![]() |