■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#28748-0コマンドボタン押下でpictureboxに画像を切り替えて表示させるダイナマイト伊藤2000-08-28(月) 09:07
     #28751-0RE#28748:コマンドボタン押下でpictureboxに画像を切り替えて表示させるふるふる2000-08-28(月) 09:32
     #28752-0RE#28751:コマンドボタン押下でpictureboxに画像を切り替えて表示させる匿名287522000-08-28(月) 09:36
     #28757-0RE#28751:コマンドボタン押下でpictureboxに画像を切り替えて表示させるダイナマイト伊藤2000-08-28(月) 10:00
     #28758-0RE#28757:コマンドボタン押下でpictureboxに画像を切り替えて表示させるANGEL2000-08-28(月) 10:13
     #28767-0RE#28758:コマンドボタン押下でpictureboxに画像を切り替えて表示させるダイナマイト伊藤2000-08-28(月) 10:43
     #28776-0RE#28767:コマンドボタン押下でpictureboxに画像を切り替えて表示させるANGEL2000-08-28(月) 11:51
     #28787-0RE#28776:コマンドボタン押下でpictureboxに画像を切り替えて表示させるダイナマイト伊藤2000-08-28(月) 14:02
     #28792-0RE#28787:コマンドボタン押下でpictureboxに画像を切り替えて表示させるよねKEN2000-08-28(月) 14:41
     #28795-0RE#28792:コマンドボタン押下でpictureboxに画像を切り替えて表示させるダイナマイト伊藤2000-08-28(月) 15:18
     #28801-0RE#28795:コマンドボタン押下でpictureboxに画像を切り替えて表示させるANGEL2000-08-28(月) 15:56
     #28802-0RE#28795:コマンドボタン押下でpictureboxに画像を切り替えて表示させるよねKEN2000-08-28(月) 16:06
     #28804-0RE#28795:コマンドボタン押下でpictureboxに画像を切り替えて表示させるゆう(U)2000-08-28(月) 16:32
     #28805-0RE#28802:コマンドボタン押下でpictureboxに画像を切り替えて表示させるダイナマイト伊藤2000-08-28(月) 16:46
     #28809-0RE#28805:コマンドボタン押下でpictureboxに画像を切り替えて表示させる通りすがり2000-08-28(月) 16:57
#28748-0
コマンドボタン押下でpictureboxに画像を切り替えて表示させる
はじめまして、ダイナマイト伊藤と申します。宜しくお願いします。

今、VB6.0で、1枚のフォームに、pictureboxとタイマーコントロール、コマンドボタンを貼り付けまし
て、「実行」コマンドボタンを押下するとpictureboxにjpg画像が出てきます。そして、timerコントロー
ルのintervalに設定した秒が経過したら次のjpg画像に切り替わり、またその秒が経過したら更に次の
jpg画像に切り替わり…を繰り返します。画像は数枚で、全てiniファイルに「9999.jpg」の様に登録し
ておきまして、先頭に登録されているjpgから順番に読んでいき、全て読み終わったら先頭に登録されてい
るjpgに戻ります。(iniファイルはcドライブのtempディレクトリ配下に置く)

例えば、0001.jpg、2222.jpg、0666.jpgと3つiniファイルに登録してあって、timerのintervalが
10のとき(このinterval値もiniファイルに登録したい)、
まず「実行」押下時に「0001.jpg」を表示、10interval経過したら「2222.jpg」を表示、更に
20interval経過したら「0666.jpg」を表示、次の10interval経過でまた「0001.jpg」を表示…
を繰り返します。出来たらその画像は画面のフォーム全体に(スクリーンセーバーのように)表示
出来ればうれしい。(pictureboxの構想がいけないのかな?)

以上、わかりづらいですが、宜しくお願いします。
#28751-0
RE#28748:コマンドボタン押下でpictureboxに画像を切り替えて表示させる
おはようございます。

> 例えば、0001.jpg、2222.jpg、0666.jpgと3つiniファイルに登録してあって、timerのintervalが
> 10のとき(このinterval値もiniファイルに登録したい)、
> まず「実行」押下時に「0001.jpg」を表示、10interval経過したら「2222.jpg」を表示、更に
> 20interval経過したら「0666.jpg」を表示、次の10interval経過でまた「0001.jpg」を表示…
> を繰り返します。出来たらその画像は画面のフォーム全体に(スクリーンセーバーのように)表示
> 出来ればうれしい。(pictureboxの構想がいけないのかな?)
> 
タイマーコントロールで、PictureBoxのPictureプロパティーを変更すればいいのです。
ただ、TimerイベントでPictureプロパティーにファイル名をセットするのではファイル読込で
時間を使ってしまうので、最初に1回だけファイルから画像を読み込んでPicture型のオブジェクト
変数にとっておき、Timerイベントではそのオブジェクト変数を使うようにします。

(例)
Private picBack(0 to 2) as Picture

Sub Form_Load()
  Dim FName(0 to 2) As String
  'iniファイルから画像ファイル名をFNameに取りこむ
  方法は省略します
  'ファイル名から画像を取得し、画像格納変数へ代入
  Set picBack(1) = LoadPicture(fName(0))
  Set picBack(2) = LoadPicture(fName(1))
  Set picBack(3) = LoadPicture(fName(2))
End Sub

Sub Timer1_Timer()
  Static iNum as Integer

  If iNum > 2 Then iNum = 0
  Picture1.Picture = picBack(inum)
  iNum = iNum + 1
End Sub

こんなかんじかな。
#28752-0
RE#28751:コマンドボタン押下でpictureboxに画像を切り替えて表示させる
追加です。

> タイマーコントロールで、PictureBoxのPictureプロパティーを変更すればいいのです。
> ただ、TimerイベントでPictureプロパティーにファイル名をセットするのではファイル読込で
> 時間を使ってしまうので、最初に1回だけファイルから画像を読み込んでPicture型のオブジェクト
> 変数にとっておき、Timerイベントではそのオブジェクト変数を使うようにします。
> 
TimerコントロールのIntervalやEnabledはコマンドボタンをクリックした時に開始するように
しましょう。
#28757-0
RE#28751:コマンドボタン押下でpictureboxに画像を切り替えて表示させる
どうもありがとうございました。

あともう一つ、初歩的な質問ですみません。
timerコントロールを使用しないで、「実行」コマンドボタンを押下するたびにiniファイル設定の
jpg画像を切り替える(先程と同様、全ての設定jpg画像を読んだら先頭に戻る)場合はどのように
したら宜しいでしょうか?
例)iniファイルの同一セクションに、
      ga1=0001.jpg
      ga2=2222.jpg
      ga3=0666.jpg
   と登録してあって、「実行」を押下するとpictureboxに「0001.jpg」が表示、もう一度「実行」
  を押すと「2222.jpg」が表示、3度目押下で「0666.jpg」が表示、4度目は「0001.jpg」に戻る
  …、ただし、画像は3枚とは限らず、2枚だったり5枚だったりすることがあります。

 またまた、宜しくお願いします。
#28758-0
RE#28757:コマンドボタン押下でpictureboxに画像を切り替えて表示させる
> あともう一つ、初歩的な質問ですみません。
> timerコントロールを使用しないで、「実行」コマンドボタンを押下するたびにiniファイル設定の
> jpg画像を切り替える(先程と同様、全ての設定jpg画像を読んだら先頭に戻る)場合はどのように
> したら宜しいでしょうか?
ふるふるさんの方法をとるのであれば
何番目まで表示したかが分かる変数をモジュールレベルで宣言して
それを配列の添え字として使用しましょう。
添字の最大値はUBound関数で取得できます。
#28767-0
RE#28758:コマンドボタン押下でpictureboxに画像を切り替えて表示させる
どうもありがとうございました。画像の枚数が異なる場合、配列を用いるのですね。
ただ、「ボタンを押すたびに画面を切り替える」の処置がよく分かりません。

timerコントロールを使用した方(#28751参考)で作って見たのですが、一度出た画像(jpg)が切り替わり
ません。
VBではpictureboxに表示させた画像は消すなり何かの処置をしないと次の画像は表示されないのでしょう
か?
また、pictureboxの範囲を画面一杯に表示することはできないのでしょうか?
#28776-0
RE#28767:コマンドボタン押下でpictureboxに画像を切り替えて表示させる
> ただ、「ボタンを押すたびに画面を切り替える」の処置がよく分かりません。
> timerコントロールを使用した方(#28751参考)で作って見たのですが、一度出た画像(jpg)が切り替わり
> ません。
RefreshメソッドやAutoRedrawプロパティをHELPで参照してください。

> また、pictureboxの範囲を画面一杯に表示することはできないのでしょうか?
pictureboxのサイズですか?Height、Widthプロパティのことでしょうか・・・。
なんとなく違うような気がするのでAutoSizeプロパティやPaintPictureメソッドも参照してください。
#28787-0
RE#28776:コマンドボタン押下でpictureboxに画像を切り替えて表示させる
先程はどうもありがとうございました。

> > また、pictureboxの範囲を画面一杯に表示することはできないのでしょうか?
> pictureboxのサイズですか?Height、Widthプロパティのことでしょうか・・・。
> なんとなく違うような気がするのでAutoSizeプロパティやPaintPictureメソッドも参照してください。

AutoSizeプロパティやPaintPictureメソッドを使用しても駄目でした。というより、
form1と書かれた画像と、picturebox内の画像(当然同じ)がだぶって表示されてしまいます。
この件、宜しくお願いします。
#28792-0
RE#28787:コマンドボタン押下でpictureboxに画像を切り替えて表示させる
> AutoSizeプロパティやPaintPictureメソッドを使用しても駄目でした。というより、
> form1と書かれた画像と、picturebox内の画像(当然同じ)がだぶって表示されてしまいます。
この説明ではおっしゃりたいことがわかりません。
あなたの目の前で起きている状況をこちらはまったく知らないわけですから、
もう少し詳しく説明して下さい。

まず、
>> timerコントロールを使用した方(#28751参考)で作って見たのですが、一度出た画像(jpg)が切り替わり
>> ません。
>RefreshメソッドやAutoRedrawプロパティをHELPで参照してください。
こちらの話の方はうまくいくようになったのでしょうか?
#話題にでないということはうまくいくようになったんだと思いますが・・・

> > > また、pictureboxの範囲を画面一杯に表示することはできないのでしょうか?
この意味もよくわかりません。
文章そのままにとらえると単にPictureBoxのサイズを画面一杯にしたいということしか
わかりませんので、
> > pictureboxのサイズですか?Height、Widthプロパティのことでしょうか・・・。
これでOKということになってしまいます。
しかし、そういう質問である可能性は低い(だろうと予測される)ので、
> > なんとなく違うような気がするのでAutoSizeプロパティやPaintPictureメソッドも参照してください。
たぶん違うのだろうな・・・ということで、AutoSizeやPaintPictureが関係しそうだ
という回答が出てくるのだと思います。(画像そのものを画面いっぱいに引き伸ばしたい?)

説明があった方がいいと思うこと。
 ・「pictureboxの範囲を画面一杯に表示」するとはどういう意味か?
      また、そうして結局は何がしたいのか?<−これがないと、場合によってある質問の意味を何通りにも解釈できるんです。
     - その作っているアプリケーション自体の目的がわかれば、何をしたいのかこちらにもわかりやすいです。
 ・問題となっている部分のコードはどんなふうに書いたのか?
      - AutoSize、PaintPictureを使ってどうだめだったのか?
  ・必要であれば、どんな画像か(サイズなど)?など<(これはまぁ必要ないかも)
  ・OS、VBのバージョンなどの環境
#28795-0
RE#28792:コマンドボタン押下でpictureboxに画像を切り替えて表示させる
説明不足でどうもすみませんでした。

> > AutoSizeプロパティやPaintPictureメソッドを使用しても駄目でした。というより、
> > form1と書かれた画像と、picturebox内の画像(当然同じ)がだぶって表示されてしまいます。
> この説明ではおっしゃりたいことがわかりません。
> あなたの目の前で起きている状況をこちらはまったく知らないわけですから、
> もう少し詳しく説明して下さい。> 
> 
> > > > また、pictureboxの範囲を画面一杯に表示することはできないのでしょうか?
> この意味もよくわかりません。
> 文章そのままにとらえると単にPictureBoxのサイズを画面一杯にしたいということしか
> わかりませんので、
> > > pictureboxのサイズですか?Height、Widthプロパティのことでしょうか・・・。
> これでOKということになってしまいます。
> しかし、そういう質問である可能性は低い(だろうと予測される)ので、
> > > なんとなく違うような気がするのでAutoSizeプロパティやPaintPictureメソッドも参照してください。
> たぶん違うのだろうな・・・ということで、AutoSizeやPaintPictureが関係しそうだ
> という回答が出てくるのだと思います。(画像そのものを画面いっぱいに引き伸ばしたい?)

最終的にはスクリーンセーバー(のようなもの)を作りたいのです。
例えば、3枚のjpg画像を用意し、最初に画像1をフルスクリーン表示、ある一定の時間(Interval)到達後
画像2をフルスクリーン表示、更にInterval経過後画像3、その後また画像1、2、3、1…と自動的に
切り替わるようにしたいのです。かつ画像は一定サイズではなく、バラバラです。

Timerイベントに
   Static inum As Long
    
    Picture1.AutoRedraw = True
    Form1.Cls
    
    If inum > 2 Then inum = 0
    
    Picture1.Picture = picback(inum)
  
    PaintPicture picback(inum), 0, 0
    
    inum = inum + 1

のようにPaintPictureを用いて実行すると、最初のInterval到達後に、タイトルバー付きの表示画像1が出ますが、その上に
数cmずれてタイトルバーなしで同じ画像1がダブって表示されています。次のIntervalでは、画像2が全く同じ現象になって
います。少し小さな画像で試すと、タイトルバーなしの画像(上に乗っている方)の下にコマンドボタンが見えていました。
ちなみに、Autosizeでは変化なしでした。
なお、VB6.0、Win98で作成しています。解像度にはあまり依存させたくありません。

以上、よろしくお願いします。
#28801-0
RE#28795:コマンドボタン押下でpictureboxに画像を切り替えて表示させる
> 説明不足でどうもすみませんでした。
次回から詳細な情報をお願いしますね。

> 最終的にはスクリーンセーバー(のようなもの)を作りたいのです。
> 例えば、3枚のjpg画像を用意し、最初に画像1をフルスクリーン表示、ある一定の時間(Interval)到達後
> 画像2をフルスクリーン表示、更にInterval経過後画像3、その後また画像1、2、3、1…と自動的に
> 切り替わるようにしたいのです。かつ画像は一定サイズではなく、バラバラです。
> Timerイベントに
>    Static inum As Long
>     Picture1.AutoRedraw = True
>     Form1.Cls
>     If inum > 2 Then inum = 0
>     Picture1.Picture = picback(inum)
>     PaintPicture picback(inum), 0, 0
>     inum = inum + 1
まず、どこに描画したいのかをはっきりさせましょう。
Formに直接描画したりPictureBoxに描画したりせずに・・・。

スクリーンセーバーということですので
FormのWindowStateを最大に。ControlBox、Captionをなくしてください。
これで解像度に依存しないで最大化できるはずです。

勝手にPicture1に描画するものとしてお話しますが
Picture1.Width = Form1.Width
Picture1.Height = Form1.Height
Picture1.Top = 0
Picture1.Left = 0
としてPicture1を画面と同じサイズにして
Picture1.PaintPicture Picture1.Picture, 0, 0, Picture1.Width, Picture1.Height
のようにすると拡大されて表示されると思います。

#別な方法としてAPIのStretchBltを使用する方法もありますが
#過去ログにあるはずですのでご覧になってください。
#28802-0
RE#28795:コマンドボタン押下でpictureboxに画像を切り替えて表示させる
> 最終的にはスクリーンセーバー(のようなもの)を作りたいのです。
> 例えば、3枚のjpg画像を用意し、最初に画像1をフルスクリーン表示、ある一定の時間(Interval)到達後
> 画像2をフルスクリーン表示、更にInterval経過後画像3、その後また画像1、2、3、1…と自動的に
> 切り替わるようにしたいのです。かつ画像は一定サイズではなく、バラバラです。
やりたいことがよくわかりました。

で、さっそく提示してもらったコードと、先ほどからのログからのコードで
動かしてみましたが、何の問題もなく動いているように見えます。
 
>     PaintPicture picback(inum), 0, 0
ただし、このコードの場合、拡大せずに等倍表示ですね。
     
> のようにPaintPictureを用いて実行すると、最初のInterval到達後に、タイトルバー付きの表示画像1が出ますが、その上に
> 数cmずれてタイトルバーなしで同じ画像1がダブって表示されています。次のIntervalでは、画像2が全く同じ現象になって
> います。少し小さな画像で試すと、タイトルバーなしの画像(上に乗っている方)の下にコマンドボタンが見えていました。
タイトルバーってなんでしょうか?
VBの話ででてくるタイトルバーは普通、Formの上端の青色(デフォルトなら)のところを言います。

> ちなみに、Autosizeでは変化なしでした。
AutoSizeは、画像のサイズにあわせて、PictureBoxのサイズを自動調節してくれる機能です。
なので、変化なしというのがなにを意味するのかちょっとわかりません(^^;

何かがおかしいとしたら、コードの問題ではないと思われます。
FormやPicture1のプロパティの設定で何かしましたか?

状況がちょっと飲み込めないので、次のを試してみて下さい。
Picture1のAutoSizeはTrueにして、
PaintPictureの書かれている行を以下のようにして見て下さい。
PaintPicture Picture1.Picture, 0, 0, ScaleWidth, ScaleHeight, 0, 0, Picture1.Width, Picture1.Height
#FormとPicture1のScaleModeは同じにしておいて下さい。
#28804-0
RE#28795:コマンドボタン押下でpictureboxに画像を切り替えて表示させる
> 最終的にはスクリーンセーバー(のようなもの)を作りたいのです。
> :
>    Picture1.AutoRedraw = True
毎回、同じプロパティの同じ値に設定をするのは無駄です。
※他で何らかの影響が出るなら別ですが・・・

>     If inum > 2 Then inum = 0
Loadイベントでは最初の ふるふる さんのReのままですか?
※Set picBack(1) = LoadPicture(fName(0))
 Set picBack(2) = LoadPicture(fName(1))
 Set picBack(3) = LoadPicture(fName(2))
 1〜3ではなく0〜2のタイプミスだと思いますが・・・
 コードを理解して参考にしているなら問題ないですね。

>     Picture1.Picture = picback(inum)
ここと
>     PaintPicture picback(inum), 0, 0
ここの処理の意味は何ですか?
※Picture1とMe(Form)を同じ絵にする理由は?
 これが下の現象の原因では(数cmずれ)・・・

> のようにPaintPictureを用いて実行すると、最初のInterval到達後に、
> タイトルバー付きの表示画像1が出ますが、その上に
> 数cmずれてタイトルバーなしで同じ画像1がダブって表示されています。
> 次のIntervalでは、画像2が全く同じ現象になって

タイトルバー付きのフォームを使用しているのですか?
スクリーンセーバならタイトルバーが無い方が(少なくとも画像表示中は)
良いのでは?

> います。少し小さな画像で試すと、タイトルバーなしの画像(上に乗っている方)の下に
> コマンドボタンが見えていました。
> ちなみに、Autosizeでは変化なしでした。
ヘルプを読むと分かりますが・・・
AutoSizeで調整されるのはコントロールの大きさです。
※小さい画像を使用すると、当然コントロールのサイズも
 小さくなります、コントロールの下(ZOder)に隠された
 コントロールが有ったとしても、サイズが小さくなって
 隠れきれない場合は、当然見えてきます

> 画像2をフルスクリーン表示、更にInterval経過後画像3、その後また画像1、2、3、1…と自動的に
> 切り替わるようにしたいのです。かつ画像は一定サイズではなく、バラバラです。
どんな画像でもコントロールのサイズに合わせて表示させたい?

ならイメージ(Image)コントロールを使用すると良いです。
※こちらは絵をコントロールの大きさに拡大・縮小できます
 何のプロパティかはヘルプで調べてください

これを使用するとPaintPictureを使用せずにお任せで画像の
大きさをフォームの大きさに合わせることも容易です。
※当然、フォームの大きさにイメージコントロールの大きさを
 合わせておく・・・ということですが。
#28805-0
RE#28802:コマンドボタン押下でpictureboxに画像を切り替えて表示させる
↓の#28801も含めて、貴重なヒント、どうもありがとうございました。
最終目標にむけて、頑張ります。
ただ1点、サイズの小さなjpg画像を表示させようとすると、フルスクリーンになるように
拡大はされますが、画像の右下端が切れてしまいました。
#28809-0
RE#28805:コマンドボタン押下でpictureboxに画像を切り替えて表示させる
> ただ1点、サイズの小さなjpg画像を表示させようとすると、フルスクリーンになるように
> 拡大はされますが、画像の右下端が切れてしまいました。

使っているのはVB5ですか?
もしそうなら、それはQ173213の現象に相当するかと思います。
このページと関連する記事:
#96-02つ以上の画像を合成するには・・・・1999-07-18(日) 13:35
#2870-0PictureBoxについて1999-11-01(月) 14:11
#4640-0画像の拡大縮小について1999-11-30(火) 15:25
#28646-0画像の変数への先読み2002-05-12(日) 00:23
#835-0画像を縮小させる1999-08-14(土) 21:26
#39879-0PaintPictureの使い方2001-03-06(火) 12:53
#13982-0拡大した画像を保存したいのですが。教えて下さい2000-01-20(木) 21:20
#39096-0画像表示について2001-02-19(月) 13:15
#2616-1PictureBox について1999-08-04(水) 17:48
#9971-0画像ビュワーをつくろうと思ってるんですけど2000-04-27(木) 16:35
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)