• ベストアンサー

ピクチャーボックスのサイズを変えたら表示されてるのまでいっしょに大きさを変えたい

ARCの回答

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

>作ってるプログラムに会うように変更を加えたいので 詳しく解説も入れていただけるとありがたいです 了解しました。 まず概要ですが、描画用のピクチャボックスと表示用のピクチャボックスを作り、ピクチャボックスに対する描画などは描画用ピクチャボックスに行い、適当なタイミングで表示用ピクチャボックスに拡大縮小しつつ転送しようって言うのが趣旨です。「適当なタイミング」については後述します。 この操作のキモである「拡大縮小しつつ転送」を実現する方法には、#1でTAGOSAKU7さんが書いておられるPaintPictureステートメントを使う方法と、私が採用したStretchBLTを使う方法とが考えられます。 VBの標準ステートメントであるPaintPictureを使っても良かったんですが、個人的な趣味と、QNo.168025での回答との整合性も考えまして、Windowsの機能であるStretchBLTを使うことにしました。 さて、先ほど記述した「適当なタイミング」ですが、 今回の場合ですと、「A:描画用ピクチャボックスに描画等の処理を加えた直後」「B:表示用ピクチャボックスのサイズ変更を行った直後」「C:Windowsから再描画を要求されたとき」 の3つを押さえておけばいいです。 具体的には、 A: Picture2.Psetなどを使って一通りの描画プログラムを記述した後、その次の行に Call StretchBlt(Me.Picture1.hdc,… と書く。 B: Picture1.Width = 640 ってな感じで表示用のピクチャボックスのサイズを変更した次の行に、 Call StretchBlt(Me.Picture1.hdc,… って書く。 C: 表示用のピクチャボックスのAutoRedrawプロパティをTrueに設定している場合には、特に何もしなくても良い。 (VBが勝手に再描画してくれる。) 以下、ソースコードの解説です。 (General)(Declarations) のDeclare~で、VBからStretchBLTを呼び出す為に必要な宣言を書いています。 Decrare~を使うと、外部のDLLとかに含まれる機能を呼び出すことが出来るようになります。 今回の「Declare Function StretchBlt…」については、VB付属のWin32API.txtというファイルからの(ほぼ)丸写しですね。代表的なWindowsの機能は「Win32API.TXT」に記述してありますし、VBのアドイン機能である「VB API Viewer」を使えば、名称などから必要な宣言分を検索することが出来ます。 Form_Resize()イベントプロシージャは、ピクチャボックスの大きさを変更したときのサンプルですね。 Me.Picture1.Left = 0 Me.Picture1.Top = 0 Me.Picture1.Width = Me.Width Me.Picture1.Height = Me.Height で、試しに表示用ピクチャボックスの大きさを変更しています。 その次の Call StretchBlt… の行で、描画用ピクチャボックスから表示用ピクチャボックスに、画像を転送しています。 StretchBLTは、以下のように引数を指定します。 Call StretchBLT(複写先のオブジェクトのhDCプロパティ, 複写先のX座標, Y座標, 幅, 高さ, 複写元オブジェクトのhDCプロパティ, 複写元のX座標, Y座標, 幅, 高さ, 転送モード) 引数中のX座標、Y座標、幅、高さについては、ピクセル単位で値を指定することになっていますので、 各ピクチャボックスのScaleModeプロパティを、「3-ピクセル」に設定したわけです。 こんな感じで分かりますでしょうか。できるだけ分かりやすく書いたつもりですが、まだまだ専門用語が多いかも… 分かりにくい点とかがあれば、遠慮なくご質問ください。

ryuta_mo
質問者

お礼

わざわざ何回もありがとうございます だいたいわかりましたがひとつだけわからないとこがあります hDCプロパティって何ですか? 何度もすみません

関連するQ&A

  • ピクチャボックスのサイズを状況に応じて変えたい。

    度々お世話になります。 今、ピクチャボックスに描画を行い、別のピクチャボックス上のイメージに表示しています。 描画を行う範囲はその都度異なり、それに対応するためにピクチャボックスは可能な限り大きくしてあります。ところが、イメージに表示させる段階で、描画していない部分まで表示するため、見た目が悪く、使い勝手も悪いのです。そこで、作図範囲のみを表示させたいと考えています。 やはり、ピクチャボックスのサイズをどうにかするのが先決かと思いまして質問させていただきました。できれば、作図範囲に合った大きさになるようにその都度変化させたいと思うのですが、そういった方法はありますか? あるいは、作図範囲のみをイメージに表示する方法があればそれでも結構です。 何か良い方法があれば、御教示いただけると幸いです。 開発環境はWindows2000、VB6.0です。 宜しくお願いします。

  • ピクチャボックス

    ピクチャボックスに、指定した絵を並べて表示する事は出来ますか? 使った人が選んだ絵がピクチャボックスより大きかったらそのままで、小さかったらピクチャボックスの中に並べて表示したいんです。

  • ピクチャーボックスのサイズを設定する方法を教えて

    VB.NETですでに表示済みのピクチャーボックスの サイズを変更したいのですが、どのように記述すれば良いでしょうか。 基本的なことで申し訳ありませんが、教えて頂けたら助かります。 表示済みの画像は反映されなくてかいません。 単に枠のサイズを変更したいです。

  • VB.NETでピクチャーボックス2個のサイズを変えたい

    VB.NET2003です。 ホーム上に二つのピクチャーボックスを配置し、ペンやブラシで直線や文字を描きます。 二個のピクチャーボックスを上下に配置し、その境界線上にマウスをもってゆき、上下のBOXサイズの比率を変えたいのですが、可能でしょうか?

  • Picture box の サイズを変更

    お世話になります。 VB6 でform1 上に Picture1 を貼付け ボタンを押すとPicture Boxのサイズを変更したいのですが 上手くサイズが変更されません。何か根本的な間違いでしょうか よろしくお願いします。 例: Yoko = 600 Tate = 480 Private Sub Command1_Click() With Picture1 .ScaleMode = 3 ' .Width = Yoko .Height = Tate End With End Sub

  • ピクチャボックス

    ピクチャボックスを最初に貼り付けて、その内側にラベルとテキストボックスを貼り付けたいのですがしてみた所内側に表示されません・・・。 どのようにしたら表示されるようになるんでしょうか? 初心者な質問ですいません。

  • アイコンをピクチャーボックスに表示したい・・

    かなり難しいとは思っていますが アイコンをBMP形式でリソースに取り込んであります。 ピクチャーボックスに表示させるには、どうすればいいでしょうか・・・ できればプログラムソースファイルもおねがいします・・

  • ピクチャーボックスの画像が欠けてしまいます。

    VB.NETとWinXPなのですが、 コマンドボタンを押して、ファイルダイアログボックスを開いて jpgファイルを指定するとピクチャーボックスにその 画像が表示されるようなものをつくっているのですが、 ピクチャーボックスの上に出るファイルダイアログボックスが重なっていた部分だけ画像が欠けてしまいます。 Picturebox1.Refresh()かなと思って試してみたのですが、今度は全部消えてしまいました。 良い方法があったら教えて頂きたいです。 よろしくお願いします。

  • ピクチャーボックス上に描いた円をうまく保存できません

    1.予めピクチャーボックスに画像を表示しておき 2.そのピクチャーボックス内に円を描き↓ Picture1.Circle (10, 10), 500 3.それら両方(1で予め表示しておいた画像と、2で描いた円)を保存しようと↓ SavePicture Picture1.Image, App.Path & "\Test.bmp" とすると、1で予め表示しておいた画像だけが保存され、2で描いた円が保存されません。 両方とも(1で予め表示しておいた画像の上に2で描いた円が表示されるように)保存したいのですが、どのようにすればよいでしょうか。 できれば具体的にサンプルコードなどをご教授いただけると大変ありがたく存じます。 恐れ入りますが、何卒よろしくお願いいたします(VB6.0)

  • ピクチャーボックスの大きさに合わせて画像を表示

    縦に長い画像をピクチャーボックスに表示したいのですが、 エクスプローラーの縮小表示と同じように 縦長の場合は左右に余白が出来て、画像の縦横比は 変更しないですべてを表示したいのですが、 どのようにしたら良いでしょうか。 PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage を使うと全部入るのですが、左右に余白がないように 引き伸ばしてしまうので、何の画像なのか分かりにくくなってしまいます。 よろしくおねがいします。m(__)m