當程式執行起來怪怪的,很多人在除錯 (Debug) 時,都喜歡在程式中使用中斷點 (Break) 加上 MsgBox 來看執行結果,但有些時候,這樣子的作法會造成某些事件 (Event) 無法觸發,甚至改變事件原來觸發的順序! 7 q1 F: p% j" ^! `, ]% K. U
9 a# c: T" e c/ V! r6 D1 M
比較正確的作法是在程式中使用 Debug.Print "事件名稱/要顯示的訊息" ,而不要用中斷點 (Break)。
本文轉貼自:http://freeshare2u.com/
2011年11月26日 星期六
2011年11月25日 星期五
VB-快速鍵-找尋 Function/Subroutine
當您的 APP 愈來愈大時,或是您要維護別人開發的大系統時,是否曾經有過一種情形,程式中 call 了某一個 Function/Subroutine,您要找尋這個 Function/Subroutine,除了一個一個 Module 找之外,大部份的人都是使用【編輯功能表】的【搜尋】功能。
' D! |7 J/ ^8 y i
其實您可以使用 【Shift + F2】快速鍵!很簡單,方法如下:
只要將游標停留在程式中該 Function/Subroutine Name 上,再使用【Shift + F2】快速鍵即可!
' D! |7 J/ ^8 y i
其實您可以使用 【Shift + F2】快速鍵!很簡單,方法如下:
只要將游標停留在程式中該 Function/Subroutine Name 上,再使用【Shift + F2】快速鍵即可!
2011年11月24日 星期四
VB與Windows API 間的呼叫技巧
一般會使用WINDOW API的情況,實在是因為VB本身不提供某些功能,但是,程式所需又不得不然,例如:讀取Registry內的資料,VB只提供SaveSetting、Getsetting 等系列的指令,但是它只能讀取特定地區的值,要讀、刪、更動其他區域的值時,就無法仔細看一看Combo Box的Events,其中沒有MouseMove,但這是我們經常用上的一個Event,那該如何呢?是的,那只有透過Winodow API。而VB呼叫Window API一般不都使用API檢視員,直接將相對應的API COPY到我們的程式中就好,那還用什麼技巧嗎?其實不然,因為VB資料格式的問題,又加上VB本身沒有指標,在許多地方需要一些小技巧才能解決,而且我們經常因應不同的需求,將API 檢視員的宣告COPY過來後再做一些修改,最重要的,如果有一個.DLL檔,它不在API 檢視員中定義,那時,就只有自己想辦法啦。
--------------------------------------------------------------------------------
一、 整數參數
Windows API32位元VB
--------------------------------------------------------------------------------
Int, INT_________________________ByVal Long
UNIT, DWORD__________________ByVal Long
BOOL__________________________ByVal Long ture時為1
WPARAM, LPARAM, LRESULT___ByVal Long
Handle(如HKEY)_________________ByVal Long
WORD, ATOM, SHORT__________ByVal Integer
BYTE, CHAR ___________________ ByVal Byte
Eg.
-----------------------------------------------------------------------------
Windows API 宣告
SHORT GetKeyState( int nVirtKey )
對應的VB宣告
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
--------------------------------------------------------------------------------------------------------------
這個API 可用來檢視某些KEY (如Insert鍵、Num Lock、CapsLock等)是on/off。程式如下:這個例子應該可十分楚的看到各個整數間的宣告對應。
----------------------------------------------------------------------------------------------------------------
Dim InsertMode as Integer
InsertMode = GetKeyState(vbKeyInsert) And vbShiftMask
If InsertMode = 1 then
Debug.print "表示 Insert Mode"
Else
Debug.print "表示 OverWrite Mode"
End If
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
一、 整數參數
Windows API32位元VB
--------------------------------------------------------------------------------
Int, INT_________________________ByVal Long
UNIT, DWORD__________________ByVal Long
BOOL__________________________ByVal Long ture時為1
WPARAM, LPARAM, LRESULT___ByVal Long
Handle(如HKEY)_________________ByVal Long
WORD, ATOM, SHORT__________ByVal Integer
BYTE, CHAR ___________________ ByVal Byte
Eg.
-----------------------------------------------------------------------------
Windows API 宣告
SHORT GetKeyState( int nVirtKey )
對應的VB宣告
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
--------------------------------------------------------------------------------------------------------------
這個API 可用來檢視某些KEY (如Insert鍵、Num Lock、CapsLock等)是on/off。程式如下:這個例子應該可十分楚的看到各個整數間的宣告對應。
----------------------------------------------------------------------------------------------------------------
Dim InsertMode as Integer
InsertMode = GetKeyState(vbKeyInsert) And vbShiftMask
If InsertMode = 1 then
Debug.print "表示 Insert Mode"
Else
Debug.print "表示 OverWrite Mode"
End If
--------------------------------------------------------------------------------
VB語言的基本型別
VB語言的變數型別(資料型態):
紅色的型別是之前上課時經常使用的...但是位元組的大小會影響程式運算速度喔!
寫程式時可以依據範圍需求選擇位元組更小的適用型別...
例如:要宣告一個變數作為月份...數值範圍為1~12正整數...就可以選擇Byte來代替Integer...
變數宣告方式:
Dim strName as String="分享2U"
Dim bytAge as Byte=35
| 型別 | 說明 | 位元組 | 範圍 |
| Boolean | 布林值 | 2 | True或False |
| Byte | 正整數 | 1 | 0~255 |
| SByte | 整數 | 1 | -128~127 |
| Char | 字元 | 2 | 0~65535 |
| Short | 短整數 | 2 | -32768~32767 |
| UShort | 正短整數 | 2 | 0~65535 |
| Integer | 整數 | 4 | -2147483648~2147483647 |
| UInteger | 正整數 | 4 | 0~4294967295 |
| Long | 長整數 | 8 | -9223372036854775808~9223372036854775807 |
| ULong | 正長整數 | 8 | 0~18446744073709551615 |
| Single | 單精度的浮點數 | 4 | 負值範圍為-3.4028235E+38~-1.401298E-45 ; 正值的範圍為1.401298E-45~3.4028235E+38 |
| Double | 雙精度的浮點數 | 8 | 負值範圍為-1.79769313486231570E+308~ -4.94065645841246544E-324 正值範圍為4.94065645841246544E-324~ 1.79769313486231570E+308 |
| Decimal | 數值 | 16 | 0~+/-79228162514264337593543950335沒有小數 , 0~+/-79228162514264337593543950335帶28位小數 最小的非零值為+/-0.0000000000000000000000000001(+/-1E-28) |
| Date | 日期 | 8 | 0001年1月1日~9999年12月31日 |
| String | 字串 | 依平台 | 0~2百萬Unicode字元 |
| Object | 物件 | 4 | 物件型態變數可以儲存各種資料型態的值 |
紅色的型別是之前上課時經常使用的...但是位元組的大小會影響程式運算速度喔!
寫程式時可以依據範圍需求選擇位元組更小的適用型別...
例如:要宣告一個變數作為月份...數值範圍為1~12正整數...就可以選擇Byte來代替Integer...
變數宣告方式:
Dim strName as String="分享2U"
Dim bytAge as Byte=35
訂閱:
文章 (Atom)