TWebBrowser上のマウスカーソル位置の一単語を取得するには?

解決


オン赤  2002-05-17 21:18:25  No: 885  IP: [192.*.*.*]

TForm1.Button1Clickで、TWebBrowser上のマウスカーソル位置の一単語を取得し、それをクリップボードにコピーするということをやりたいのですが、たぶんWinAPIが必要なのでしょうけれど、よく分かりません。TRichEdit上でのこのような手続と比べてずいぶん難しそうですが。どなたか、お知恵を貸してください。(Windows98, Delphi 6)

編集 削除
tora  2002-05-17 21:47:39  No: 886  IP: [192.*.*.*]

???なんでボタンをクリックしているのに
TWebBrowserの上にマウスカーソルがのってるんでしょう???

編集 削除
オン赤  2002-05-17 22:54:46  No: 887  IP: [192.*.*.*]

あっそうですね。正しくは、TWebBrowser上でクリックした単語を取得し、それをクリップボードにコピーしたい、でした。

編集 削除
たかみちえ  URL  2002-05-17 23:40:07  No: 888  IP: [192.*.*.*]

うちにはTWebBrowserはないので(IEはあるので、インポートはできるのかな?)、
よく分からないんですけど、
普通どのコントロール…、じゃなかったコンポーネントでも、
Ctrl+Cを送ればコピーできます。

  だから、たぶんTWebBrowserにCtrl+Cを送れば。
keybd_eventのAPIでできます。

編集 削除
にしの  2002-05-18 11:44:52  No: 889  IP: [192.*.*.*]

標準のWebBrowserですか?
これは、結構癖があるので(フォーカス関連やキー入力関連)、UIWebBrowserを使用することをおすすめします。
Delphian World
http://home1.infonia.ne.jp/~delphian/delphi/
にあります。

本題ですが、TWebBrowserにWM_COPYを送ったり、keybd_eventを送っても無理だと思います。TWebBrowserにはハンドルがありますが、その中に見えないハンドルがあって、そこでキー入力を管轄しているらしいです。

TWebBrowser上でクリックした単語というのが、「範囲選択した単語」であれば、次のようにすれば取得できます。

WebBrowser1.ExecWB(OLECMDID_COPY , OLECMDEXECOPT_DODEFAULT)

このWebBrowser1が貼ってあるFormのinitialization句と、finalization句に、次のような処理を加えてください。

initialization
  OleInitialize(nil);
finalization
  OleUninitialize;


OleInitialize、OleUninstializeは、ActiveXの中にあります。
uses節にも、ActiveXを加えてください。

編集 削除
オン赤  2002-05-18 18:01:55  No: 890  IP: [192.*.*.*]

にしの様、またお世話になります。
クリックされた単語を一個、プログラムで読み取らせ、クリップボードへ送る、という手続を望んでいるのですが、ご理解いただけますでしょうか?(日本語がいつもつなたなくて・・)
>TWebBrowser上でクリックした単語というのが、「範囲選択した単語」であれ>
ば、次のようにすれば取得できます。
>WebBrowser1.ExecWB(OLECMDID_COPY , OLECMDEXECOPT_DODEFAULT)
すみませんが、このコードを書く場所はどこなのでしょうか?WebBrowserのイヴェントの一つとして書くのですか?
ExecWBというのは戻り値のあるfunctionか何かでしょうか?済みませんが、超初心者ですので、もう一段程度を落としてご説明いただけませんでしょうか?

>このWebBrowser1が貼ってあるFormのinitialization句と、finalization句に、次のような処理を加えてください。
>initialization
>  OleInitialize(nil);
>finalization
>  OleUninitialize;
これも、Form1は分かりますが、initialization句、とか、finalizaion句という句とは?初めて接する言葉で分かりません。これももう一団程度を落としていただけませんでしょうか?^^;

編集 削除
にしの  2002-05-18 22:27:28  No: 891  IP: [192.*.*.*]

> クリックされた単語を一個、プログラムで読み取らせ、クリップボードへ送る、という手続を望んでいるのですが、ご理解いただけますでしょうか?

別の言葉で説明してもらわないと、同じ文章では理解できません。
# 正確には、複数の読みとりができます

この意味は次のうちどれでしょう。
・単語が選択し、その位置を(何らかのイベント、ボタンを押すなどのとき)読みとる
・文字通りクリック位置にある文字列を、OCR技術のように文字として認識させる
・クリックした位置にあるWebBrowser全体から、GetWindowTextのように文字列を取得

上の一文では、どれも当てはまりそうです。
もう少し、プログラム的にどう処理したいのか、分割してみてはどうですか。

> >WebBrowser1.ExecWB(OLECMDID_COPY , OLECMDEXECOPT_DODEFAULT)
> すみませんが、このコードを書く場所はどこなのでしょうか?

このコードが実行されると、選択された文字列がクリップボードにコピーされます。

> WebBrowserのイヴェントの一つとして書くのですか?

取得したいタイミングで実行させてください。

> ExecWBというのは戻り値のあるfunctionか何かでしょうか?
戻り値があろうが無かろうが、クリップボードにコピーするときには関係ない気がしますが。
コピーされた文字列は、Clipboardオブジェクトから取得してください。
ヘルプで、Clipboardを引けばわかるはずです。

これも、Form1は分かりますが、initialization句、とか、finalizaion句という句とは?初めて接する言葉で分かりません。これももう一団程度を落としていただけませんでしょうか?^^;

簡単に説明するならば、initializationは、Unitが読み込まれた時、初期化するために呼び出される部分です。finalizationは、unitが不要になったとき、終了処理をするために呼び出される部分です。
詳細はヘルプをご覧ください。

編集 削除
チャトラ  2002-05-19 04:07:37  No: 892  IP: [192.*.*.*]

まったく人に教えられる技量はありませんが、たまには役に立ちたいので。

>  initialization句、とか、finalizaion句という句とは?初めて接する言葉で分かりません。これももう一団程度を落としていただけませんでしょうか?^^;

たしか基本構成はこうだったような?
unit名

interface部

implementation部

initialization部(実行時に自動的に初期化)

finalization部(実行時に自動的に終了処理)

end.
initialization部とfinalization部は自動的には記述されません。
(っと書いてありました(^_^;))

編集 削除
オン赤  2002-05-22 07:16:12  No: 893  IP: [192.*.*.*]

みなさん、ありがとうございました。できました。
unit の基本構成のことですが、滅多に使わないようなオプションだったのですね。私にとって初めての経験で、ヘルプを読んでもなかなか理解できませんでした。
>UIWebBrowserを使用することをおすすめします。
>Delphian World
>http://home1.infonia.ne.jp/~delphian/delphi/
を覗いてみたのですが、難しそうなのであきらめました。
とにかく、おかげさまで、インターネットを使うプログラミングに私のようなものでも一歩前進できました。次は「お気に入り」を自分でもつくってみようと挑戦を始めました。

編集 削除
オン赤  2002-05-22 07:16:42  No: 894  IP: [192.*.*.*]

みなさん、ありがとうございました。できました。
unit の基本構成のことですが、滅多に使わないようなオプションだったのですね。私にとって初めての経験で、ヘルプを読んでもなかなか理解できませんでした。
>UIWebBrowserを使用することをおすすめします。
>Delphian World
>http://home1.infonia.ne.jp/~delphian/delphi/
を覗いてみたのですが、難しそうなのであきらめました。
とにかく、おかげさまで、インターネットを使うプログラミングに私のようなものでも一歩前進できました。次は「お気に入り」を自分でもつくってみようと挑戦を始めました。

編集 削除