ウェブブラウザで【自分】をキャプチャ

投稿者: 投稿日:2018/11/25(Sun) 11:45:24 No.2298

「ウェブブラウザ」の「【自分】をキャプチャする」を動かすことができません。
「ウェブブラウザ」での表示を画像ファイルに保存するサンプルコードがあれば教えてください。
もしくは、以下のコードの不備について、修正点をご教示ください。
--------------
ユーアールエルは、「http://www.yahoo.co.jp/
保存ファイルは、「c:\tmp\capt.png」
窓というウィンドウを作る
  その大きさを{1280, 600}に変える
窓にブラウザ1というウェブブラウザを作る
  そのドッキング方向を全体に変える
  そのアドレスをユーアールエルに変える
窓を表示する
ブラウザ1をキャプチャして保存ファイルへ保存する
待機する
--------------

発生するエラーは以下の通りです。
--------------
『ブラウザ1をキャプチャして』という部分で
プログラムの実行中にエラーが発生しました。
文法に間違えがないか、指定した値が正しいか、確認してください。

文法や使い方が正しいにもかかわらず、このエラーが表示される場合は、不具合の可能性があります。

発生した例外:
System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。
場所 System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
場所 System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
場所 System.Windows.Forms.Control.Invoke(Delegate method)
場所 Produire.ScriptEngine.132(22 0)
場所 Produire.TypeModel.外部手順定義.2(PTypePlugin 0, IProduireClass 1, Object[] 2, 0 3)
場所 Produire.TypeModel.PTypePlugin.10(IProduireValue 0, ICallSite 1, 16 2)
場所 Produire.Model.StaticCallExpression.Invoke(IPrototypeExpression protoExpr, 0 scope)
場所 Produire.ScriptEngine.110(IPhrase 0, IProduireValue& 1, 0 2)
[エラー番号901] [はじめ:9行目]
--------------

◆動作環境情報◆
プロデル 1.6.935
Windows 10(64)
メモリ:3.68 GB

よろしくお願いいたします。

Re: ウェブブラウザで【自分】をキャプチャ

投稿者:通りすがり 投稿日:2018/11/26(Mon) 21:12:57 No.2299

ウィンドウに配置した部品は、あとから非同期で作成されてゆくため、キャプチャ命令が実行されるタイミングでは、まだ、出来上がっていないのが原因です。実行時にブラウザ1に中身が無いということで、
> System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。
のエラーになっています(「作る」すらもまだ実行されてない ということ)

また、仮に、命令順通りに、ブラウザ1が作成が済んでいたとしても、表示する内容(コンテンツ)を、指定されたURLから読み込んで、表示(レンダリング)するには、時間がかかります。即座にキャプチャしても真っ白です。キャプチャを取りたいタイミングのイベントを利用して、タイミングを合わせてみてください。
(タイマーを使用した場合、PCの負荷状況やネットワークの負荷状況によって、真っ白だったり、途中だったり、逆に無駄に待つことになったりする可能性があります)

まずは、ブラウザ1からキャプチャする命令を、タイマーで遅らせるか、ブラウザ1のイベントを利用して、キャプチャしたい内容が描かれるまで、遅らせてみてください。
(イベントに慣れていない場合は、まずはタイマーで試してみるとよいかと思います。)

Re^2: ウェブブラウザで【自分】をキャプチャ

投稿者: 投稿日:2018/11/26(Mon) 21:53:17 No.2300

> (イベントに慣れていない場合は、まずはタイマーで試してみるとよいかと思います。)

ありがとうございます。
以下の通りイベントを作ってみたところ、エラーにならずに画像を保存できました。
--------------
ユーアールエルは、「http://www.yahoo.co.jp/
保存ファイルは、「c:\tmp\capt.png」
窓というウィンドウを作る
  その大きさを{1280, 600}に変える
窓にブラウザ1というウェブブラウザを作る
  そのドッキング方向を全体に変える
  そのアドレスをユーアールエルに変える
  そのページが読み込まれた時の手順は、画像を保存する
窓を表示する
待機する

画像を保存する手順
  ブラウザ1をキャプチャして保存ファイルへ保存する
終わり

Re^3: ウェブブラウザで【自分】をキャプチャ

投稿者: 投稿日:2018/11/27(Tue) 06:49:06 No.2301

ふと思ったのですが、この2行は逆にすべきですね。

>   そのアドレスをユーアールエルに変える
>   そのページが読み込まれた時の手順は、画像を保存する

「そのアドレスをユーアールエルに変える」が「そのページが読み込まれた時の手順は、」が実行される前に終わってしまうと「画像を保存する」が実行されないということになりそうですね。

▲ページの先頭へ

- WebForum -