[リストへもどる]
一括表示

投稿時間:2003/11/23(Sun) 14:55
投稿者名:
Eメール:
URL :
タイトル:
PictureBoxで表示されない・・・
全画面表示のゲームでリプレイファイルみたいなのを作ってみようと思い、

1,全画面表示のものをPrintScreenでコピー
2,PictureBoxにコピーした画像を貼り付け
3,PictureBoxの画像の一部を変更して保存

というのを繰り返し行うのを作ろうとしているのですが、

どうやら全画面表示のまま行うとPictureBoxに、コピーした画像が表示されてないようで、
きちんと処理されません。

試しに、Form1.SetFocusを3の処理の前に入れて、
画面をForm1と全画面表示のもので行ったり来たりさせるようにすると無事この処理は出来ました。

PictureBoxに表示する部分のソースを書きますと、

Private Sub Timer2_Timer()
  Timer2.Enabled = False
  Call SaveWindowPic(True, False)'ここで画面をクリップボードにコピー
  
  DoEvents
  Picture1.Picture = Clipboard.GetData
  Picture1.Refresh
  Timer3.Enabled = True
End Sub

という感じです。

環境はVB6.0、windows2000です。

どうすれば全画面表示のものをずっと表示したまま処理が行えるでしょうか?
よろしくお願いします。

投稿時間:2003/11/24(Mon) 23:51
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: PictureBoxで表示されない・・・
同じ事ができませんので、ペイントに画像を表示してウィンドウを最大化で表示して
その画像をクリップボードに1秒間隔でコピーしてクリップボーからピクチャーボックス
ペーストしてみました。
テストコードですので、1方法としての参考にして下さい。

あまり、役に立たなかったようだし、テストコードでこのまま使用されても
何ですので、削除します。(11/25)

投稿時間:2003/11/25(Tue) 00:32
投稿者名:
Eメール:
URL :
タイトル:
Re^2: PictureBoxで表示されない・・・
回答ありがとうございます。

Picture1.Point(100, 100)で色を取得すると-1が返ってくるので、
てっきりPictureBoxに表示できていないと思い込んでいたのですが、
花ちゃんさんのテストコードを実行させていただいたところ
どうやらPictureBoxに表示はできていたようで、こちらの勘違いだったようです・・・(汗

こちらが詳しく書かなかったばかりに、二度手間になってしまい恐縮なのですが、
Picture1.Point(100, 100)等で、ある地点の色を取得する方法はどうすればいいのでしょうか?

どうかよろしくお願いしますm(_ _)m

以下は花ちゃんさんから頂いたテストコードに色を調べるのを足したコードです。

Option Explicit
Private Declare Sub keybd_event Lib "user32.dll" _
   (ByVal bVk As Byte, ByVal bScan As Byte, _
    ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_KEYUP = &H2
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Declare Function MapVirtualKey Lib "user32" _
    Alias "MapVirtualKeyA" (ByVal wCode As Long, _
    ByVal wMapType As Long) As Long
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Private i As Long

Private Sub Timer1_Timer()
Dim ff As Long
    AppActivate "test001.bmp - ペイント"
    Clipboard.Clear
    StopTime (100)
    Picture1.Cls
    Call sSetSendKeys(vbKeyControl, vbKeyA)
    Call sSetSendKeys(vbKeyControl, vbKeyC)
    If Clipboard.GetFormat(vbCFBitmap) Then
        Set Picture1.Picture = Clipboard.GetData()
        SavePicture Picture1.Picture, i & ".bmp"
        i = i + 1
        ff = FreeFile
        Open "aaa.txt" For Append As #ff
          Print #ff, Picture1.Point(100, 100)

'aaa.txtには
'-1
'-1
'-1
'-1
'と値が入ってしまう

        Close
    End If
End Sub

Private Sub Command1_Click()
    Timer1.Enabled = Not Timer1.Enabled
    'Timer1.Interval = 1000 で設定しておいて下さい。
End Sub

'以下のコードはここの逆引きヘルプの
'アクティブウインドウにキーストロークを送る を参照して下さい。
Private Sub sSetSendKeys(bVk1 As Long, _
                Optional bVk2 As Long = 0, Optional bVk3 As Long = 0)
    If bVk2 = 0& And bVk3 = 0& Then
        Call keybd_event(CByte(bVk1), MapVirtualKey(CByte(bVk1), 0), _
                        KEYEVENTF_EXTENDEDKEY Or 0, 0)
        Call keybd_event(CByte(bVk1), MapVirtualKey(CByte(bVk1), 0), _
                        KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
    ElseIf bVk3 = 0& Then
        Call keybd_event(CByte(bVk1), MapVirtualKey(CByte(bVk1), 0), _
                        KEYEVENTF_EXTENDEDKEY Or 0, 0)
        Call keybd_event(CByte(bVk2), MapVirtualKey(CByte(bVk2), 0), _
                        KEYEVENTF_EXTENDEDKEY Or 0, 0)
        Call keybd_event(CByte(bVk2), MapVirtualKey(CByte(bVk2), 0), _
                        KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
        Call keybd_event(CByte(bVk1), MapVirtualKey(CByte(bVk1), 0), _
                        KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
    ElseIf (bVk1 <> 0&) And (bVk2 <> 0&) And (bVk3 <> 0&) Then
        Call keybd_event(CByte(bVk1), MapVirtualKey(CByte(bVk1), 0), _
                        KEYEVENTF_EXTENDEDKEY Or 0, 0)
        Call keybd_event(CByte(bVk2), MapVirtualKey(CByte(bVk2), 0), _
                        KEYEVENTF_EXTENDEDKEY Or 0, 0)
        Call keybd_event(CByte(bVk2), MapVirtualKey(CByte(bVk2), 0), _
                        KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
        Call keybd_event(CByte(bVk3), MapVirtualKey(CByte(bVk3), 0), _
                        KEYEVENTF_EXTENDEDKEY Or 0, 0)
        Call keybd_event(CByte(bVk3), MapVirtualKey(CByte(bVk3), 0), _
                        KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
        Call keybd_event(CByte(bVk1), MapVirtualKey(CByte(bVk1), 0), _
                        KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
    End If
    StopTime (50)
End Sub
Private Sub StopTime(st As Long)
    Dim lngSt As Long
    lngSt = timeGetTime
    Do While timeGetTime - lngSt < st
        DoEvents
    Loop
End Sub

投稿時間:2003/11/25(Tue) 00:53
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: PictureBoxで表示されない・・・
> Picture1.Point(100, 100)等で、ある地点の色を取得する方法はどうすればいいのでしょうか?

下記ではどうでしょうか?

        Open "aaa.txt" For Append As #ff
          Dim c As Long
          c = Picture1.Point(100, 100)
          Print #ff, c

投稿時間:2003/11/25(Tue) 00:56
投稿者名:
Eメール:
URL :
タイトル:
Re^4: PictureBoxで表示されない・・・
> 下記ではどうでしょうか?
>
>         Open "aaa.txt" For Append As #ff
>           Dim c As Long
>           c = Picture1.Point(100, 100)
>           Print #ff, c

これでもやはり
-1
-1
-1
という感じになります。

投稿時間:2003/11/25(Tue) 01:07
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: PictureBoxで表示されない・・・
では Picture1.AutoRedraw =False になっていませんか?
Picture1.AutoRedraw =True にして見て下さい。

投稿時間:2003/11/25(Tue) 01:13
投稿者名:
Eメール:
URL :
タイトル:
Re^6: PictureBoxで表示されない・・・
> では Picture1.AutoRedraw =False になっていませんか?
>  Picture1.AutoRedraw =True にして見て下さい。

無事取得できました^^
かなり初歩的なことだったんですね・・・(汗

花ちゃんさん、親切に回答してくださって
どうもありがとうございましたm(_ _)m

投稿時間:2003/11/25(Tue) 09:42
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^7: PictureBoxで表示されない・・・
No.6717で投稿したコードは事象を確認するために作成したコードですので、
簡単な作りなっており、実際にお使いになる場合問題が発生するかも知れ
ませんので、目的に合せて改良(丁寧なコード)して下さいね!