画像を矢印キーによって移動させる際に
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
select case KeyCode
case vbKeyTop
'上へ移動させる記述
・
・
end select
End Sub
のようなきじゅつだと右矢印キーと上矢印キーを同時に押しても右上に動いてはくれません
・これを右上に移動させるにはどうしたらよいでしょうか?
・また、画像を移動させるときにImageコントロールだとちらついてしまうのですが、
Pictureboxコントロールを使わなければいけないのでしょうか
複数キーの同時認識にGetKeyboardStateを用いますが、
こんな方法でも可能かと・・・。
Option Explicit
Private Const UPKEY As Long = 1
Private Const DOWNKEY As Long = 2
Private Const RIGHTKEY As Long = 4
Private Const LEFTKEY As Long = 8
Private Const SPEED As Long = 100
Dim lngKeyStatus As Long
Dim lngDispIndex As Long
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyUp
lngKeyStatus = lngKeyStatus Or UPKEY
Case vbKeyDown
lngKeyStatus = lngKeyStatus Or DOWNKEY
Case vbKeyRight
lngKeyStatus = lngKeyStatus Or RIGHTKEY
Case vbKeyLeft
lngKeyStatus = lngKeyStatus Or LEFTKEY
End Select
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyUp
lngKeyStatus = lngKeyStatus And Not UPKEY
Case vbKeyDown
lngKeyStatus = lngKeyStatus And Not DOWNKEY
Case vbKeyRight
lngKeyStatus = lngKeyStatus And Not RIGHTKEY
Case vbKeyLeft
lngKeyStatus = lngKeyStatus And Not LEFTKEY
End Select
End Sub
Private Sub Form_Load()
lngDispIndex = 0
Image1(0).Visible = True
Image1(1).Visible = False
Image1(1).Top = Image1(0).Top
Image1(1).Left = Image1(0).Left
lngKeyStatus = 0
Timer1.Interval = 100
Timer1.Enabled = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
Timer1.Enabled = False
End Sub
Private Sub Timer1_Timer()
Dim lngDispIndexNew
lngDispIndexNew = (lngDispIndex + 1) And 1
If (lngKeyStatus And UPKEY) <> 0 Then
Image1(lngDispIndexNew).Top = Image1(lngDispIndex).Top - SPEED
End If
If (lngKeyStatus And DOWNKEY) <> 0 Then
Image1(lngDispIndexNew).Top = Image1(lngDispIndex).Top + SPEED
End If
If (lngKeyStatus And RIGHTKEY) <> 0 Then
Image1(lngDispIndexNew).Left = Image1(lngDispIndex).Left + SPEED
End If
If (lngKeyStatus And LEFTKEY) <> 0 Then
Image1(lngDispIndexNew).Left = Image1(lngDispIndex).Left - SPEED
End If
Image1(lngDispIndexNew).Visible = True
Image1(lngDispIndex).Visible = False
Image1(lngDispIndex).Top = Image1(lngDispIndexNew).Top
Image1(lngDispIndex).Left = Image1(lngDispIndexNew).Left
lngDispIndex = lngDispIndexNew
End Sub
>また、画像を移動させるときにImageコントロールだとちらついてしまうのですが、
2枚交互に表示することである程度は抑えられますが、不完全です。
>Pictureboxコントロールを使わなければいけないのでしょうか
通常はGDIデバイスに対しBitbltを使います。
ありがとうございました
GetKeyState関数を使ったらうまくいきましたが。
GetKeyboardStateだとうまくいかない、というよりは使い方がよくわからない。
ツイート | ![]() |