タイトルにあるようにピクチャーボックスの
サイズを変えたら表示されてるのまでいっしょに大きさを変えたい
のですがそうしたらいいかわかりません誰か教えてください

このQ&Aに関連する最新のQ&A

A 回答 (6件)

>作ってるプログラムに会うように変更を加えたいので


詳しく解説も入れていただけるとありがたいです

了解しました。
まず概要ですが、描画用のピクチャボックスと表示用のピクチャボックスを作り、ピクチャボックスに対する描画などは描画用ピクチャボックスに行い、適当なタイミングで表示用ピクチャボックスに拡大縮小しつつ転送しようって言うのが趣旨です。「適当なタイミング」については後述します。

この操作のキモである「拡大縮小しつつ転送」を実現する方法には、#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-ピクセル」に設定したわけです。

こんな感じで分かりますでしょうか。できるだけ分かりやすく書いたつもりですが、まだまだ専門用語が多いかも…
分かりにくい点とかがあれば、遠慮なくご質問ください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/11/14 16:50

>hDCプロパティって何ですか?



これを詳しく説明しようとすると、Windowsの根幹に関わるところから始めなくてはいけなくなります(^^;

えーっとですねぇ、以下のようにお考え下さい。
○とかく描画に関わるオブジェクトには「デバイスコンテキスト(DC)」っていうものが入っている。

○WindowsにはDCに対する描画命令や転送命令が各種装備されており、これを使えば、同じ命令でフォームやプリンターなどのオブジェクトに対して描画を行うことが出来る。

○hDCは、DCの「ハンドル」、つまりDCの住所みたいなもので、描画用命令にhDCを渡せば、描画用命令はこの住所を参照し、適切なデバイスコンテキストに対して描画処理を行う。

っていうような感じです。
    • good
    • 0
この回答へのお礼

ありがとうございます
一つ一つのオブジェクトのアドレスと言うことですね
よくわかりました

お礼日時:2001/11/17 23:52

これはピクチャボックスの中央に表示を行うプログラムです。



使えたら使ってください。

'ダミーのピクチャボックスから、ダイアログのピクチャボックスの中央に転送
Private Sub pastPicCenter(inMainPic As PictureBox, inDmyPic As PictureBox)
  Dim wkMainW As Long
  Dim wkMainH As Long
  Dim wkDmyW As Long
  Dim wkDmyH As Long
  
  '貼り付け先の左位置/上位置/幅/高さ
  Dim wkL As Long, wkT As Long, wkW As Long, wkH As Long
  
  Dim sngXYScaleMain As Single
  Dim sngXYScaleDmy  As Single
  
  'メインの幅/高さ
  With inMainPic
    wkMainW = .ScaleWidth
    wkMainH = .ScaleHeight
  End With
  
  'ダミーの幅/高さ
  With inDmyPic
    wkDmyW = .ScaleWidth
    wkDmyH = .ScaleHeight
  End With
 
  '横:縦 の比率を求める
  sngXYScaleMain = wkMainH / wkMainW
  sngXYScaleDmy = wkDmyH / wkDmyW
  
  '----- 縮尺からメインの幅高さに適した新たな幅高さを算出 -----
  'ダミーの絵がメインエリアより縦長
  If sngXYScaleMain < sngXYScaleDmy Then
    wkH = wkMainH
    wkW = wkH / sngXYScaleDmy
  'ダミーの絵がメインエリアより横長
  Else
    wkW = wkMainW
    wkH = wkW * sngXYScaleDmy
  End If
 
  '新たな幅高さからピクチャボックスの
  wkL = (wkMainW - wkW) \ 2
  wkT = (wkMainH - wkH) \ 2
 
  Call inMainPic.PaintPicture(inDmyPic.Picture, wkL, wkT, wkW, wkH, 0, 0, wkDmyW, wkDmyH, vbSrcCopy)
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます
これを元にいろいろやってみます

お礼日時:2001/11/17 23:50

最近、寝不足なので寝ちゃいました。

。。

補足お願いします。

ピクチャボックスに描画する絵は。ピクチャボックス原型の縦横の比を維持するのですか?、それともピクチャボックスのサイズにぴったり合わせて、縦横の比を維持しないで表示させるのですか?

1.維持させる場合
ピクチャボックスの中央になるようにでいいですか?


2.維持させない場合
特に質問はありません。


3.共通した質問で
フォームのサイズの変更に伴いピクチャボックスのサイズを変更するのですか?
それともフォームのサイズと関係なく、ピクチャボックスのサイズを変更するのですか?


それと
http://oshiete1.goo.ne.jp/kotaeru.php3?q=157508
で一度発言したのですが・・・
描画にはPaintPicture以外にBitBltやStretchBltがあります。

画像の拡大縮小を行う時はPaintPictureで行うのが一番高速な処理のようです。
今は亡き
「VisualBasic 増強作戦」←昔のVBプログラマは誰もが見てました。
ここで実証が記されてました。

この回答への補足

ピクチャーボックス自体の縦横の比が変わることはありません
フォームの大きさにあわせてピクチャーボックスのサイズを変更します
If Form2.Height > Form2.Width Then Form2.Height = Form2.Width Else: Form2.Width = Form2.Height
Picture1.Width = Form2.ScaleWidth
Picture1.Height = Form2.ScaleHeight

補足日時:2001/11/14 16:37
    • good
    • 0

まず、描画用のピクチャボックスと表示用のピクチャボックスを作ります。



表示用ピクチャボックスをPicture1, 描画用をPicture2 とします。

Picture1は、プロパティを以下のように設定。
 Visible: True
 ScaleMode: 3-ピクセル
 Width,Height: 適当


Picture2は、プロパティを以下のように設定。
 AutoRedraw: True
 Visible: False
 ScaleMode: 3-ピクセル
 Width,Height: 表示用領域に転送する画面の大きさ

で以下のような感じでコーディングしてください。

'(General)(Declarations)

'APIの宣言
Option Explicit
Private Declare Function StretchBlt Lib "gdi32" _
  (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long _
  , ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long _
  , ByVal dwRop As RasterOpConstants) As Long

Private Sub Form_Resize()
  'ピクチャボックスの大きさをフォームの大きさに合わせる
  Me.Picture1.Left = 0
  Me.Picture1.Top = 0
  Me.Picture1.Width = Me.Width
  Me.Picture1.Height = Me.Height
  
  'Pikture2の内容を変形して、Picture1に転送
  Call StretchBlt(Me.Picture1.hdc, 0, 0, Me.Picture1.ScaleWidth, Me.Picture1.ScaleHeight _
    , Me.Picture2.hdc, 0, 0, Me.Picture2.ScaleWidth, Me.Picture2.ScaleHeight _
    , vbSrcCopy)
  Me.Picture1.Refresh
End Sub

不明点等がありましたら、補足にてご質問ください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
作ってるプログラムに会うように変更を加えたいので
詳しく解説も入れていただけるとありがたいです

お礼日時:2001/11/13 20:51

>ピクチャーボックスの サイズを変えたら


とありますが、プログラム実行中に何度もサイズ変更が発生するのですか?


たぶん処理としては
1.ダミーのピクチャボックスに画像を呼び込む
2.PaintPicturで画面に表示するメインのピクチャボックスにダミーから描画(画像転送)
3.「サイズ変更が発生した時」参照
4.サイズ変更後処理関数


「サイズ変更が発生した時」として、二つの方法があります。
1.ピクチャボックスサイズの変更の命令をかけるたびに、サイズ変更後処理関数を呼ぶ
2.プロセス監視をして、ピクチャボックスサイズ変更終了を読み取り、自動的にサイズ変更後処理関数を発生させる。


共通な部分として「サイズ変更後処理関数」が必要なことです。
ダミーのピクチャボックスと現在のピクチャボックスのサイズの比を取って、PaintPictureで縮尺を反映させながらメインのピクチャボックスに描画をします。
    • good
    • 0
この回答へのお礼

ありがとうございます
言ってることはわかるんですけどどういうソースを書いたらいいのかよくわかりません
その辺まで詳しく教えて欲しいです

お礼日時:2001/11/13 19:19

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q一緒にお風呂

一緒にお風呂

皆さんは、パートナーと一緒にお風呂に入りますか?

仲間内で恋人同士のお風呂についての話になったのですが、
男友達の中では、一緒にお風呂に入る派と、あえて入らない派に分かれました。

一緒に入る人は、絆が深まるという意見や、お風呂でもいちゃいちゃしたいという意見があり、
一緒に入らない人は、パートナーの裸を見慣れることによるマンネリ防止という意見もありました。
女友達は、裸を見られるのは恥ずかしいけど、一緒に入る人が多いみたいです。

ちなみに、私達はホテルでですが、一緒にお風呂(シャワーも湯船も)に入っています。
私の両親は、夏以外は一緒に入ることが多いのですが、いちゃいちゃではなく(笑)いろいろ話しているようです。

結婚前と結婚後では違うのかもしれませんが、一緒に入りますか?

Aベストアンサー

私は未婚で彼氏が私の家に泊まりに来るのが週に1回程度なのですが、
最初の頃は別々に入っていましたが、気付いたら毎回一緒に入る
ようになっていましたね。
流石にアレの時は別々ですが・・・

確かに裸を見慣れてしまっているとは思いますが、私達もお風呂で
ゆっくり色んな話をするコミュニケーションの場として使っています。
いちゃいちゃもしながら楽しいです♪

多分毎日だとゆっくり入りたいと思ったりして嫌になるかもしれないですが、
週1程度なので問題ありません。
特に彼氏の方が一人だと寂しいとか、つまらないと言って入りたがります(笑)

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

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

Aベストアンサー

可能ですか? という質問であれば「可能です」で終わっちゃいますよw

今試せる環境がないのでイメージしながら書いてるのですが、
(A) フォームに Panel を置く。名前は Panel1 になる。これが一番下のベースになるので少し縦長にしておく。
(B) Panel1 の中に PictureBox を置く。名前は PictureBox1 になる。
(C) PictureBox1 の Dock プロパティを Top にする。PictureBox1 が Panel1 の上辺に張り付く。PictureBox1 の下辺をドラッグして大きさを適当に決める。
(D) Splitter コントロールを Panel1 の中の PictureBox1 の下の辺りに置く。名前は Splitter1 になる。
(E) Splitter1 は Panel1 の中の PictureBox1 じゃない空間で、Panel1 の左辺に張り付いてしまうので、Dock プロパティを Top にして、PictureBox1 の下辺に張り付くようにする。
(F) Panel1 の下の空いている空間に PictureBox を置く。名前は PictureBox2 になる。Dock プロパティを Fill にすると、Panel1 の下部分いっぱいに広がる。

これで実行してみると PictureBox1 と PictureBox2 の間に少し隙間があり、そこへマウスを持っていくとマウス ポインタが HSplit 状態になり、上下にドラッグすると各々のサイズが変わると思います。

可能ですか? という質問であれば「可能です」で終わっちゃいますよw

今試せる環境がないのでイメージしながら書いてるのですが、
(A) フォームに Panel を置く。名前は Panel1 になる。これが一番下のベースになるので少し縦長にしておく。
(B) Panel1 の中に PictureBox を置く。名前は PictureBox1 になる。
(C) PictureBox1 の Dock プロパティを Top にする。PictureBox1 が Panel1 の上辺に張り付く。PictureBox1 の下辺をドラッグして大きさを適当に決める。
(D) Splitter コントロールを Panel1 ...続きを読む

Q一緒にお風呂に入る事

彼は毎回泊まると
一緒にお風呂に入ろうって言ってくるのですが
お風呂って一人で入りたいし
ゆっくりちゃんと洗いたいしで
いつもはぐらかして一人で入ります^^;
別に一緒にお風呂入らなくても。。って
思うのですが
男性って入りたいものですか?
私は変な話するなら、ちゃんとベッドでしたいんですが。。
女性の方の経験や男性の意見聞かせて下さい
くだらない事ですがこれからの付き合いのため
一緒に入った方がいいのか悩んでます。。

Aベストアンサー

こんにちは。主婦です!
家では大体一緒にお風呂に入ってますよ。
ゆっくり、一人で入りたい時は一人で入ります。
二人で一緒に入る=Hな事
ではなくて(そんな時もありますが・・)
ゆっくり話ができる場所と考えてはどうでしょうか?
一緒に居てもTVを観ていたり、何かしながら話をしている事って多くないですかね。
家では今日の出来事とか、色々お話ししながら入ってますよ。
あまり気が進まないなら無理に入ることはないと思いますが、たまには彼に付き合って一緒に入ったら喜ぶのではないでしょうか?
普段は断っといて、「今日は一緒に入ろっかあ」なーんて言ってみてはいかがでしょう

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

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

Aベストアンサー

今表示しようとしているImage のHeight と Width を調べて
高さが大きければPictureBox の幅を(縦横比に合わせて)変更し
幅が大きければPictureBox の高さを(縦横比に合わせて)変更する
そしてPictureBox 自体の位置をサイズの変更に合わせてセンタリングする位置に移動するようにすれば、StrechImage のままでいいと思う

Q娘と一緒にお風呂

私の娘は場合は確か小学校5年生の時まで一緒に入りましたがした。それ以降は一切拒否されてます。

会社では20歳の娘と今だにお風呂に一緒に入る同僚もいて皆、ビックリしています。

(1)成長した娘と父親がお風呂に入る父親と娘のそれぞれ心境を聞きたいのです。

(2)みなさんは娘さんとは何歳まで一緒にお風呂に入れましたか?

Aベストアンサー

私は父と小学校5年まで入っていました。
拒否したきっかけは、父が膨らみ始めた私の胸を見て、冷やかすように「おっぱい出てきたな」と言ったからです。
膨らみ始めているのは自分でも意識していて、一緒に入りたくないと密かに思っていたのですが、両親が「お父さんと一緒に入り」と当然のように言うので、そんな自分の感覚がおかしいのかと思って、言うにいえなかったのです。

余談ですが、それから父は時々、私が入浴中とわかっていながら知らないフリをして、扉を開けて覗いてくることがありました。笑いながら「ごめんごめん」と言って、しばらく扉を閉めないのでわざとだとすぐにわかります。やめてと言っても父は意に介さず。母親からも何度も言ってもらって、やっとしなくなったのは私が高校になってからです。本当にイヤでした。今でも入浴中に父の声が外で聞こえればヒヤッとします。

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

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

表示済みの画像は反映されなくてかいません。
単に枠のサイズを変更したいです。

Aベストアンサー

Width と Height プロパティで設定

Q男の子はいくつまでお母さんと一緒にお風呂に入るか?

皆さん、男の子は何歳まで母親と一緒にお風呂に入ると思います?

何故こんな質問をしたかというと、友人に中学1年の男の子がいる人がいて、まだ一緒にお風呂に入っているのだそう…
その子、嫌じゃないのかな?
もちろんいつまで一緒に入ったっていいだろうし、タレントの松本明子さんは大人になっても父親と一緒に入るなんて聞いたこともある。
その子はかなりおっとりしたタイプの子らしいけれど、自分の息子ある程度になったら「母さんとお風呂なんて恥ずかしい!」と思って欲しいな…そんな子の方が好みだな…なんて思ったり…

すでにお母さんと一緒にお風呂に入らない男の子がいる方・元男の子の方(笑)
何歳まで一緒にお風呂に入りましたか?
現在の当人の年代と合わせてお教え下さると嬉しいです。
例)
※私は50代です。2年生まで一緒にはいっていました。
※息子は4年生まで一緒に入りましたよ。今は30代です。

Aベストアンサー

 現在40代の男性です。
 私の場合、小学4年まででしたが、これでも遅いほうだと思っていました。
 しかし、中学生の時、同級生でワルガキだったA君
が「オレは小学6年まで一緒に入っていた」と聞いて
意外に思いました。
 10年ほど前に聞いたあるラジオ番組で、「最近では、中学生になっても母親と一緒に風呂に入っている男がいる」などと言われていて、正直言って驚きました。
 私は、5年生になったら林間学校があるため、絶対に一人で入らなければならないと自覚していました。
 

QASP VBscript でメッセージボックスの文字の大きさを変えるには?

例えば vbscript で
あるボタンのクリック時に
Msgbox "あいうえお"
として、表示されるメッセージボックスの中の
あいうえお という文字のフォントサイズを変えることは可能でしょうか?

画面領域 1280 × 1024 とかでディスプレイを表示させている時、
メッセージボックスの文字サイズが小さくて困っています。

どなたか手がかりだけでも至急お願いします!

Aベストアンサー

メッセージボックスの文字のサイズを変更するには、画面のプロパティで、デザインタブを選択し、メッセージボックスの文字を選択してフォントサイズを変更します。

ただし、メッセージボックスの文字のサイズは個別には変更出来ず、システム全体で変わるところに注意してください。

Q一緒にお風呂に入りたがる彼氏…

付き合って2ヶ月目くらいから、彼氏がやたら一緒にお風呂に入りたがります。

すでに体の関係はあるので別にはずかしいとかではないのですが…
正直お風呂はひとりでゆっくりしたいので、めんどくさいです。

貸切り温泉とかならいいんですけど、
ラブホとかまして相手の部屋のせまいお風呂とかは…

これって断ったら傷つきますか?
最初だけがまんしてたらそのうち言わなくなりますかね?

Aベストアンサー

女性の側からするとイヤですよねー。


わかるー。


きちんと洗いたいから、そういう姿を見られるのが恥かしい。


それさえも、プレイにして、彼氏に洗ってもらうとかならまた別かもだけどw


それに、浴室でのSEXって、滑りが悪くなるし波立つし、のぼせるし、映像のようには楽しくないよねー。


一番いいのは、”浴室狭いし、あたし、先入るよっ。洗い終わったら呼ぶからさ”


は??



ある程度洗って自分が浴槽に入ったら彼氏を呼んで


彼氏が洗うところを眺めながら待って彼氏が入ってきて後ろから抱いてもらって2人で浸かる・・。


とかかなー。

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

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

Aベストアンサー

小さいピクチャーボックスの中に、画像サイズのピクチャーボックスを貼り、画像サイズのピクチャーボックスのLeft、Topを変化させるといいですよ。


人気Q&Aランキング