延續「Word / Command Button 無法設定文字對齊的替代方案,使用Label」
因為 Label可以控制文字置中,所以用來替代Command Button
在這篇進一步將Label設定成有按下去的效果
主要是設定Label的SpecialEffect屬性
初始設定改為1,外觀看起來就像button了
再來是2,會有聚焦的感覺
接著是6,會有彈起來的感覺
最後再回到1
但是如果直接這樣跑程式,因為程式執行速度很快,其實看不出來有改變
所以變成這過程要有很短暫的停頓
如果是在Excel可以用Application.Wait來設定最短1秒的停止
然而,Word VBA是沒有這個功能,變通的方式是引用Excel物件來執行
不過這個方式最小的停止時間是1秒
雖然爬文有看到一些方式來達到毫秒的設定
但是有人會提到這都只是0~1秒之間的隨機值,並不是真的如設定的毫秒數
也有提到引用windows API
但是這個缺點是程式是會完全停止不會有任何反應,而且實際測試時
也不知道什麼原因,會看不出任何的SpecialEffect屬性改變
因此改用Timer,這樣可以獲得更接近的時間
綜合以上
我設定了2個自訂程序
clickStyle(lable As Label),傳入 Label
間隔0.2秒,改變SpecialEffect的設定值
將這個程序加在Label的click程序的最開始,Label click()事件被觸發時就執行
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
' Label樣式
'
Public Sub clickStyle(lable As Label)
lable.SpecialEffect = 2
stopTimer (0.2)
lable.SpecialEffect = 6
stopTimer (0.2)
lable.SpecialEffect = 1
End Sub
'
Public Sub clickStyle(lable As Label)
lable.SpecialEffect = 2
stopTimer (0.2)
lable.SpecialEffect = 6
stopTimer (0.2)
lable.SpecialEffect = 1
End Sub
stopTimer(ms As Double),傳入浮點數值,小數點秒數
利用Do-Loop迴圈,停止條件是當前時間減去開始時間的時間差,大於等於所設定的間隔時間
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
' 暫停程式
'
Sub stopTimer(ms As Double)
starting_time = Timer
Do
DoEvents
Loop Until (Timer - starting_time) >= ms
End Sub
'
Sub stopTimer(ms As Double)
starting_time = Timer
Do
DoEvents
Loop Until (Timer - starting_time) >= ms
End Sub
效果看起來應該很接近了
0 comments:
張貼留言