Board logo

標題: [發問] 如何讓滑鼠移入的判斷只判斷一次~當有改變時~再改變!? [打印本頁]

作者: av8d    時間: 2012-9-5 13:44     標題: 當滑鼠指到CheckBox1的時候跳出一張圖~該如何下判斷式?

當滑鼠指到CheckBox1的時候跳出圖1
當滑鼠移開CheckBox1的時候關閉圖1

當滑鼠指到CheckBox2的時候跳出圖2
當滑鼠移開CheckBox2的時候關閉圖2

以此類推~
作者: yangjie    時間: 2012-9-6 02:08

回復 1# av8d
個人曾經用過如此作法

Private Sub CheckBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
         Image1.Picture = LoadPicture("")   
         Image1.Picture = LoadPicture(ThisWorkbook.Path & "\圖庫\規格1.JPG")
Private Sub CheckBox2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        Image1.Picture = LoadPicture("")   
         Image1.Picture = LoadPicture(ThisWorkbook.Path & "\圖庫\規格2.JPG")
僅能在CheckBox1    CheckBox2  上作文章
功力僅到此 至於游標到其他空白處做 Image1.Picture = LoadPicture("")   卸載圖片   我就不會了
作者: yangjie    時間: 2012-9-6 02:11

回復  av8d
個人曾經用過如此作法

Private Sub CheckBox1_MouseMove(ByVal Button As Integer, ByVal ...
yangjie 發表於 2012-9-6 02:08

須先在userform1中作一個 image的物件
作者: Hsieh    時間: 2012-9-6 15:17

本帖最後由 Hsieh 於 2012-9-7 11:26 編輯

回復 1# av8d

試試
[attach]12387[/attach]
[attach]12400[/attach]
作者: av8d    時間: 2012-9-6 16:08

回復 4# Hsieh


    太強了~

有點深奧~我看不太懂~努力學習中!

如何在Image2內放2張圖?
作者: Hsieh    時間: 2012-9-6 16:34

回復 5# av8d

這個的重點在於如何讓滑鼠有類似滑出的事件
因為表單及表單物件只有MOUSEMOVE事件
而表單與物件的MOUSEMOVE事件不會同時存在
就可依此做為是否觸及物件的參考
至於你只看到Image2
那是2個Image物件重疊而已
之所以要直接佈置多個Image物件,這樣可避免圖檔必須帶著走的問題
如果你不介意把圖檔必需跟著檔案,就可參考2#的作法
使用單一個Image物件,然後用LoadPicture來變更圖片
總之,方法不只一個,自己動動腦會有更多收穫
作者: yangjie    時間: 2012-9-6 23:09

回復 6# Hsieh
漂亮
H大大的"而表單與物件的MOUSEMOVE事件不會同時存在
                  就可依此做為是否觸及物件的參考
"
讓我想到如此作法
         Private Sub Userform1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
                  Image1.Picture = LoadPicture("")   
        end sub
        Private Sub CheckBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
                  Image1.Picture = LoadPicture("")   
                  Image1.Picture = LoadPicture(ThisWorkbook.Path & "\圖庫\規格1.JPG")
         end sub
         Private Sub CheckBox2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
                 Image1.Picture = LoadPicture("")   
                 Image1.Picture = LoadPicture(ThisWorkbook.Path & "\圖庫\規格2.JPG")
        end sub
  即可一離開CheckBox1的範圍 即刻 卸載圖形
作者: av8d    時間: 2012-9-10 09:47

回復 7# yangjie


    大大~謝謝你~

可是我測試了一下
         Private Sub Userform1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
                  Image1.Picture = LoadPicture("")   
        end sub
好像沒有效果~我確定是在Userform1底下運行~
作者: Hsieh    時間: 2012-9-10 21:48

回復 8# av8d

[attach]12447[/attach]
作者: av8d    時間: 2012-9-11 13:53     標題: 如何讓滑鼠移入的判斷只判斷一次~當有改變時~再改變!?

Private Sub Userform1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Image1.Picture = LoadPicture("")   


Private Sub CheckBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Image1.Picture = LoadPicture("")   
Image1.Picture = LoadPicture(ThisWorkbook.Path & "\圖庫\規格1.JPG")


由於每當滑鼠移動到的每一次~Image1會一直閃爍~是否有辦法讓他只判斷一次?當有改變時~再次判斷~再次改變!
作者: mark15jill    時間: 2012-9-11 15:18

本帖最後由 mark15jill 於 2012-9-11 15:19 編輯
Private Sub Userform1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single,  ...
av8d 發表於 2012-9-11 13:53



    MouseMove 是 移動 就視為有改變
    不知道您所謂的 有改變是指?
     1.圖檔不同(檔案 檔名
     2.對照數據不同
     3事件不同

如果只是 單一 點擊 才會換圖
那可參考 Click 相關用法

如果只是 雙點擊 才會換圖
那可參考DobleClick 相關用法
作者: Hsieh    時間: 2012-9-11 18:07

回復 10# av8d
不懂你所說的閃爍,上傳檔案看看吧
作者: luhpro    時間: 2012-9-11 21:07

由於每當滑鼠移動到的每一次~Image1會一直閃爍~是否有辦法讓他只判斷一次?當有改變時~再次判斷~再次改變!,  ...
av8d 發表於 2012-9-11 13:53

我大概知道你是在說什麼.

會閃爍是因為你採用 yangjie 的
Image1.Picture = LoadPicture("")   
Image1.Picture = LoadPicture(ThisWorkbook.Path & "\圖庫\規格1.JPG")
程式,
而非 Hsieh 所提供的
UserForm
用 Image1.Picture = LoadPicture("")

Class 用
Img = ThisWorkbook.Path & "\" & MyCheck.Caption & ".jpg"
UserForm1.Image1.Picture = LoadPicture(Img)
程式.

因為 MouseMove 實際上是幾乎隨時都在觸發,(在 MouseMove 程式中設中斷點就可確認,即便不操作滑鼠都可能有觸發->桌子震動或是光學滑鼠辨識誤差...)
所以用 yangjie 的程式會一直在清除-重畫-清除... (即你說的閃爍)
而 Hsieh 的程式則是滑鼠移到 UserForm 上時才清除, (在 Class 上則是一直在相同位置上畫相同的圖形, 感覺上是畫面沒有變化)
所以不會有閃爍的情形.

至於你說的 "只判斷一次" 則可能要更低階的 VB 程式碼才有可能做到,
Excel Vba 現成提供的事件中,
沒看到類似 Leave 之類的事件可以產生單次觸發動作.
作者: av8d    時間: 2012-9-14 09:47

回復 4# Hsieh


    大大~如果
checkbo71~80顯示 Image1~10
checkbo101~110顯示 Image11~20

我修改了S的初始值~可是無效~是不是修改錯誤了?

因為我有多個UserForm~又該如何使用?謝謝大大!
作者: mark15jill    時間: 2012-9-17 14:53

回復 14# av8d


    小弟有個想法...
大大您是否試用  list 表單列出 檔案數量  再點選比較方便?




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)