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