史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2006-05-22, 03:36 PM   #1
foxsimon2001 帥哥
註冊會員
榮譽勳章
UID - 16145
在線等級: 級別:39 | 在線時長:1754小時 | 升級還需:6小時級別:39 | 在線時長:1754小時 | 升級還需:6小時級別:39 | 在線時長:1754小時 | 升級還需:6小時級別:39 | 在線時長:1754小時 | 升級還需:6小時
註冊日期: 2002-12-22
VIP期限: 2011-07
住址: 台北市
文章: 1580
精華: 0
現金: 146 金幣
資產: 184250 金幣
預設 疑問 - 請問關於vb裡判斷滑鼠的問題

是這樣的
例如一個text1 裡面有東西
當滑鼠4秒沒動作時 text就出現現在系統時間
如果一動作就回覆原本text內的內容
下次又超過4秒沒動作就顯示時間

請問一下這樣的程式 應該如何判斷滑鼠有無動作呢?
PS.我是使用Visual Basic 6.0
foxsimon2001 目前離線  
送花文章: 112, 收花文章: 57 篇, 收花: 165 次
回覆時引用此帖
舊 2006-05-22, 07:25 PM   #2 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時
註冊日期: 2002-12-07
文章: 13249
精華: 0
現金: 26241 金幣
資產: 3024051 金幣
預設

可以在每個物件的 MouseMove 事件 與 一個Timer 上作組合判斷
(需要一對 gX、gY 變數)

但其有個缺點 滑鼠一離開你的視窗程式 其滑鼠的移動 就不算數
此時就可用系統Hook方法
(但對初學者而言難理解了點...)

語法:
'timeGetTime()
'精度約1ms , 此式適用於大多數應用場合
Private Declare Function timeGetTime Lib "winmm.dll" () As Long

'Dim CTime As Integer
Dim TempT As Long
Dim PreText As String

Dim gX As Single, gY As Single

Private Sub Form_Load()

    PreText = Text1
    'CTime = 10
    TempT = timeGetTime
    Timer1.Interval = 100
    Timer1.Enabled = True
    
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

    If gX = X And gY = Y Then Exit Sub
    gX = X: gY = Y
    
    'CTime = 40
    TempT = timeGetTime
    
    If Timer1.Enabled = False Then
        Text1 = PreText
        Timer1.Enabled = True
    End If
    
End Sub

Private Sub Timer1_Timer()

    'CTime = CTime - 1
    'Debug.Print CTime
    
    'If CTime < 0 Then
    If (timeGetTime - TempT) > 4000 Then
        PreText = Text1
        Text1 = Time
        Timer1.Enabled = False
    End If
    
End Sub
以上程式為求準確使用 timeGetTime
API函式
也可完全用 Timer 的計數準確度 (把上面的' 註解取消與 timeGetTime交換)
只是 VB 的 Timer 影響因素眾多
很容易不準確
mini 目前離線  
送花文章: 1999, 收花文章: 7957 篇, 收花: 26749 次
回覆時引用此帖
舊 2006-05-22, 07:59 PM   #3 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時
註冊日期: 2002-12-07
文章: 13249
精華: 0
現金: 26241 金幣
資產: 3024051 金幣
預設

但以上程式可發現
系統時間不會動
此時發現原來 Timer 需持續計數
最後的改良版如下
語法:
'timeGetTime()
'精度約1ms , 此式適用於大多數應用場合
Private Declare Function timeGetTime Lib "winmm.dll" () As Long

Dim TempT As Long
Dim PreText As String
Dim gX As Single, gY As Single
Dim blnMove As Boolean

Private Sub Form_Load()

    PreText = Text1
    TempT = timeGetTime
    Timer1.Interval = 100
    Timer1.Enabled = True
    
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

    If gX = X And gY = Y Then Exit Sub
    gX = X: gY = Y
    
    TempT = timeGetTime
    blnMove = True
    Text1 = PreText
    
End Sub

Private Sub Timer1_Timer()

    If (timeGetTime - TempT) > 1500 Then '表示1.5秒不動的話...
        If blnMove Then
            PreText = Text1
            blnMove = False
        End If
        
        Text1 = Time
    End If
    
End Sub
mini 目前離線  
送花文章: 1999, 收花文章: 7957 篇, 收花: 26749 次
回覆時引用此帖
舊 2006-05-23, 09:19 PM   #4 (permalink)
註冊會員
榮譽勳章
UID - 16145
在線等級: 級別:39 | 在線時長:1754小時 | 升級還需:6小時級別:39 | 在線時長:1754小時 | 升級還需:6小時級別:39 | 在線時長:1754小時 | 升級還需:6小時級別:39 | 在線時長:1754小時 | 升級還需:6小時
註冊日期: 2002-12-22
VIP期限: 2011-07
住址: 台北市
文章: 1580
精華: 0
現金: 146 金幣
資產: 184250 金幣
預設

謝謝版主幫忙 終於想通了
我知道怎麼做嚕
foxsimon2001 目前離線  
送花文章: 112, 收花文章: 57 篇, 收花: 165 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 02:23 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1