プロが教えるわが家の防犯対策術!

PaintPicture LoadPicture("c:winnt\winnt.bmp"), _
0, _
0, _
ScaleWidth, _
ScaleHeight

  とかけば最大化で表示はするのですが
  画面のプロパティで背景を指定するときに表示位置の
  並べて表示みたいにしたいのですがどうすればできますでしょうか
  また、そのときに1つ1つのおおきさのしていもできるのですか
  教えてください。
  よろしくお願いします。

A 回答 (3件)

あっサンプル出てきましたね。


ぼくも作ってみました。

多分の質問の文章からすると、拡大縮小を行いたいのでは?と思って、縮尺を変えた画像タイル張りを行っております。


画像は#1の方と一緒で、一度ピクチャボックスに読み込んで、その画像を操作しています。
何度もLoadPictureをするより効果的です。

ファイルは定数で宣言しています。
画像の大きさは、呼び込んだファイルの大きさのX,Y方向の0.2倍に設定しています。(変数:sngScale)
適当な値に変更してください。


必要なもの
フォーム
コマンドボタン1
ピクチャボックス1(Visible = False)


Private Const PIC_FILE As String = "c:\winnt\system32\setup.bmp"

Private Sub Command1_Click()
  Dim sngScale  As Single  '元の絵の縮小拡大率
  
  Dim lngPicW   As Long   '呼び込んだ絵の幅
  Dim lngPicH   As Long   '呼び込んだ絵の高さ
  
  Dim lngX  As Long '描画時のX座標
  Dim lngY  As Long '描画時のY座標
  Dim lngW  As Long '描画時の幅
  Dim lngH  As Long '描画時の高さ

  'もとの絵からの縮小拡大率をセット
  sngScale = 0.2

  'ピクチャの
  With Me
    With .Picture1
      'ピクチャボックスに絵を呼び込む
      .AutoSize = True
      .Picture = LoadPicture(PIC_FILE)
      
      'ピクチャボックスのサイズより、絵のサイズを得る
      lngPicW = .ScaleWidth
      lngPicH = .ScaleHeight
    End With
    
    '描画時の絵の幅高さを得る
    lngW = sngScale * lngPicW
    lngH = sngScale * lngPicH
    
    '描画のY座標初期化
    lngY = 0
    Do
      '描画のX座標初期化
      lngX = 0
      Do
        '描画する
        Call .PaintPicture(.Picture1.Picture, lngX, lngY, lngW, lngH, 0, 0, lngPicW, lngPicH, vbSrcCopy)
        
        'X座標を描画時の幅の分、X方向にずらす
        lngX = lngX + lngW
        
      'X座標がフォームの幅を超えた時ループを抜ける
      Loop While lngX < .ScaleWidth
      
      'Y座標を描画時の高さの分、Y方向にずらす
      lngY = lngY + lngH
    
    'Y座標がフォームの高さを超えた時ループを抜ける
    Loop While lngY < .ScaleHeight
  End With
End Sub


余談ですが、描画の命令はPaintPictureが標準でVBにありますが、それ以外にWindowsAPIでBitBltやStretchBltというのがあります。
検索サイトで「描画/方法」で検索をしたらたぶん出てくるとは思いますが、今回はPaintPicureが最も適しています。それは画像の拡大縮小の処理が一番早いからです。
逆に、縮尺を変えずに画像を転送するのであれば、BitBltが適しています。
あくまで余談ですが・・・
    • good
    • 0

訂正



Me.AutoRedraw = False
With Picture1
.Picture = LoadPicture("hoge.bmp")
For X = 0 To Me.ScaleWidth Step .ScaleWidth
For Y = 0 To Me.ScaleHeight Step .ScaleHeight
Me.PaintPicture .Picture, X, Y
Next
Next
End With
Me.AutoRedraw = True
    • good
    • 0

>並べて表示みたいに



これでどうでしょうか?

Dim X As Long
Dim Y As Long

Me.AutoRedraw = False
With Picture1
.Picture = LoadPicture("hoge.bmp")
For X = 0 To Me.ScaleWidth \ .ScaleWidth
For Y = 0 To Me.ScaleWidth \ .ScaleWidth
Me.PaintPicture .Picture, X * .ScaleWidth, Y * .ScaleHeight
Next
Next
End With
Me.AutoRedraw = True
    • good
    • 0

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