VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -