タイトル | : Re^3: マウスカーソルの滑らか移動 |
記事No | : 14160 |
投稿日 | : 2009/10/11(Sun) 17:08 |
投稿者 | : 花ちゃん |
> 同じフォーム内のCommand1 から Command2 のボタンにゆっくり移動表示 > の方法をご教授していただけると嬉しいです。 何の為にどのような場面で(条件)使用するか解らないと上記のコードを投稿しても 役に立たないかも。 取り敢えず、動作確認だけのテスト用として。 Form に Command1 と Command2 と Timer1 コントロールを貼り付け、下記コードを ペーストして下さい。
Option Explicit Private Declare Function SetCursorPos Lib "user32" _ (ByVal x As Long, ByVal y As Long) As Long Private Declare Function GetCursorPos Lib "user32" _ (lpPoint As POINTAPI) As Long Private Type POINTAPI x As Long y As Long End Type Private Declare Function GetSystemMetrics Lib "user32.dll" _ (ByVal nIndex As Integer) As Integer Private Const SM_CXFRAME = 32 'サイズ可変ウィンドウの境界線のX方向の幅 Private Const SM_CYFRAME = 33 ' 同、Y方向の幅
Private FrameWidth 'ウィンドウの境界線のX方向の幅 Private FrameHight 'ウィンドウの境界線のY方向の幅
Private x1 As Long Private y1 As Long Private x2 As Long Private y2 As Long Private x3 As Single Private y3 As Single Private N1 As Long Private Sub Command1_Click() 'フォームの枠の寸法を求める FrameWidth = GetSystemMetrics(SM_CXFRAME) FrameHight = GetSystemMetrics(SM_CYFRAME)
Dim CPos As POINTAPI Call GetCursorPos(CPos) x1 = CPos.x '現在位置 y1 = CPos.y N1 = 0 '移動先(Command2のボタンの真ん中の位置を求める) '横方向 x2 = Form1.Left + Command2.Left + (Command2.Width \ 2) x2 = (x2 \ Screen.TwipsPerPixelX) + FrameWidth '縦方向 y2 = Form1.Top + Command2.Top + (Command1.Height \ 2) 'タイトルバー及びメニューバーの寸法を求める y2 = y2 + (Form1.Height - Form1.ScaleHeight) y2 = (y2 \ Screen.TwipsPerPixelY) - FrameHight '1回の移動量 x3 = (x2 - x1) / 100 y3 = (y2 - y1) / 100 Timer1.Interval = 20 Timer1.Enabled = True End Sub Private Sub Timer1_Timer() '**** マウスを動かした場合は解除する ******** Dim CPos As POINTAPI Call GetCursorPos(CPos) Dim x As Long Dim y As Long x = CPos.x '現在位置 y = CPos.y If x <> CLng(x1 + (x3 * N1)) Then Timer1.Interval = 0 Timer1.Enabled = False End If '--------------------------------------------------- N1 = N1 + 1 Call SetCursorPos(x1 + (x3 * N1), y1 + (y3 * N1)) If N1 > 100 Then Timer1.Interval = 0 Timer1.Enabled = False End If End Sub
> DoEvents 関数や Sleep 関数の問題とはどういったことでしょうか? > これも教えていただけると勉強になります 関数名で検索すれば見つかるかと。 http://tinyurl.com/yz6agn6 http://msdn.microsoft.com/ja-jp/library/cc429358.aspx
|