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

このQ&Aのポイント
  • ピクチャボックスのサイズを状況に応じて変えたい。作図範囲のみを表示させる方法はある?Windows2000、VB6.0環境。
  • ピクチャボックスのサイズを変えて作図範囲のみを表示したい。ユーザビリティ向上のためにサイズの動的変更が必要。Windows2000、VB6.0環境。
  • ピクチャボックスのサイズを柔軟に変更し、作図範囲のみを表示させたい。ユーザビリティ向上のために必要な変更。Windows2000、VB6.0環境。
回答を見る
  • ベストアンサー

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

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

テキストデータから座標を取得しているなら、テキストデータを読込み又は、表示の時に、 最大のX座標とY座標を取得すればよいのではないでしょうか? 例えば Option Explicit Private Sub Command1_Click() data_read End Sub '*************************** Sub data_read() Dim x1 As Long Dim y1 As Long Dim x2 As Long Dim y2 As Long Dim max_x As Long Dim max_y As Long Dim min_x As Long Dim min_y As Long Open "[ファイル名]" For Input As #1 max_x = 0: max_y = 0 min_x = Picture1.ScaleWidth: min_y = Picture1.ScaleHeight While (Not EOF(1)) Input #1, x1, y1, x2, y2 '最大のX座標とY座標を求める max_x = maxvalue(max_x, x1, x2) max_y = maxvalue(max_y, y1, y2) '最小のX座標とY座標を求める min_x = minvalue(min_x, x1, x2) min_y = minvalue(min_y, y1, y2) '線画 Picture1.Line (x1, y1)-(x2, y2) Wend hanten max_x + min_x, max_y + min_y Close #1 End Sub '********************************************** ' 上下反転 ' 'Picture1.ScaleMode = 1 - Twip 'Picture2.ScaleMode = 1 - Twip の場合 '********************************************** Sub hanten(x As Long, y As Long) With Picture2 .Width = x .Height = y .PaintPicture Picture1.Image, 0, y, Picture1.ScaleWidth, -Picture1.ScaleHeight Image1.Picture = .Image End With End Sub '*************************** '引数の中で1番大きな値を返す Function maxvalue(V1 As Long, V2 As Long, V3 As Long) As Long If (V1 > V2) Then If (V1 > V3) Then maxvalue = V1 Else maxvalue = V3 End If Else If (V2 > V3) Then maxvalue = V2 Else maxvalue = V3 End If End If End Function '*************************** '引数の中で1番小さな値を返す Function minvalue(V1 As Long, V2 As Long, V3 As Long) As Long If (V1 < V2) Then If (V1 < V3) Then minvalue = V1 Else minvalue = V3 End If Else If (V2 < V3) Then minvalue = V2 Else minvalue = V3 End If End If End Function のような感じで。 実際のファイル内容が分かりませんので、例ではLine用の座標のみです。 min_x,min_yは無くてもかまいません。 hanten max_x + min_x, max_y + min_y の部分で最大の部分ちょうどだと見栄えが悪いので、左余白(min_x)と上余白(min_y)分、左下を伸ばしました。 min_x,min_yを100などに固定してもいいと思います。 上下反転等、mmc820さんのプログラムと違う所は訂正してください。

mmc820
質問者

お礼

お礼が遅れまして申し訳ありません。 度々の質問にも関わらず、ご丁寧に回答いただき大変感謝しております。 さて、結果の方ですが試行錯誤の結果、無事に表示領域を設定する事が出来ました。これでだいぶ使い勝手も向上し、この後の作業にも集中する事が出来ます。 この度は大変お世話になりました。また、今後お力添えをいただくことがあるかと思いますが、taisuke555さんのご意見、ご指摘等いただければ幸いです。 有難うございました。

その他の回答 (2)

回答No.2

また2度書きになってしまって申し訳ありません。 前回の質問の件ですよね? 違っていた場合、作図範囲はどのように決まるのでしょうか? それが分かれば Dim wi As Long Dim he As Long With Picture1 .Visible = False wi = .Width he = .Height '線画の範囲に変更 .Width = [線画範囲横幅] .Height = [線画範囲縦幅] Image1.Picture = .Image '元に戻す .Width = wi .Height = he .Visible = True End With の様な感じですか... 作図範囲が分からないと言うと作図範囲を求めるプログラムが必要になります。

mmc820
質問者

お礼

締め切りが遅れまして申し訳ありません。あれから忙しい日々が続いてしばらくインターネットから遠い生活を送っていました・・・。 おかげでプログラムも完成間近となり、ようやく解放してもらえそうです。 この度は大変お世話になりました。 ご回答ありがとうございました。

mmc820
質問者

補足

度々のご回答有難うございます。 この作図の部分ですが、テキストデータから座標を読み込んで書いているので、読み込むデータによってサイズの大小の差が大きくなってしまうのです。以前、質問させていただいたように、一度描画して反転するので、最初に書いた際の下部余白が反転された時に上部にきてしまい、図面を見るのに手間取ってしまうのです。 >作図範囲が分からないと言うと作図範囲を求めるプログラムが必要になります。 との事ですが、この作図範囲を求める方法をお聞かせいただけませんか? 重ね重ねご迷惑をお掛けしますが宜しくお願い致します。

回答No.1

Picture1.Picture = LoadPicture("ファイル名") でファイルを読み込んでいると思いますが デザイン時に Picture1.AutoSize = True とすると読み込んだファイルのサイズにPicture1を合わせることが出来ます。 読み込んだ後で Picture2.width = picture1.width Picture2.height = picture1.height とすれば、Picture2のサイズをPicture1に合わせる事が出来ると思います。

関連するQ&A

  • ピクチャーボックスで四角形内を塗りたい。

    初歩的な質問でしたらすみません。 ピクチャーボックスに四角形を描画します。 その四角形の内側をクリックしたら、四角形の内側が 塗りつぶされるようにしたいと思っております。 黒で四角形を書き、青く塗りつぶす。というように ペイントの塗りつぶしのようなイメージです。 四角形の大きさが固定でしたら、何とかできたのですが、 寸法が変化するので微妙な大きさになると塗りつぶせない事が あるのでこまっています。 簡単に塗りつぶせる方法がありましたら教えてください。 形は四角形限定です。 どうぞよろしくお願いします。

  • picture boxの画像をimageに上下反転して表示したい

    お世話になります。mmc820です。 表題の通りですが、ピクチャーボックス(作業用で実際は表示されません)に描画した画像をイメージに上下反転した状態で表示させたいと思います。 ピクチャーボックスに上下反転して表示する方法は見つけたのですが、イメージに表示させる方法が見つからず困っております。 イメージへの反転表示は可能なのでしょうか? 皆様、良い方法がありましたらどうか御教示下さい。 もし不可能であれば「不可能です。」という旨のお答えでも結構ですので、ご意見お聞かせください。 当方の開発環境はWindows2000、VB6.0です。 また、説明に不足がありましたら補足いたします。 どうか宜しくお願いします。

  • C#ピクチャーボックス再描画について

    C#ピクチャーボックス再描画について 動的生成したピクチャーボックスに文字を描画します そのあと、そのピクチャーボックスをD&DでForm内を移動できるようにしています その際、あるピクチャーボックスが別のピクチャーボックスの上を通過したり 他のコントロールが上になったりすると、描画した文字が消えてしまいます。 再描画について調べるとRefleshやUpdateとかができました。 しかし、Refleshを使うと文字を描画する前の状態を再描画してしまいます。 再描画の方法はTimerで10ミリ秒毎ぐらいにしようと思ってます。 Refleshをピクチャーボックスに文字を描画させた後に再描画できるように設定できればいいんですが…。 他に方法があったりしたら教えてください!!

  • ピクチャボックスに描画した画像の保存

    VB6.0にて、 http://www.uploda.org/uporg898462.jpg このようなものを作成しました。 折れ線グラフはプログラムにて後から描画したもの、 それ以外の目盛りなどは最初からピクチャボックスに描画してあるものです。 pic1,pic2は共にピクチャボックスです。 赤い線で囲まれたpic1を目盛り、グラフ、その他のテキストボックスや文字と共に画像として保存したいのですが、 SavePicture Pic1.Image, "C:\SaveTest2.bmp" とすると、pic1の大きさの、何も描画されていない真っ白な画像が保存されてしまいます。 また、SavePicture Pic2.Image, "C:\SaveTest2.bmp" (pic2の保存) とすると、折れ線グラフのみが描画され、目盛りは無くなった画像が保存されてしまいます。 2つのピクチャ共にAutoRedraw=Trueを設定しています。 pic1を上手く保存する方法は無いでしょうか? ご教授、お願いします。

  • VB2005でピクチャーボックス内の図形を移動

    VB2005のフォームにピクチャーボックスを配置して、Imageで写真を張り付けたとき、写真がピクチャーボックスの大きさよりも大きい場合にピクチャーボックス内の写真を移動させる方法ってあるのですか?現在左上の一部分しか表示されません。同時に写真の拡大縮小ってできるのでしょうか?どなたか詳しい方よろしくお願いいたします。

  • ピクチャーボックス内でのイメージの移動

    VBで小さなピクチャーボックスの中に大きなビットマップを表示させ、ピクチャーボックスの内部でそのビットマップを移動させたいのですが、ヒントを下さい。 丁度、望遠鏡の丸の中で、景色がスクロールするイメージです。

  • ピクチャーボックスでのスクロール方法

    ピクチャーボックスの中にPrintを使ってdataの出力やそのdataを基にしてLine等で作図をさせています。しかし、これらがピクチャーボックスの範囲を超える時は全体を見ることができません。リストボックスのようにスクロールして見るようにできないのでしょうか。画像dataなら分かるのですが、・・・・。よろしくお願いいたします。

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

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

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

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

  • ピクチャボックス内の線を選択(VB6)

    VisualBasic6.0に関する質問です. ピクチャボックス内にグラフィック描画を行い, ある線や丸のみをマウスで選択できるようにしたいと考えています. そのグラフィックがピクチャボックス内に位置する領域を記憶しておき マウスの位置がそこにきたときのみイベントを起こすという 流れで出来そうな気はしているのですが,もしやもっと 簡単な方法がVBの機能で備わっているのでは,と考えていたりします. (領域計算が面倒くさいなぁと・・・) もし,そういった機能,もしくはより簡単な方法をご存知の方が おられましたら,どうぞお教えください. よろしくお願いいたします.

専門家に質問してみよう