WebBrowserで得たデータをDelphiで取得

解決


mizuki  2012-05-01 19:56:46  No: 42051

お世話になります。Delphi  6pでWebBrowserに地図サイトを表示させ、表示されている地図をクリックするとその位置情報がWebBrowserのINPUTBOXに表示するようにしました。現在はInputBoxのデータをコピーしてDelphiのEdit1に手動でペーストして位置データをDelphiに取り込んでいます。
このコピペ作業を自動化することができるでしょうか?  
(これが不可能であればInputBoxのデータをクリップボードに入れることはできるでしょうか?)  よろしくお願いします。


Mr.XRAY  URL  2012-05-02 08:43:41  No: 42052

こんにちは,Mr.XRAYです.

>このコピペ作業を自動化することができるでしょうか?

自動化の具体的な仕様が分かりませんが,
HTMLのタグや,その属性を解析することで,WebBrowserに表示されてるいるテキスト等
の操作はできます(DOMの操作といいます).

この掲示板にも,参考になる記事があると思います.
TWebBrowser,あるいは,WebBrowser等で検索してみてください.
それで疑問がでてきたら,ということでどうでしょうか?


Mr.XRAY  2012-05-03 06:15:34  No: 42053

>位置情報がWebBrowserのINPUTBOXに表示するようにしました。

ということは,自分でHTMLコードを書いているわけですよね.
でしたら,このINPUTBOXのタグに,id 属性を追加してください.
位置情報を表示するようにしているとのことですので,設定済みであれば,
その Id 値を使用して,INPUTBOX の値の取得や,設定が可能です.

もしかしたら,以下が参考になるかも知れません.
http://mrxray.on.coocan.jp/Delphi/plSamples/941_IEObject_InputClick.htm#07


Mr.XRAY  2012-05-03 07:38:42  No: 42054

>もしかしたら,以下が参考になるかも知れません.
>http://mrxray.on.coocan.jp/Delphi/plSamples/941_IEObject_InputClick.htm#07

ちょっと解読が面倒かも...

以下のように...

var
  Doc3 : IHtmlDocument3;
  
  
  Doc3 := IEObj.Document as IHTMLDocument3;
  //idがid_nameの場合
  //取得なら,innerTextの値を,設定ならinnerTextに値をセットする
  Doc3.getElementById ('id_name').innerText


mizuki  2012-06-08 20:34:07  No: 42055

Mr.XRAY様  いろいろとご回答をありがとうございます。  この問題を始めてからご紹介のMr.XRAY様のサイトとか海外のサンプルコードなどで試そうと試行を重ねましたがいずれも「SHCocVw, XPman, MSHTML, MSHTML_EWB, EmbeddedWB etc. などのキーワードで止まってしまい先に進めませんでした。アドバイスをいただいていながら次の疑問/質問が絞りきれずに長い時間が経ってしまったことをお詫び申し上げます。そこで具体的な質問をさせていただきますと
D6 Personal+XPで次のようなサンプルコードを動かすために何をどのように準備したら良いか?
http://theroadtodelphi.wordpress.com/2010/08/07/using-the-google-maps-api-v3-from-delphi-part-i-basic-functionality/
大変低レベルの質問で申し訳ありませんがよろしくお願いします。


TS  2012-06-08 23:18:57  No: 42056

ご指定のアドレスの実行画面の図の下の青色のlocationをクリックすると
圧縮されたDelphi2007用のソースコード及び実行プログラムがダウンロードでき
Delphi2010でそのままソースコードから実行できました。
特別なコンポーネントは使用されていない様なのでDelphi6でもそのまま
使用できるのではないでしょうか。


Mr.XRAY  2012-06-08 23:26:29  No: 42057

こんちには.

>Delphi6でもそのまま使用できるのではないでしょうか。

Delphi 6の「Personal版」ですと,少し修正が必要ですね.
といっても,Personal版特有の修正ですので,これは自分で確認するしかないですね.

>何をどのように準備したら良いか?
ということですが.
それこそ,「何をどのように」レスしたらいいのか迷ってしまいます(笑)

動作例です.
http://mrxray.on.coocan.jp/Others/GoogleMapsTest.htm


mizuki  2012-06-09 00:26:58  No: 42058

TS様、MrXRAY様  レスをありがとうございます。
私ももちろんThis LocationからDLしてテストを何回もやりました。今もまたやってみましたがその経過をちょっと書かせていただきますと。
1.WebBrowser1.Explicit.Leftの読み込み中のエラー:プロパティーが存在しません。エラーを無視して続けますか?  
2.***.Top,3。***.Width,4.***.Heightの読み込み中にエラー・・・
(これで一応ロードは完了。  実行してみると)
3.TXPManifestが見つかりません。
4.Uses欄の  SHDocVw.dcuが見つかりません。→消す
5.XPMan.dcuが見つかりません。  →消す
6.MSHTML.dcuが見つかりません。  →消す
7.IHTMLwindow2  ・・・・・・・・

このあたりでギブアップ、という状況です。
TS様のレスですとDelphi2007、Delphi2010で動くようですのでD6  Personalの問題であってD6を変えない限りどうにもならないことでしょうか?  打開策があるようでしたらよろしくお願いします。


Mr.XRAY  2012-06-09 00:56:20  No: 42059

こんにちは,(今度はは正しく)

>私ももちろんThis LocationからDLしてテストを何回もやりました。

こんなことを堂々と,逆切れしたみたいに書くものではありません.
もし,お互いに顔を突き合わせての会話であれば,

「ダメなんだけど」
「何が?」
「エラーがいっぱい出てくるんだ」
「どんなエラーが?」

という風に,現状を知ることができます.
しかし,このような掲示板ではそうは行きません.
だから,質問の際に,何をどのようにしてどうなったかを書くべきなんです.
これは当たり前というか,一般社会における常識です.
まず,このような姿勢を直すべきでしょう.

http://www.geocities.jp/kagemusyamk1/FAQ/bbs-manner.html

1.WebBrowser1.Explicit.Leftの読み込み中のエラー:プロパティーが存在しません。エラーを無視して続けますか?
    古いバージョンのDelphiのコントロールにはないプロパティを読む込み時のエラーです.
    ないのですから,仕方あません.そのままエラーを無視します.
    
2.***.Top,3。***.Width,4.***.Heightの読み込み中にエラー・・・
    上と同じ原因です.
    
3.TXPManifestが見つかりません。
    これも,Delphi 6にはありません.
    
4.Uses欄の  SHDocVw.dcuが見つかりません。→消す
    WebBrowserでウェブページを表示できていたのではありませんか?
    その時はどうしたのですか?
    Delphi Persona版にはありません.
    この掲示板を,WebBrowser Personal 等で検索してみてください.
    
5.XPMan.dcuが見つかりません。  →消す
    Delphi 7 からの機能です.どんなものかはネットで調べてください.
    
6.MSHTML.dcuが見つかりません。  →消す
    SHDocVw.dcuと同じです.Delphi Persona版にはありません.
    この掲示板を,WebBrowser Personal 等で検索してみてください.
    
7.IHTMLwindow2  ・・・・・・・
   上記のエラーがなくなれば,発生しません.
   

Personal版は,正規版と比べて機能のが非常に限られています.特別なんです.
正規版と同じだったら,正規版なんか使いません!!
ですから,検索語句に,Personalを付けて検索しないと,有効な情報は得られません.
そのぐらいのことも思いつく必要があります.

# mizukiさんがどんな方か,一度お会いしたいものです.


Mr.XRAY  2012-06-09 01:00:21  No: 42060

>6.MSHTML.dcuが見つかりません。  →消す
>    SHDocVw.dcuと同じです.Delphi Persona版にはありません.
>    この掲示板を,WebBrowser Personal 等で検索してみてください.

もちろん,MSHTMLも付けてね.


Mr.XRAY  2012-06-09 01:10:58  No: 42061

>この掲示板を,WebBrowser Personal 等で検索してみてください.

私自身,検索して有効な情報があることを確認しています.
もし,検索して,その結果が理解できなければ,質問されてみてはてかがでしょうか.


Mr.XRAY  2012-06-09 01:14:19  No: 42062

Google等の検索エンジンでは,
複数の語句,単語を空白で区切って,検索の入力欄に入力して検索できます.
この空白は,全角でも半角でも構いません.


mizuki  2012-06-09 02:24:51  No: 42063

>こんなことを堂々と,逆切れしたみたいに書くものではありません.

これは失礼しました。  そんなつもりは全くありませんでした。マナー違反のご指摘を受けて大変ショック受け、また申し訳なく思っております。  今まで同じようなキーワードで何度も何度も検索/テストを繰り返してもどれも動かない状態の繰り返しを表現しようとしたものと思いますが失礼しました。

Personal版の機能について何がどのように限られているのか、なども知りませんので質問させていただいたものですが、各種の機能がDelphi6 Persona版にはないということが動かない原因の一部であるというのが分かったことが大きな収穫でした。それがわからずに動かないともがいていたわけですから。

とりあえずここでは皆様に不快な思いをさせてしまったことをお詫びします。


  2012-06-09 17:16:36  No: 42064

私は逆切れのようなレスとは感じませんでした。
ただ、文字だけでやりとりをするので、書く方も読む方もある程度慎重な対応は
必要だと思います。ここにはお世話になってるので、利用者同士、穏やかにやれるとよいなと思います。

ところで、さっきのやつ、Delphi 6 Personalでコンパイルできました。
ユニット名等で検索すればすぐ出てきたのではないかと思いますが、その辺は
調べましたか?XRay氏も個別に解説してくださっているかと思うのですが。

それと、Xray様。1点お聞かせください。
当方の環境で、試しに上のレスの通り修正を加えてみたのですが、そのまま
だとコンパイルができないのでは?という気がします。

こちらでは、Delphi 6 Personalも使っていますが、

・アクティブXの取り込み
・不要なプロパティを無視
・不要なユニットを削除
・ユニット名を修正

ではうまくいきませんでした。そちらの環境ではコンパイルできたのですか?
参考として、可否だけでもお教えいただけないでしょうか。(当方はあんまりこの辺は
詳しいほうではないので、当方の間違いの可能性もあると思いますので。)
(当方のOS:Win7 Pro 64bit)


  2012-06-09 17:23:44  No: 42065

大変しつれいしました。>Xray氏

よくみたら、あなたが修正方法を提示していたわけではないのですね。
(よく見たら単なる引用でした。)
上のレスは無視していただきますようお願いします。


TS  2012-06-09 19:43:28  No: 42066

あさんへ
>ではうまくいきませんでした。そちらの環境ではコンパイルできたのですか?
話の流れでmizukiさんは後何が問題なのか聞き難いでしょうね。

mizuki さんへ
回答者も自分の発言に対しての回答を待っています。
Mr.XRAYさんが示されて検索はどうですか。
[Microsoft HTML Object Library (Version4.0)]のインストールは
お済みですか、ここの掲示板で,「WebBrowser Personal」 で検索すると
https://www.petitmonte.com/bbs/answers?question_id=3405
が一番上位にきます。


mizuki  2012-06-09 20:17:29  No: 42067

あ様  情報をありがとうございます。

>ところで、さっきのやつ、Delphi 6 Personalでコンパイルできました。
これでDelphi 6 Personalを続ける希望が持てます。追求していけばいつかはこの問題も解決するものと。

この問題は私にとってはまだ完全に解決しておりませんがここで第一関門解決ということで一区切りとし今後完全解決に向けて努力していきたいと思います。皆様ありがとうございました。


Mr.XRAY  2012-06-09 22:08:13  No: 42068

こんにちは,Mr.XRAYです.
大変失礼しました.私もショックです(笑)

>私ももちろん...テストを何回もやりました

に過剰反応してしまいまた.「私ももちろん」そんなこととっくにやっていますよ.とか
「もちんろん,そんなこと知っていますよ」
と,勝手に連想してしまいました.スミマセンでした.

言い分けになりますが,それだけ真剣に,質問された方に,何とか動作するように
願っているものとものと思ってください.
その証拠に,解決方法のヒントも書いたのです.

先の対処方法も,もう少し詳しく書いてもよかったのですが,
こちらも,状況がよく把握できていません.
最初の,2012/05/01(火)の時点では,

>WebBrowserのINPUTBOXに表示するようにしました。

とあるので,タイプライブラリの取り込みで,SHDocVw_TLB,pasとMSHTML_TLB.pasが作成できて
いるものと思ったのですが...

MSHTML_TLB.pasを作成する方法は,TSさんのレスのリンクの通りです.
この掲示板を検索したら,SHDocVw_TLBのは,適当なのが見つからなかったので,
今作成しました(ネット全体ではあります).

http://mrxray.on.coocan.jp/Others/D6_TWebBrowser.htm

>いつかはこの問題も解決するものと

是非,このスレッドで解決してください.


Mr.XRAY  2012-06-10 04:18:01  No: 42069

質問された方からの反応を待つつもりでしたが...
参考までに,Delphi 6で動作させるための修正というか,手順の追加です.
「もちろん」,ないものは無視しますが,もうひとつ,Delphi 2007から追加となった
機能があります.これも削除する必要があります.

それは,プロジェクトファイル(拡張子は .dpr) の以下の部分です.

program GoogleMapsTest;

uses
  Forms,
  fMain in 'fMain.pas' {frmMain};

{$R *.res}

begin
  Application.Initialize;
//  Application.MainFormOnTaskbar := True;     //削除
  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;
end.

くどいようてずが,Delphi Personal版では以下のようなファイルを
[ActiveXコントロールの取り込み] あるいは 取り込み] で作成して使用します.

  Pro版以上の SHDocVw,pas に相当する SHDocVw_TLB,pas
  Pro版以上の MSHTML.pasに相当する MSHTML_TLB.pas
  
動作確認は,Windows XP(SP3) + Delphi 6 Personal(UP2) + SHDocVw_TLB,pas +  MSHTML_TLB.pas
            Windows XP(SP3) + Delphi 6, 7, 2007, 2009, 2010, XE (全て Pro版)
      Windows 7 U64(SP1) + Delphi 6, 7, 2007, 20010, XE (全て Pro版)
以上です.


Mr.XRAY  2012-06-10 04:22:45  No: 42070

>   Windows XP(SP3) + Delphi 6, 7, 2007, 2009, 2010, XE (全て Pro版)
>   Windows 7 U64(SP1) + Delphi 6, 7, 2007, 20010, XE (全て Pro版)

なお,これらの動作確認は,IDE上からのものではありません.
以下のコマンドコンパイラで作成した EXE を実行して確認したものです.
あしからず.

[000_コマンドラインコンパイラの実行]
http://mrxray.on.coocan.jp/Delphi/plSamples/000_CommandLineCompile.htm


Mr.XRAY  2012-06-10 04:28:56  No: 42071

失礼,文字が欠けてしまいました.

>[ActiveXコントロールの取り込み] あるいは 取り込み] で作成して使用します.

[ActiveXコントロールの取り込み] あるいは[タイプライブラリの取り込み] で作成して使用します.


mizuki  2012-06-11 20:51:54  No: 42072

(完全解決)  課題であったソースコードが通りました。これで全て解決です。  ありがとうございました。

ご参考になるかわかりませんがここにその経過を書かせていただきます。
当初はいくつものウオーニングとエラーの塊でこれ等を全て解決できるのはいつの日やらと半ば期待できないでやっていましたが思わぬところで問題が氷解しました。

TS様の情報、およびMrXRAY様の新しいサイトを参考にさせていただきUses節にあるSHDocVwについてはActive-Xの取り込みで、MSHTMLはタイプライブラリの取り込み/インストールをしてみました。

しかし実行してみるとやはり同じところで止まりました。いろいろ調べてみるとUses節にあるSHDocVwやMSHTMLは取り込み/インストールをしてもSHDocVw.dcuなどは作られないようです。  作られるのはSHDocVw-TLB.dcuなどのようです。Uses節からこれらを消してSHDocVw-TLB,  MSHTML-TLBと書き換えるようにすべきと書いてあるサイト
http://www.cryer.co.uk/brian/delphi/error_fnfSHDocVw.htm
を見つけてそれを実行したところたくさん出ていたウオーニングも全て消えて問題なく動くようになりました。(その他止まってしまった箇所、例えば Application.MainFormOnTaskbar := True;  などはMrXRAY様のアドバイスに従って「削除」、その他「無視」で進めました。)  

これが動いた結果DelphiとHTMLとのやりとりをテストしながら進められるので面白いこともできそうです。以上、こんな基本的なことが分からないがために皆様にご迷惑をおかけしていたものと思います。Delphiの種類やグレードによる差異など今まで知らずにきましたが今回このような事態に直面してその差異が若干分かった気がします。MrXRAY様のサイトにあるようですので勉強させていただきます。  今後ともよろしくお願いいたします。皆様ありがとうございました。


Mr.XRAY  2012-06-12 00:46:40  No: 42073

追記しておきますか.

>くどいようてずが,Delphi Personal版では以下のようなファイルを
>[ActiveXコントロールの取り込み] あるいは[タイプライブラリの取り込み] で作成して使用します.

>  Pro版以上の SHDocVw,pas に相当する SHDocVw_TLB,pas
>  Pro版以上の MSHTML.pasに相当する MSHTML_TLB.pas

つまり,こういうことになります.
もし,他の方の作成した,WebBrowserを使用しているサンプルコードのuses部に,

uses
  Windows, ... 略 .., , SHDocVw, ... 略;
  
と,SHDocVwがあったら,これを,SHDocVw_TLBに置き換えます.
置き換えるというのは,SHDocVwは使わないので,削除して,そのかわりに,SHDocVw_TLB
を追加するということです.
MSHTMLも同じです.  

Delphi 6 Personal版には,SHDocVw,pasとMSHTML.pasというファイルはないので,
uses部にあると,それらのファイルが存在しないので,エラーになります.
uses部のSHDocVwというのは,SHDocVw,pasというファイルに書いてあるコードを使用する,
useするということです.

uses部は,多くの場合,拡張子が.pasのファイルの先頭の方にあります.
多くの場合です.違う場所に書いてあることもあります.

この方法は,Personal版に限ったことではありません.
デフォルトの状態のDelphiにない機能を,ある機能をもった.pasファイルを使用する
場合にも使います.
コンポーネントパレットのコンポーネントを,フォームに配置した時は,自動で,uses部に
必要な.pasファイルの名前が追加されます(やってみれば分かりますが,念のため).


Mr.XRAY  2012-06-12 00:48:50  No: 42074

>Delphiの種類やグレードによる差異など

今回は,SHDocVwの話しでしたが,これは,Delphi 6 Personal版に限った話ではありません.
Delphiはバージョンが上がるたびに,新規に.pasファイルが追加されています.
つまり,機能が追加されています.

また,同じ名前の.pasファイル内でも機能が追加されている場合があります.
更に,AAAA.pasというファイルにあった機能(メソッドやクラス)が,BBB.pasというファイルに
移動していることもあります.


Mr.XRAY  2012-06-12 00:56:16  No: 42075

>Delphiはバージョンが上がるたびに,新規に.pasファイルが追加されています.
>つまり,機能が追加されています.
                
今回は,SHDocVwの話しでしたが,例えば,私のサイトに
[678_他のアプリの操作と IAccessible インターフェイス]
http://mrxray.on.coocan.jp/Delphi/plSamples/678_IAccessibleInterface.htm

というのがあります,これは,Delphi 2007以降専用となっていますが,
実際には,今回のように,Delphi 2007よりも前のバージョンでも,
タイプライブラリの取り込みをすれば,使用できます.


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

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






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