VB程式設計經驗點滴
---- 欣 喜 看 到VB 編 程 人 和 愛 好 者 的 陣 營 越 來 越 大 了, 而 現 在VB6 也 已 經 橫 空 出 世 了, 在 這 裡 獻 上 自 己 的 一 點VB5 編 程 的 小 經 驗, 權 當 和 廣 大 朋 友 交 流 交 流, 不 妥 之 處 多 多 指 教。
---- 1. 在 打 開 對 話 框 中 同 時 顯 示 多 種 類 型 的 文 件
---- 在 打 開 文 件 時, 我 們 往 往 會 用 到 打 開 對 話 框CommonDialog, 要 把 文 件 類 型 限 制 在 一 定 的 範 圍 內 得 用CommonDialog 的Filter 屬 性, 比 如 將Filter 屬 性 設 置 為"*.TXT|*.TXT" 那 麼 打 開 對 話 框 只 顯 示 文 本 文 件。 如 果 要 同 時 顯 示 幾 種 類 型 的 文 件, 比 如 要 顯 示 所 有 的 圖 形 文 件, 其 設 置 方 法 為 將Filter 屬 性 設 置 為" 圖 片 文 件|*.bmp;*.jpg;*.gif", 這 樣 打 開 對 話 框 便 能 同 時 顯 示bmp 文 件,jpg 文 件,gif 文 件。 這 個 問 題 似 乎 很 簡 單, 可 筆 者 曾 經 為 這 個 問 題 查 閱 了 大 量 關 於VB 的 書 籍, 但 是 都 未 找 到。
---- 2. 注 意 最 後 編 譯 的 問 題
---- 如 果 編 程 中 用 到 數 據 庫 控 件, 在 最 後 編 譯 時, 一 定 要 注 意 數 據 庫 控 件 的Datebase 屬 性, 否 則 會 在 制 作 安 裝 盤, 裝 到 其 它 機 子 上 時 遇 到 問 題。 原 因 是Datebase 屬 性 中 存 在 的 路 徑 問 題。 編 譯 前 得 將 其 路 徑 設 置 為 當 前 路 徑。 如 果 用 的 是ACCESS 數 據 庫, 將Datebase 屬 性 中 的 路 徑 信 息 去 掉 便 可 以 了, 比 如, 原 先 為"C:\money\money.mdb", 則 改 為"money.mdb"。 如 果 是FOXPRO 數 據, 將Datebase 屬 性 改 為"." 便 可 以 了,"." 就 代 表 當 前 目 錄。 比 如, 原 先 為"C:\money", 改 為"." 便 可 以 了。 用 其 它 數 據 庫 的 數 據 的 方 法 差 不 多。 當 然 制 作 安 裝 盤 時 得 把 用 到 的 數 據 文 件 添 加 進 去, 這 裡 不 在 詳 敘。
---- 3. 在 程 序 中 調 用 其 它 程 序
---- 在DOS 下 大 家 知 道 可 以 用system() 函 數 來 調 用 其 它 的 可 執 行 文 件, 那 麼 在WINDOWS 下 怎 麼 去 調 用 其 它 的 軟 件 呢? 其 實 在WINDOWS 的API 中 就 有 這 樣 的 函 數。 函 數 說 明 如 下:
UINT WinExec(
LPCSTR lpszCmdLine, // 命令列地址
UINT fuCmdShow //剛開啟時的視窗型別
);
---- 在 使 用 時 要 加 如 下 聲 明:
Private Declare Function WinExec Lib "kernel32"
(ByVal lpCmdLine As String,
ByVal nCmdShow As Long) As Long
---- 如 果 想 在 程 序 中 調 用Windows 中 自 帶 的 計 算 器, 用 下 面 的 代 碼 即 可 實 現:
WinExec "c:/windows/calc.exe", 10
---- 參 數10 使 啟 動 的 窗 口 處 於 缺 省 狀 態, 若 使 用3 使 啟 動 的 窗 口 最 大 化, 若 使 用6 使 啟 動 的 窗 口 最 小 化。 實 際 上 許 多 商 用 軟 件 的 計 算 器 都 是 這 樣 直 接 調 用Windows 自 帶 的 計 算 器 的。
---- 4. 輸 入 數 據 的 合 法 性 檢 測
---- 一 個 軟 件 經 常 需 要 用 戶 輸 入 一 些 數 據, 而 這 些 數 據 往 往 需 要 一 定 格 式, 比 如 輸 入 的 是 一 個 整 形, 或 是 一 個 日 期 等, 這 樣 作 為 軟 件 的 設 計 者 必 須 想 到 用 戶 出 錯 的 可 能 性, 在 用 戶 出 錯 時 給 予 提 示 和 糾 正。 只 有 這 樣 你 的 程 序 才 是 一 個 好 程 序。 在VB 編 程 中 數 據 的 合 法 性 檢 測 有 很 多 的 方 法, 比 如 你 可 以 利 用 一 些 函 數 來 檢 測 數 據 的 合 法 性,IsDate 就 可 以 用 於 檢 測 日 期 型 的 數 據。 筆 者 發 現 只 要 巧 妙 地 應 用VB 中 的 錯 誤 陷 阱 技 術 和VB 的 不 同 類 型 數 據 間 的 自 動 轉 換 功 能 就 能 很 好 地 實 現 數 據 的 合 法 性 檢 測, 編 程 簡 單 而 且 效 果 很 好, 能 檢 測 各 種 類 型 的 數 據。
---- 通 常 輸 入 的 如 果 是 字 符 串 就 不 需 要 檢 測, 但 如 果 要 求 輸 入 的 是 整 形 或 貨 幣 形 等 就 必 須 進 行 一 定 的 檢 測。 下 面 就 先 講 一 下 整 形 的 檢 測。 比 如 現 有 一 文 本 框(Text1), 要 求 輸 入 的 是 一 個 整 數, 我 們 可 以 在 它 的LostFocus 事 件 中 進 行 檢 測, 代 碼 如 下:
Private Sub Text1_LostFocus()
Dim i As Integer '定義一個整形i
On Error GoTo ERROR1
'設定錯誤陷阱,如果Text1.Text不是整數跳到ERROR1
i = Text1.Text
'這裡可以做其它處理
Exit Sub
ERROR1:
MsgBox ("請輸入一個整數")
Text1.SetFocus
End Sub
---- 這 樣 就 可 以 實 現 合 法 性 檢 測 了, 如 果 要 的 是 浮 點 就 將i 定 義 成 浮 點 就 可 以 了, 即:
Private Sub Text1_LostFocus()
Dim i As Single
On Error GoTo ERROR1
i = Text1.Text
Exit Sub
ERROR1:
MsgBox ("請輸入一個單精度浮點數")
Text1.SetFocus
End Sub
---- 同 理, 如 果 要 的 是 日 期 就 將i 定 義 成 日 期 就 可 以 了, 就 是 說, 要 什 麼 樣 的 數 據 就 將i 定 義 成 什 麼 樣 的 數 據 類 型 就 可 以 了。
---- 當 然 你 不 一 定 要 在LostFocus 事 件 中 對 數 據 的 合 法 性 進 行 檢 測, 如 果 是 制 作 數 據 庫 應 用 程 序 完 全 可 以 在 數 據 被 添 加 到 數 據 庫 之 前 再 對 數 據 進 行 檢 測, 這 樣 對 用 戶 將 更 加 方 便。
---- 5. 窗 體 以 外 光 標 位 置 的 探 測 和 設 置
---- 用VB 編 程 時 想 獲 得 窗 體 上 的 光 標 位 置 很 容 易, 用MouseMove 事 件 的 參 數 就 可 得 到 光 標 在 窗 體 上 的 位 置。 然 而, 如 果 想 得 到 窗 體 以 外 的 光 標 位 置 或 想 在 程 序 中 設 置 光 標 位 置, 那 麼 則 只 好 求 助 於API 了, 還 好, 這 幾 個API 函 數 非 常 簡 單, 即 使 剛 接 觸 編 程 的 朋 友 也 能 學 會 使 用。 這 裡 筆 者 做 一 個 簡 單 的 介 紹, 希 望 和 大 家 共 享 使 用API 的 樂 趣。
---- 先 介 紹 一 下 有 關 的API 的 結 構 和 函 數, 首 先 看 一 下 獲 得 光 標 位 置 的 這 個 函 數, 其 聲 明 如 下:
BOOL GetCursorPos(
LPPOINT lpPoint
//指向POINT結構的指標,其中包含所獲的游標的位置資訊
);
再來看一下POINT的結構:
typedef struct tagPOINT { // pt
LONG x;
LONG y;
} POINT;
真是非常簡單,最後看一下設定游標位置的函式:
BOOL SetCursorPos(
int X, //要設定位置在螢幕上的橫座標
int Y //要設定位置在螢幕上的縱座標
);
---- 在VB 中 使 用API 就 需 要 一 定 的 說 明 了, 還 好VB 提 供 了 一 個"API 文 本 查 看 器", 你 只 要 將 所 要 用 的API 的 聲 明 復 制 一 下 就 可 以 用 了。 我 們 來 做 一 個 簡 單 的 例 子 來 試 一 試。 先 建 立 一 個 項 目, 往 窗 體(Form1) 上 放 置 兩 個TextBox 控 件(Text1 和Text2), 一 個CommandButton 控 件(Command1) 和 一 個Timer 控 件(Timer1)。 將Timer1 的Interval 屬 性 改 為1000。 這 個 例 子 的 功 能 是 每 隔 一 秒 鍾 在Text1 和Text2 中 顯 示 光 標 的 位 置 坐 標, 按Command1 按 鈕 光 標 將 按 一 定 的 規 律 在 屏 幕 上 漂 移。 所 有 的 代 碼 如 下:
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function GetCursorPos
Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function SetCursorPos
Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
'以上為API及資料結構的宣告
Private Sub Command1_Click()
Dim i As Integer
Dim j As Integer
For i = 0 To Screen.Width
SetCursorPos i, 100 '設定游標位置
For j = 0 To 1000 '迴圈延時
Next j
Next i
End Sub
Private Sub Timer1_Timer()
Dim point1 As POINTAPI
GetCursorPos point1 '獲得游標位置
Text1.Text = point1.x '顯示游標位置X
Text2.Text = point1.y '顯示游標位置Y
End Sub
---- 輸 入 完 畢 後 存 盤 運 行 就 行 了, 可 以 發 現 在VB 中 是 很 容 易 實 現 的。
---- 6.Windows 各 種 路 徑 的 獲 得
---- 在WINDOWS 下 編 程 經 常 需 要 在 程 序 中 獲 得 各 種 路 徑, 比 如 當 前 的 工 作 路 徑, 系 統 的 路 徑, 等 各 種 路 徑。 在WINDOWS 的API 中 提 供 了 齊 全 的API 函 數 供 我 們 調 用。
---- 先 來 看 一 下 這 幾 個API 函 數 的 說 明:
---- (1). DWORD GetCurrentDirectory(
DWORD nBufferLength, //接收目錄的字串的長度
LPTSTR lpBuffer //接收目錄的字串的地址
);
---- 通 過 調 用 這 個 函 數 將 獲 得 當 前 的 目 錄, 如 果 調 用 失 敗 此 函 數 將 返 回 零。 調 用 這 個 函 數 時 應 將nBufferLength 參 數 設 足 夠 大, 接 收 目 錄 的 字 符 串 當 然 也 要 有 這 麼 長。 詳 細 用 法 請 看 例 子。 另 外 用SetCurrentDirectory() 函 數 可 以 設 置 當 前 目 錄。
---- (2). UINT GetSystemDirectory(
LPTSTR lpBuffer, //接收目錄的字串的地址
UINT uSize // 接收目錄的字串的長度
);
---- 通 過 調 用 這 個 函 數 可 獲 得 系 統 的 目 錄, 如 果 調 用 失 敗 此 函 數 將 返 回 零。
---- 3. UINT GetWindowsDirectory(
LPTSTR lpBuffer, //接收目錄的字串的地址
UINT uSize // 接收目錄的字串的長度
);
---- 通 過 調 用 這 個 函 數 可 獲 得WINDOWS 目 錄, 如 果 調 用 失 敗 將 返 回 零。 關 於 這 個 函 數 和 第 二 個 函 數 的 區 別, 通 過 下 面 的 例 子 你 一 定 會 非 常 清 楚。
---- 下 面 用VB 來 實 現。 首 先 當 然 要 先 把API 的 聲 明 加 到 代 碼 中, 開 始 一 個 新 項 目, 在 窗 體(Form1) 上 放 上 三 個 按 鈕(Command1,Command2,Command3)。 這 個 例 子 的 功 能 是 單 擊 按 鈕 用MSGBOX 顯 示 得 到 的 路 徑。
---- 筆 者 發 現 不 能 簡 單 地 復 制VB5 的API 文 本 查 看 器 中 關 於 上 面 幾 個API 的 聲 明, 要 做 一 定 的 修 改, 要 在 每 個 函 數 名 後 加 一 個"A", 所 有 代 碼 如 下。
Private Declare Function GetCurrentDirectoryA
Lib "kernel32" (ByVal nBufferLength As Long,
ByVal lpBuffer As String) As Long
Private Declare Function GetWindowsDirectoryA
Lib "kernel32" (ByVal lpBuffer As String,
ByVal nSize As Long) As Long
Private Declare Function GetSystemDirectoryA
Lib "kernel32" (ByVal lpBuffer As String,
ByVal nSize As Long) As Long
Private Sub Command1_Click()
Dim Path As String * 255
GetCurrentDirectoryA(Len(Path), Path) '獲取當前路徑
MsgBox (Path)
End Sub
Private Sub Command2_Click()
Dim Path As String * 255
GetWindowsDirectoryA(Path, Len(Path)) '獲取WINDOWS路徑
MsgBox (Path)
End Sub
Private Sub Command3_Click()
Dim Path As String * 255
GetSystemDirectoryA(Path, Len(Path)) '獲取SYSTEM路徑
MsgBox (Path)
End Sub
---- 7. 錯 誤 陷 阱 中 要 注 意 的 問 題
---- 筆 者 發 現 在 循 環 中 應 用 錯 誤 陷 阱 技 術 有 一 定 的 問 題。 比 如 下 面 這 一 段 程 序:
Private Sub Command1_Click()
Dim I As Integer
Dim J As Integer
On Error GoTo JERROR
For I = 0 To 3
MsgBox (I)
J = 10000 * 10000 '讓J發生溢位錯誤
JERROR:
Next I
End Sub
---- 按 通 常 的 分 析, 這 段 程 序 在 運 行 時 應 該 是 不 會 出 現 錯 誤 的, 但 實 際 運 行 一 下 可 以 發 現, 當I 等 於1 時 發 生 溢 出 錯 誤。 這 就 是 說 錯 誤 陷 阱 只 在 循 環 的 第 一 次 有 效。 這 個 問 題 很 值 得 注 意, 否 則 會 給 程 序 留 下 一 個 很 大 的 臭 蟲。
---- 1. 在 打 開 對 話 框 中 同 時 顯 示 多 種 類 型 的 文 件
---- 在 打 開 文 件 時, 我 們 往 往 會 用 到 打 開 對 話 框CommonDialog, 要 把 文 件 類 型 限 制 在 一 定 的 範 圍 內 得 用CommonDialog 的Filter 屬 性, 比 如 將Filter 屬 性 設 置 為"*.TXT|*.TXT" 那 麼 打 開 對 話 框 只 顯 示 文 本 文 件。 如 果 要 同 時 顯 示 幾 種 類 型 的 文 件, 比 如 要 顯 示 所 有 的 圖 形 文 件, 其 設 置 方 法 為 將Filter 屬 性 設 置 為" 圖 片 文 件|*.bmp;*.jpg;*.gif", 這 樣 打 開 對 話 框 便 能 同 時 顯 示bmp 文 件,jpg 文 件,gif 文 件。 這 個 問 題 似 乎 很 簡 單, 可 筆 者 曾 經 為 這 個 問 題 查 閱 了 大 量 關 於VB 的 書 籍, 但 是 都 未 找 到。
---- 2. 注 意 最 後 編 譯 的 問 題
---- 如 果 編 程 中 用 到 數 據 庫 控 件, 在 最 後 編 譯 時, 一 定 要 注 意 數 據 庫 控 件 的Datebase 屬 性, 否 則 會 在 制 作 安 裝 盤, 裝 到 其 它 機 子 上 時 遇 到 問 題。 原 因 是Datebase 屬 性 中 存 在 的 路 徑 問 題。 編 譯 前 得 將 其 路 徑 設 置 為 當 前 路 徑。 如 果 用 的 是ACCESS 數 據 庫, 將Datebase 屬 性 中 的 路 徑 信 息 去 掉 便 可 以 了, 比 如, 原 先 為"C:\money\money.mdb", 則 改 為"money.mdb"。 如 果 是FOXPRO 數 據, 將Datebase 屬 性 改 為"." 便 可 以 了,"." 就 代 表 當 前 目 錄。 比 如, 原 先 為"C:\money", 改 為"." 便 可 以 了。 用 其 它 數 據 庫 的 數 據 的 方 法 差 不 多。 當 然 制 作 安 裝 盤 時 得 把 用 到 的 數 據 文 件 添 加 進 去, 這 裡 不 在 詳 敘。
---- 3. 在 程 序 中 調 用 其 它 程 序
---- 在DOS 下 大 家 知 道 可 以 用system() 函 數 來 調 用 其 它 的 可 執 行 文 件, 那 麼 在WINDOWS 下 怎 麼 去 調 用 其 它 的 軟 件 呢? 其 實 在WINDOWS 的API 中 就 有 這 樣 的 函 數。 函 數 說 明 如 下:
UINT WinExec(
LPCSTR lpszCmdLine, // 命令列地址
UINT fuCmdShow //剛開啟時的視窗型別
);
---- 在 使 用 時 要 加 如 下 聲 明:
Private Declare Function WinExec Lib "kernel32"
(ByVal lpCmdLine As String,
ByVal nCmdShow As Long) As Long
---- 如 果 想 在 程 序 中 調 用Windows 中 自 帶 的 計 算 器, 用 下 面 的 代 碼 即 可 實 現:
WinExec "c:/windows/calc.exe", 10
---- 參 數10 使 啟 動 的 窗 口 處 於 缺 省 狀 態, 若 使 用3 使 啟 動 的 窗 口 最 大 化, 若 使 用6 使 啟 動 的 窗 口 最 小 化。 實 際 上 許 多 商 用 軟 件 的 計 算 器 都 是 這 樣 直 接 調 用Windows 自 帶 的 計 算 器 的。
---- 4. 輸 入 數 據 的 合 法 性 檢 測
---- 一 個 軟 件 經 常 需 要 用 戶 輸 入 一 些 數 據, 而 這 些 數 據 往 往 需 要 一 定 格 式, 比 如 輸 入 的 是 一 個 整 形, 或 是 一 個 日 期 等, 這 樣 作 為 軟 件 的 設 計 者 必 須 想 到 用 戶 出 錯 的 可 能 性, 在 用 戶 出 錯 時 給 予 提 示 和 糾 正。 只 有 這 樣 你 的 程 序 才 是 一 個 好 程 序。 在VB 編 程 中 數 據 的 合 法 性 檢 測 有 很 多 的 方 法, 比 如 你 可 以 利 用 一 些 函 數 來 檢 測 數 據 的 合 法 性,IsDate 就 可 以 用 於 檢 測 日 期 型 的 數 據。 筆 者 發 現 只 要 巧 妙 地 應 用VB 中 的 錯 誤 陷 阱 技 術 和VB 的 不 同 類 型 數 據 間 的 自 動 轉 換 功 能 就 能 很 好 地 實 現 數 據 的 合 法 性 檢 測, 編 程 簡 單 而 且 效 果 很 好, 能 檢 測 各 種 類 型 的 數 據。
---- 通 常 輸 入 的 如 果 是 字 符 串 就 不 需 要 檢 測, 但 如 果 要 求 輸 入 的 是 整 形 或 貨 幣 形 等 就 必 須 進 行 一 定 的 檢 測。 下 面 就 先 講 一 下 整 形 的 檢 測。 比 如 現 有 一 文 本 框(Text1), 要 求 輸 入 的 是 一 個 整 數, 我 們 可 以 在 它 的LostFocus 事 件 中 進 行 檢 測, 代 碼 如 下:
Private Sub Text1_LostFocus()
Dim i As Integer '定義一個整形i
On Error GoTo ERROR1
'設定錯誤陷阱,如果Text1.Text不是整數跳到ERROR1
i = Text1.Text
'這裡可以做其它處理
Exit Sub
ERROR1:
MsgBox ("請輸入一個整數")
Text1.SetFocus
End Sub
---- 這 樣 就 可 以 實 現 合 法 性 檢 測 了, 如 果 要 的 是 浮 點 就 將i 定 義 成 浮 點 就 可 以 了, 即:
Private Sub Text1_LostFocus()
Dim i As Single
On Error GoTo ERROR1
i = Text1.Text
Exit Sub
ERROR1:
MsgBox ("請輸入一個單精度浮點數")
Text1.SetFocus
End Sub
---- 同 理, 如 果 要 的 是 日 期 就 將i 定 義 成 日 期 就 可 以 了, 就 是 說, 要 什 麼 樣 的 數 據 就 將i 定 義 成 什 麼 樣 的 數 據 類 型 就 可 以 了。
---- 當 然 你 不 一 定 要 在LostFocus 事 件 中 對 數 據 的 合 法 性 進 行 檢 測, 如 果 是 制 作 數 據 庫 應 用 程 序 完 全 可 以 在 數 據 被 添 加 到 數 據 庫 之 前 再 對 數 據 進 行 檢 測, 這 樣 對 用 戶 將 更 加 方 便。
---- 5. 窗 體 以 外 光 標 位 置 的 探 測 和 設 置
---- 用VB 編 程 時 想 獲 得 窗 體 上 的 光 標 位 置 很 容 易, 用MouseMove 事 件 的 參 數 就 可 得 到 光 標 在 窗 體 上 的 位 置。 然 而, 如 果 想 得 到 窗 體 以 外 的 光 標 位 置 或 想 在 程 序 中 設 置 光 標 位 置, 那 麼 則 只 好 求 助 於API 了, 還 好, 這 幾 個API 函 數 非 常 簡 單, 即 使 剛 接 觸 編 程 的 朋 友 也 能 學 會 使 用。 這 裡 筆 者 做 一 個 簡 單 的 介 紹, 希 望 和 大 家 共 享 使 用API 的 樂 趣。
---- 先 介 紹 一 下 有 關 的API 的 結 構 和 函 數, 首 先 看 一 下 獲 得 光 標 位 置 的 這 個 函 數, 其 聲 明 如 下:
BOOL GetCursorPos(
LPPOINT lpPoint
//指向POINT結構的指標,其中包含所獲的游標的位置資訊
);
再來看一下POINT的結構:
typedef struct tagPOINT { // pt
LONG x;
LONG y;
} POINT;
真是非常簡單,最後看一下設定游標位置的函式:
BOOL SetCursorPos(
int X, //要設定位置在螢幕上的橫座標
int Y //要設定位置在螢幕上的縱座標
);
---- 在VB 中 使 用API 就 需 要 一 定 的 說 明 了, 還 好VB 提 供 了 一 個"API 文 本 查 看 器", 你 只 要 將 所 要 用 的API 的 聲 明 復 制 一 下 就 可 以 用 了。 我 們 來 做 一 個 簡 單 的 例 子 來 試 一 試。 先 建 立 一 個 項 目, 往 窗 體(Form1) 上 放 置 兩 個TextBox 控 件(Text1 和Text2), 一 個CommandButton 控 件(Command1) 和 一 個Timer 控 件(Timer1)。 將Timer1 的Interval 屬 性 改 為1000。 這 個 例 子 的 功 能 是 每 隔 一 秒 鍾 在Text1 和Text2 中 顯 示 光 標 的 位 置 坐 標, 按Command1 按 鈕 光 標 將 按 一 定 的 規 律 在 屏 幕 上 漂 移。 所 有 的 代 碼 如 下:
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function GetCursorPos
Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function SetCursorPos
Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
'以上為API及資料結構的宣告
Private Sub Command1_Click()
Dim i As Integer
Dim j As Integer
For i = 0 To Screen.Width
SetCursorPos i, 100 '設定游標位置
For j = 0 To 1000 '迴圈延時
Next j
Next i
End Sub
Private Sub Timer1_Timer()
Dim point1 As POINTAPI
GetCursorPos point1 '獲得游標位置
Text1.Text = point1.x '顯示游標位置X
Text2.Text = point1.y '顯示游標位置Y
End Sub
---- 輸 入 完 畢 後 存 盤 運 行 就 行 了, 可 以 發 現 在VB 中 是 很 容 易 實 現 的。
---- 6.Windows 各 種 路 徑 的 獲 得
---- 在WINDOWS 下 編 程 經 常 需 要 在 程 序 中 獲 得 各 種 路 徑, 比 如 當 前 的 工 作 路 徑, 系 統 的 路 徑, 等 各 種 路 徑。 在WINDOWS 的API 中 提 供 了 齊 全 的API 函 數 供 我 們 調 用。
---- 先 來 看 一 下 這 幾 個API 函 數 的 說 明:
---- (1). DWORD GetCurrentDirectory(
DWORD nBufferLength, //接收目錄的字串的長度
LPTSTR lpBuffer //接收目錄的字串的地址
);
---- 通 過 調 用 這 個 函 數 將 獲 得 當 前 的 目 錄, 如 果 調 用 失 敗 此 函 數 將 返 回 零。 調 用 這 個 函 數 時 應 將nBufferLength 參 數 設 足 夠 大, 接 收 目 錄 的 字 符 串 當 然 也 要 有 這 麼 長。 詳 細 用 法 請 看 例 子。 另 外 用SetCurrentDirectory() 函 數 可 以 設 置 當 前 目 錄。
---- (2). UINT GetSystemDirectory(
LPTSTR lpBuffer, //接收目錄的字串的地址
UINT uSize // 接收目錄的字串的長度
);
---- 通 過 調 用 這 個 函 數 可 獲 得 系 統 的 目 錄, 如 果 調 用 失 敗 此 函 數 將 返 回 零。
---- 3. UINT GetWindowsDirectory(
LPTSTR lpBuffer, //接收目錄的字串的地址
UINT uSize // 接收目錄的字串的長度
);
---- 通 過 調 用 這 個 函 數 可 獲 得WINDOWS 目 錄, 如 果 調 用 失 敗 將 返 回 零。 關 於 這 個 函 數 和 第 二 個 函 數 的 區 別, 通 過 下 面 的 例 子 你 一 定 會 非 常 清 楚。
---- 下 面 用VB 來 實 現。 首 先 當 然 要 先 把API 的 聲 明 加 到 代 碼 中, 開 始 一 個 新 項 目, 在 窗 體(Form1) 上 放 上 三 個 按 鈕(Command1,Command2,Command3)。 這 個 例 子 的 功 能 是 單 擊 按 鈕 用MSGBOX 顯 示 得 到 的 路 徑。
---- 筆 者 發 現 不 能 簡 單 地 復 制VB5 的API 文 本 查 看 器 中 關 於 上 面 幾 個API 的 聲 明, 要 做 一 定 的 修 改, 要 在 每 個 函 數 名 後 加 一 個"A", 所 有 代 碼 如 下。
Private Declare Function GetCurrentDirectoryA
Lib "kernel32" (ByVal nBufferLength As Long,
ByVal lpBuffer As String) As Long
Private Declare Function GetWindowsDirectoryA
Lib "kernel32" (ByVal lpBuffer As String,
ByVal nSize As Long) As Long
Private Declare Function GetSystemDirectoryA
Lib "kernel32" (ByVal lpBuffer As String,
ByVal nSize As Long) As Long
Private Sub Command1_Click()
Dim Path As String * 255
GetCurrentDirectoryA(Len(Path), Path) '獲取當前路徑
MsgBox (Path)
End Sub
Private Sub Command2_Click()
Dim Path As String * 255
GetWindowsDirectoryA(Path, Len(Path)) '獲取WINDOWS路徑
MsgBox (Path)
End Sub
Private Sub Command3_Click()
Dim Path As String * 255
GetSystemDirectoryA(Path, Len(Path)) '獲取SYSTEM路徑
MsgBox (Path)
End Sub
---- 7. 錯 誤 陷 阱 中 要 注 意 的 問 題
---- 筆 者 發 現 在 循 環 中 應 用 錯 誤 陷 阱 技 術 有 一 定 的 問 題。 比 如 下 面 這 一 段 程 序:
Private Sub Command1_Click()
Dim I As Integer
Dim J As Integer
On Error GoTo JERROR
For I = 0 To 3
MsgBox (I)
J = 10000 * 10000 '讓J發生溢位錯誤
JERROR:
Next I
End Sub
---- 按 通 常 的 分 析, 這 段 程 序 在 運 行 時 應 該 是 不 會 出 現 錯 誤 的, 但 實 際 運 行 一 下 可 以 發 現, 當I 等 於1 時 發 生 溢 出 錯 誤。 這 就 是 說 錯 誤 陷 阱 只 在 循 環 的 第 一 次 有 效。 這 個 問 題 很 值 得 注 意, 否 則 會 給 程 序 留 下 一 個 很 大 的 臭 蟲。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11411056/viewspace-733995/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- VB程式介面設計經驗點滴 (轉)
- Oracle程式設計經驗及維護點滴(轉)Oracle程式設計
- VB程式設計中的一些經驗 (轉)程式設計
- Win32ASM經驗點滴 (轉)Win32ASM
- 程式設計技術點滴一(Delphi)程式設計
- EVC程式設計點滴四 - 鉤子C程式程式設計
- 軟體工程經驗點滴之程式碼易複製性軟體工程
- Linux下燒錄CDR經驗點滴(轉)Linux
- RedHatLinux使用者管理經驗點滴(轉)RedhatLinux
- 程式設計技術點滴三(C/C++)程式設計C++
- 程式設計師面試經驗程式設計師面試
- plsql 程式設計經驗---引用SQL程式設計
- 給程式設計師的幾點程式設計經驗----《編寫高質量程式碼》程式設計師
- VB資料庫程式設計的幾點心得 (轉)資料庫程式設計
- 程式設計師筆記(知識)管理的一點經驗程式設計師筆記
- 程式設計師程式設計知識經驗總結程式設計師
- 程式設計師的管理經驗程式設計師
- DB2使用經驗點滴(2008/10/31更新)DB2
- Excel 的VB程式設計 (轉)Excel程式設計
- 大眾點評點餐小程式開發經驗 - 選單聯動設計
- 程式設計師自我修養之程式設計經驗總結程式設計師
- 程式設計師:增加程式設計經驗的3種途徑程式設計師
- 計算機課程程式設計經驗分享計算機程式設計
- 程式設計入門到進大廠,分享一點學習經驗程式設計
- Delphi實用程式設計經驗二 (轉)程式設計
- 程式設計二三事 - 如何從點滴做起開發高質量專案程式設計
- 十年程式設計經驗總結,三點技巧幫你提升程式碼能力!程式設計
- 回顧15年程式設計師生涯,我總結的7點經驗程式設計師
- 扎心!一個3年經驗的程式設計師經驗之談!程式設計師
- FIFO設計驗證經驗談
- asm點滴ASM
- oracle點滴Oracle
- 小程式開發點滴積累
- 【譯】BerkeleyDB設計經驗
- 30多年程式設計師生涯經驗總結程式設計師
- 高階程式設計師考試經驗 (轉)程式設計師
- Delphi實用程式設計經驗二則 (轉)程式設計
- VB的API程式設計精粹(1) (轉)API程式設計