DOBON.NET DOBON.NETプログラミング掲示板過去ログ

フォームのイメージをクリップボードへ

環境/言語:[windows XP VB.net]
分類:[.NET]

vb.netはデバッグがしにくいですよね。そこで、停止前にその状態のフォームのイメージをクリップボードに保存できないかと思っています。
alt+printscreen キーでいいのですが、うまくいきません。
教えてくださいませ。
> vb.netはデバッグがしにくいですよね。

どんな点でデバッグがしにくいでしょうか?
私は特にデバッガで不便と思ったことがないので、
どんなところを不便に感じてらっしゃるのか予想できません。

> そこで、停止前にその状態のフォームのイメージをクリップボードに保存できないかと思っています。
> alt+printscreen キーでいいのですが、うまくいきません。
> 教えてくださいませ。

普通にAlt+PrintScreenキー押下でうまくいかないという場面がわからないのですが、
どううまくいかないのでしょうか?
特殊なアプリでなければ特に困らないと思うのですが・・・。
キー操作をせずにキャプチャしたいとか、あるいは時間差でキャプチャしたいなどの
理由から来るものであれば、オンラインのソフトでそういうキャプチャソフトを入手するのが簡単でよいと思います。
私はCaptureXPというのをよく使っています。(Vectorなどにあります)
■No10712に返信(セリカさんの記事)
> vb.netはデバッグがしにくいですよね。
どこがでしょうか?
C#もVB.NETもデバッグ性能に大差は無いと思いますが...
とりあえず、
 .NETテクニックの条件付きブレークポイントの作り方
 http://pegalabo.net/developer/technote01.html
が参考になりませんか?

>そこで、停止前にその状態のフォームのイメージをクリップボードに保存できないかと思っています。
> alt+printscreen キーでいいのですが、うまくいきません。
> 教えてくださいませ。
ダイアログをターゲットにしたキャプチャーは、
よねKENさんもおっしゃられているように、
Alt+PrintScreenで問題無いと思いますが...
どうしても操作しにくいのであれば、市販のツールで、Microsoft Office OneNote なんかどうですか?画面領域を指定したキャプチャーができます。(ちょい宣伝...笑)
すみません、書き方がまずかったですね。
えーっと、まずデバッグの比較対照はVB6です。あちらはインタプリタなので、
どこでブレークポイントを設定して停止しても、そのときの実行画面を見ることが
出来ます。一方、VB.NETは、コンパイルしているせいで、停止中は実行画面を見ようとしても、
真っ白です。実行画面クリック時の再描画コマンドも停止しているためです。
そこで、ブレイクポイント前に自動で画面をキャプチャして、ブレイク直前の
画面がどうなっていたか知りたいのです。もっとも、コントロールのテキストに値を
設定しても、再描画命令を出さないと描画はしませんから、キャプチャでもだめかもしれませんが。
イメージボックスの絵をクリップボードへコピーする方法は見つかりましたが、
フォームのイメージを送る方法が分からないのです。
2005/05/12(Thu) 02:03:52 編集(投稿者)

> えーっと、まずデバッグの比較対照はVB6です。あちらはインタプリタなので、
> どこでブレークポイントを設定して停止しても、そのときの実行画面を見ることが
> 出来ます。一方、VB.NETは、コンパイルしているせいで、停止中は実行画面を見ようとしても、
> 真っ白です。実行画面クリック時の再描画コマンドも停止しているためです。

確かにあれは不便ですね。

> そこで、ブレイクポイント前に自動で画面をキャプチャして、ブレイク直前の
> 画面がどうなっていたか知りたいのです。もっとも、コントロールのテキストに値を
> 設定しても、再描画命令を出さないと描画はしませんから、キャプチャでもだめかもしれませんが。

逆の発想で、ブレークするのではなく、
Debug.WriteLineで必要なタイミングでの変数の値などをコンソールに書き出してはいかが?
私はVB6以前もTimerを使ったプログラムなどではステップ実行できないので、
よくDebug.Printで後からデータの内容を確認していました。

> イメージボックスの絵をクリップボードへコピーする方法は見つかりましたが、
> フォームのイメージを送る方法が分からないのです。

API関数のkeybd_event関数を使ってAlt+PrintScreenをシミュレートするか、
同じくAPI関数のGetWindowDC、BitBlt関数を使ってキャプチャする方法もありますね。
BitBlt関数の使い方を調べてみます。
ありがとうございました。
申し訳ないのですが、VB.NETだけを否定するような表現はやめてもらえませんでしょうか?
前(10722)にも述べましたが、C#もVB.NETもデバッグ機能に大差はありません。
確かに、.NETのデバッグ機能はVB6よりも使い勝手が変わっているのは事実ですが、デバッグができるだけでもありがたいと思うのですがねぇ...

#VB6以前はインタプリタ型の言語だと云うのをお忘れなく。
こんにちは、じゃんぬ です。

■No10759に返信(ぺがらぼさんの記事)
> 申し訳ないのですが、VB.NETだけを否定するような表現はやめてもらえませんでしょうか?

まあまあ (^^)

> 前(10722)にも述べましたが、C#もVB.NETもデバッグ機能に大差はありません。
> 確かに、.NETのデバッグ機能はVB6よりも使い勝手が変わっているのは事実ですが、
> デバッグができるだけでもありがたいと思うのですがねぇ...

まあ、組込制御とかベタ C から移行すると、感動で...

> #VB6以前はインタプリタ型の言語だと云うのをお忘れなく。

「デバッグ時は」を付け足しておかないと、誤解を受けるかもですよ。(^^)

# VS2005 からは エディット コンティニュが加わるそうで、楽しみですね。
ぺがらぼさん、こんばんは。よねKENです。

> 申し訳ないのですが、VB.NETだけを否定するような表現はやめてもらえませんでしょうか?
> 前(10722)にも述べましたが、C#もVB.NETもデバッグ機能に大差はありません。

差し出がましいようですが、過剰な反応ではないでしょうか?
セリカさんはC#のことなど一言も発言されてませんし、
VB6経験者でVB.netをやってみて、デバッグが(VB6よりも)しづらいなぁと
感じられているだけかと思います。
(特にデバッガでステップ実行した際に、途中の時点の画面が見られないところについて)

ちなみに私自身があまり不便と思わないのは、経験的に段違いに不便な環境も
経験してきているから、という側面はあると思います。
以上、余談でした。
以前 No10667 で注意させていただいたのと似たような状況となっていますが、今回は一応プログラミングに関する話ですので、ダメとは言いません。しかしこのような話は皆さん思い入れのある分、間違いなく長くなりますし、感情的になりやすくなるため、私としてはできれば「お気楽掲示板」を利用していただきたいと思います。(あるいは、新しいスレッドを作ってもいいかもしれません。)
なんだか、お騒がせしてすみません。よねKENさんの言われるとおり、
他と比較しているわけでは有りません。N88BASICとなら、比較していますが。
VB6はそれだけデバッグしやすい環境だったということですね。
私としては、MSに勝手にインタプリタをやめるな、、と言いたいです。
本題に戻って、すみませんが、BITBLTがうまく使いこなせません。
hdcとか、よく分からないもので。
サンプルコードを教えていただけると助かります。
ようは、フォームイメージをクリップボードに送る、、、という仕様です。
ちなみにキー送信では、実行後1回目はいいのですが、一度ソース画面になると、
ソース画面をキャプチャしてしまうので、よくなかったです。
> 本題に戻って、すみませんが、BITBLTがうまく使いこなせません。

 こちらの Tips が参考になるかと。

フォームのイメージを印刷するには?
http://dobon.net/vb/dotnet/vb6/printform.html

DOBON.NET | プログラミング道 | プログラミング掲示板