001:請 問 如 何 在 VB 中 做 一 個 圖 文 並 茂 的 圖 文 框 ?
002:有 些 書 的 作 者 總 喜 歡 在 Form_Unload 事 件 程 序 中 寫 入 End 敘 述 …
003:我 想 寫 一 個 秀 圖 程 式 , 初 步 構 想 是 使 用 影 像 框 (Image)元 件 , 但 …
005:我 想 在 4:30 PM 自 動 執 行 一 些 程 式 , 因 此 利 用 Timer 元 件 的 …
006:我 想 用 Timer 做 長 時 間 的 定 時 , 例 如 5 分 鐘 , 但 Interval 屬 性 …
007:我 在 VB 3.0 底 下 可 以 利 用 以 下 敘 述 判 別 中 文 字 …
008:我 在 撰 寫 資 料 庫 程 式 時 , 根 據 使 用 手 冊 來 宣 告 必 要 的 變 數 …
009:選 取 功 能 表 的 『 Tools/References』 (工 具 /物 件 引 用 管 理 員 )之 後 …
010:請 問 在 VB 程 式 語 言 中 , 如 何 將 一 個 已 寫 好 的 32 位 元 程 式 …
011:我 使 用 Clipper設 計 資 料 庫 程 式 , 目 前 想 學 習 for Windows 的 東 西 …
![]() |
001 | 請 問 如 何 在 VB 中 做 一 個 圖 文 並 茂 的 圖 文 框 ? |
![]() |
001 | 表 單 (Form)本 身 就 可 以 輸 出 文 字 與 圖 形 , 例 如
Print 敘 述 可 輸 出 文 字 , Pset、 Line、 Circle 等 敘 述 可 輸 出 圖
形 , PaintPicture 可 輸 出 圖 片 。 如 果 不 想 使 用 表 單 , 而 要 一
個 獨 立 的 圖 文 框 , 則 圖 片 盒 (PictureBox)是 最 佳 的 選 擇 , 圖
片 盒 雖 名 為 『 圖 片 』 盒 , 但 凡 是 使 用 於 表 單 的 輸 出 敘 述
(Print 、 Pset、 Line、 Circle、 PaintPicture 等 )也 都 可 以 用 在 圖
片 盒 上 , 用 法 上 只 要 在 敘 述 (方 法 )前 面 加 上 『 圖 片 盒 名
稱 』 即 可 , 例 如 :
|
![]() |
002 | 有 些 書 的 作 者 總 喜 歡 在 Form_Unload 事 件 程 序 中 寫 入 End
敘 述 , 如 下 :
如 果 我 把 Form_Unload 裡 面 的 End 敘 述 去 掉 會 怎 麼 樣 ? |
![]() |
002 | 如 果 您 的 程 式 只 有 一 個 表 單 , 並 且 以 這 個 表 單 作 為 起
始 表 單 , 則 可 以 省 略 End 敘 述 , 因 為 表 單 被 關 掉 時 , 程 式
會 自 動 結 束 。
但 如 果 您 的 程 式 用 了 兩 個 (以 上 )的 表 單 , 而 以 其 中 一 個 表 單 為 主 視 窗 (當 這 個 視 窗 被 關 掉 時 也 要 結 束 程 式 ), 則 要 在 這 個 表 單 的 Unload 事 件 程 序 中 加 入 End 敘 述 , 其 他 非 主 視 窗 的 表 單 則 不 要 加 End 敘 述 。 |
![]() |
003 | 我 想 寫 一 個 秀 圖 程 式 , 初 步 構 想 是 使 用 影 像 框 (Image)元 件 , 但 遭 遇 大 圖 片 可 能 超 過 視 窗 的 窘 境 , 而 我 又 不 想 設 定 Stretch 屬 性 以 伸 縮 圖 片 , 因 為 那 將 使 圖 片 失 真 , 故 我 想 用 垂 直 及 水 平 捲 動 軸 觀 看 圖 片 超 出 的 部 份 , 請 問 我 該 怎 麼 做 ? |
![]() |
003 | 必 須 使 用 影 像 框 、 圖 片 盒 、 水 平 捲 動 軸 、 及 垂 直 捲 動
軸 等 4 種 元 件 , 而 這 4 種 元 件 的 功 用 分 別 是 : 影 像 框 用 來
顯 示 圖 片 , 圖 片 盒 用 來 框 住 影 像 框 , 水 平 與 垂 直 捲 動 軸
用 來 改 變 影 像 框 位 於 圖 片 盒 的 位 置 , 進 而 達 到 瀏 覽 圖 片
各 個 區 域 的 功 能 。
您 可 以 在 Visual Basic 實 例 領 航 手 冊 一 書 的 第 12 章 「 圖 片 檢 視 程 式 」 找 到 詳 盡 的 範 例 。 |
![]() |
004 | 請 推 薦 VB 的 中 文 書 籍 。 |
![]() |
004 | 這 是 筆 者 開 放 e-mail 答 詢 VB 問 題 以 來 被 問 到 最 多 的 問
題 , 卻 也 是 最 難 回 答 的 問 題 , 主 要 原 因 是 因 為 筆 者 VB 的
知 識 有 1/3 來 自 過 去 Windows 程 式 設 計 的 經 驗 , 有 1/3 來 自 VB
程 式 的 開 發 經 驗 , 另 外 1/3 才 是 來 自 書 籍 及 技 術 文 件 的 研
讀 , 而 所 閱 讀 之 書 籍 及 技 術 文 件 又 幾 乎 為 原 文 資 訊 , 所
以 手 上 的 VB 中 文 書 了 了 可 數 , 故 無 從 比 較 再 推 薦 最 好 的
VB 書 籍 。
不 過 對 於 完 全 的 VB 初 學 者 , 倒 是 十 分 有 信 心 地 推 薦 筆 者 所 撰 寫 的 新 觀 念 的 Visual Basic 4.0 中 文 版 教 本 , 這 本 書 是 筆 者 累 積 了 許 多 指 導 初 學 者 進 入 VB 的 經 驗 後 才 開 始 撰 寫 的 , 寫 作 期 間 又 蒙 施 威 銘 先 生 提 供 許 多 寶 貴 的 意 見 , 加 上 多 位 初 學 者 的 試 閱 , 是 VB 入 門 的 學 習 保 證 。 對 於 VB 已 有 基 礎 的 朋 友 , 由 於 很 難 適 切 推 薦 書 籍 , 筆 者 想 提 供 自 己 買 書 的 基 本 原 則 。 有 時 候 筆 者 在 書 店 看 到 一 本 書 , 可 能 有 50% 自 己 都 已 經 懂 了 , 30% 雖 然 還 不 完 全 懂 , 但 回 家 TRY 一 番 , 也 可 以 得 到 結 果 , 最 後 只 剩 下 20% 是 新 技 術 , 那 我 到 底 該 不 該 買 這 本 書 呢 ? 如 果 從 頁 數 來 看 , 500頁 原 文 書 大 約 1000 元 , 而 只 剩 下 20%=100頁 是 自 己 要 讀 的 , 想 想 用 1000 元 買 100 頁 的 書 , 有 時 候 會 覺 得 下 不 了 手 , 如 果 買 回 家 後 又 發 現 那 本 書 其 實 寫 得 很 爛 , 那 就 更 心 痛 了 。 不 過 話 說 回 來 , 自 己 買 過 的 書 又 有 多 少 是 『 全 部 』 讀 完 的 , 後 來 在 心 態 上 倒 比 較 平 和 了 , 只 要 有 自 己 想 要 的 內 容 , 在 書 店 的 時 候 就 仔 細 地 讀 看 看 剩 下 的 XX% 是 不 是 真 的 是 自 己 想 要 的 , 如 果 是 , 就 不 管 信 用 卡 上 面 的 數 字 了 , 畢 竟 知 識 是 很 難 用 價 錢 來 衡 量 的 。 |
![]() |
005 | 我 想 在 4:30 PM 自 動 執 行 一 些 程 式 , 因 此 利 用 Timer 元 件 的 特 性 , 在 Timer 事 件 程 序 中 判 斷 Time = #04:30:00 PM#, 結 果 到 了 4:30 PM 的 時 候 , 程 式 卻 未 被 執 行 ? |
![]() |
005 | Windows 的 Timer 會 有 延 遲 發 生 的 現 象 , 您 可 以 執 行 『 小
時 鐘 』 程 式 時 , 然 後 再 開 啟 一 個 很 大 的 檔 案 , 結 果 將 會
發 現 小 時 鐘 在 開 啟 檔 案 的 期 間 並 不 會 更 新 時 間 , 這 是 因
為 Windows 處 理 Timer 的 優 先 權 比 較 低 的 關 係 , 所 以 當 我 們
用 Timer 元 件 來 『 計 時 』 時 , 就 可 能 因 為 Windows Timer 的 延
遲 現 象 , 而 使 得 真 正 發 生 Timer 事 件 的 時 間 變 得 不 準 確 。
假 設 您 所 設 定 的 Timer 時 間 間 隔 是 1 秒 鐘 , 並 且 預 期 04:29:59 PM 之 後 發 生 的 Timer 事 件 是 04:30:00 PM, 那 麼 極 可 能 因 為 Windows Timer 的 延 遲 而 使 得 真 正 發 生 的 時 間 變 成 04:30:01 PM 或 更 後 面 的 時 間 , 所 以 Time = #04:30:00 PM# 比 較 運 算 式 就 不 會 成 功 。 筆 者 的 建 議 是 把 這 個 比 較 運 算 式 改 成 : 『 Time >= #04:30:00 PM#』 。 |
![]() |
006 | 我 想 用 Timer 做 長 時 間 的 定 時 , 例 如 5 分 鐘 , 但 Interval 屬 性 值 最 大 只 能 設 定 到 65535(大 約 只 有 65 秒 ), 所 以 想 在 Timer 事 件 程 序 中 宣 告 一 個 counter 變 數 以 累 計 計 時 , 來 達 成 5 分 鐘 計 時 的 目 的 , 是 否 可 行 ? |
![]() |
006 | 請 注 意 Timer 延 遲 發 生 的 問 題 , 所 以 要 比 較 準 確 地 計 時
不 能 完 全 仰 賴 Timer 的 功 能 , 筆 者 的 建 議 是 將 Interval 設 定
為 1 秒 , 然 後 在 Timer 事 件 程 序 中 讀 取 『 時 間 差 』 來 判 斷
是 否 已 經 屆 滿 5 分 鐘 , 程 式 大 致 如 下 :
Private Sub Timer1_Timer() Static pre_time ' 5 分 鐘 的 起 算 點 ' 第 一 次 要 設 定 系 統 時 間 給 pre_time If pre_time = 0 Then pre_time = Now ' 從 『 起 算 時 間 』 到 『 現 在 』 是 否 超 過 5 分 鐘 If DateDiff("n", pre_time, Now) >= 5 Then MsgBox "Do something" ' 執 行 您 要 做 的 事 情 pre_time = Now 重 新 起 算 End If End Sub |
![]() |
007 | 我 在 VB 3.0 底 下 可 以 利 用 以 下 敘 述 判 別 中 文 字 :
If Asc(字 串 ) > 127 Then ' 表 示 中 文 字 但 是 這 個 方 法 在 VB 4.0 底 下 卻 行 不 通 , 例 如 Asc("你 ") 得 到 的 值 竟 是 -22719, 好 奇 怪 … |
![]() |
007 | 由 於 VB 4.0 是 雙 位 元 的 軟 體 (中 英 文 版 皆 然 ), 所 以 每 個
中 文 字 雖 然 含 有 兩 個 字 元 , 卻 會 被 視 為 一 個 字 來 處 理 ,
而 Asc 計 算 中 文 字 元 碼 的 方 法 也 與 3.0 版 不 同 , 您 的 程 式
我 建 議 改 成 這 樣 :
If Not (Asc(字 串 ) >= 0 And Asc(字 串 ) <= 127) Then 或 If AscB(字 串 ) > 127 Then 其 中 AscB 是 4.0 版 為 了 兼 顧 3.0 版 相 容 性 而 新 增 的 函 數 , 它 計 算 字 元 碼 的 方 法 與 3.0 版 的 Asc 完 全 相 同 。 至 於 4.0 版 的 Asc 函 數 計 算 中 文 字 元 碼 的 方 法 , 還 有 因 為 雙 位 元 而 有 所 變 動 的 函 數 , 請 參 閱 拙 著 VB 4.0 中 文 版 教 本 p.530、 531、 538、 539 頁 。 |
![]() |
008 | 我 在 撰 寫 資 料 庫 程 式 時 , 根 據 使 用 手 冊 來 宣 告 必 要 的
變 數 , 其 敘 述 如 下 :
Dim db As Database Dim rs As Recordset 結 果 程 式 編 譯 時 VB 竟 然 說 『 user-defined type not defined』 , 後 來 我 照 抄 別 人 的 vbp 檔 , 亂 改 了 一 些 自 己 的 vbp檔 , 編 譯 才 通 過 , 請 教 是 何 原 因 呢 ? |
![]() |
008 | Database 及 Recordset 屬 於 DAO(Data Access Object)模 組 裡 的 物 件
類 別 , 不 是 VB 內 定 的 物 件 類 別 , 因 此 必 須 將 DAO 的 定 義 含
入 專 案 中 , VB 才 會 認 得 Database 及 Recordset 物 件 類 別 , 含 入
的 方 法 是 選 取 功 能 表 的 『 Tools/References』 (工 具 /物 件 引 用
管 理 員 ), 待 出 現 『 References』 (物 件 引 用 管 理 員 )交 談 窗 時
, 再 核 取 『 Microsoft DAO 3.0 Object Library』 或 『 Microsoft DAO 2.5/3.0
Compatibility Library』 (相 容 於 Access 2.0 以 前 的 版 本 )。 (註 :
如 果 使 用 的 是 16 位 元 的 VB, 則 選 取 『 Microsoft DAO 2.5 Object
Library』 )
除 了 DAO 之 外 , 有 許 多 軟 體 也 會 提 供 VB 可 以 使 用 的 物 件 模 組 , 在 作 法 上 這 些 軟 體 會 在 軟 體 安 裝 時 向 VB 註 冊 好 物 件 模 組 , 而 我 們 開 發 程 式 時 若 想 使 用 這 些 軟 體 的 物 件 模 組 , 也 必 須 在 『 References』 (物 件 引 用 管 理 員 )交 談 窗 中 把 這 個 軟 體 的 物 件 模 組 選 取 進 來 。 |
![]() |
009 | 選 取 功 能 表 的 『 Tools/References』 (工 具 /物 件 引 用 管 理 員 )之 後 , 我 在 『 References』 (物 件 引 用 管 理 員 )交 談 窗 中 看 到 『 Visual Basic 應 用 版 』 的 選 項 , 其 說 明 文 字 為 『 Language: Chinese/Taiwan』 , 看 來 好 像 是 中 文 版 的 ??? 東 西 , 但 我 將 其 打 勾 選 並 按 『 OK』 鈕 之 後 , 卻 出 現 : 『 Name conflicts with existing module,project,or object library』 , 請 問 我 該 如 何 才 能 使 用 它 ? |
![]() |
009 | 『 Visual Basic 應 用 版 』 是 附 屬 於 Office(或 Excel) 底 下 的 VBA(Visual Basic for Application)參 照 檔 , 所 以 我 猜 您 一 定 安 裝 過 Office 或 是 Excel。 由 於 VB 也 有 一 份 VBA 參 照 檔 (即 交 談 窗 中 的 『 Visual Basic for Application』 選 項 ), 而 這 份 VBA 參 照 檔 與 『 Visual Basic 應 用 版 』 是 完 全 相 容 的 , 因 此 既 然 VB 已 經 有 一 份 VBA 了 , 您 就 不 必 再 選 取 『 Visual Basic 應 用 版 』 這 個 選 項 。 |
![]() |
010 | 請 問 在 VB 程 式 語 言 中 , 如 何 將 一 個 已 寫 好 的 32 位 元 程 式 , 使 其 能 在 16 位 元 的 作 業 系 統 中 執 行 ? |
![]() |
010 | 如 果 已 經 編 譯 成 執 行 檔 , 則 32 位 元 的 程 式 是 無 法 在 16
位 元 的 作 業 系 統 (Windows 3.1)下 執 行 的 。
如 果 您 使 用 的 是 VB 4.0 專 業 版 (或 企 業 版 ), 它 含 有 16 及 32 位 元 兩 種 VB 執 行 檔 (vb.exe 及 vb32.exe), 則 利 用 16 位 元 的 vb.exe 所 製 作 出 來 的 是 16 位 元 的 執 行 檔 , 可 以 在 16 及 32 位 元 的 Windows 底 下 執 行 , 如 果 使 用 的 是 vb32.exe, 則 製 作 出 來 的 是 32 位 元 的 執 行 檔 , 就 只 能 在 32 位 元 的 作 業 系 統 底 下 執 行 。 採 用 VB 4.0 專 業 版 (或 企 業 版 )是 同 時 製 作 出 16 及 32 位 元 執 行 檔 的 基 本 條 件 , 除 此 之 外 , 還 請 注 意 以 下 幾 件 事 情 : (1) 如 果 您 使 用 了 Windows 95 的 控 制 元 件 (有 ImageList、 ListView、 ProgressBar、 RichTextBox、 Slider、 StatusBar、 TabStrip、 ToolBar、 TreeView 等 控 制 元 件 ), 由 於 這 些 控 制 元 件 是 32 位 元 專 屬 的 控 制 元 件 , 無 法 使 用 於 16 位 元 作 業 系 統 的 , 因 此 也 就 無 法 製 作 出 16 位 元 的 執 行 檔 。 (2) 如 果 您 額 外 使 用 了 非 VB 既 有 的 控 制 元 件 (.OCX 檔 ), 或 者 動 態 連 結 程 式 庫 (.DLL 檔 ), 則 這 些 控 制 元 件 (動 態 連 結 程 式 庫 )必 須 同 時 含 有 16 及 32 位 元 的 兩 種 版 本 , 才 能 夠 製 作 出 16 及 32 位 元 的 執 行 檔 。 (3) 如 果 您 的 程 式 呼 叫 了 Windows API 函 數 , 為 了 同 時 製 作 出 16 及 32 位 元 的 執 行 檔 , 您 必 須 選 用 16 及 32 位 元 相 容 的 API 函 數 , 除 此 之 外 , 由 於 16 及 32 位 元 API 函 數 的 宣 告 敘 述 亦 略 有 出 入 , 您 必 須 使 用 下 方 法 告 知 VB: #If Win32 Then 32 位 元 API 函 數 的 宣 告 敘 述 #Else 16 位 元 API 函 數 的 宣 告 敘 述 #Endif |
![]() |
011 | 我 使 用 Clipper設 計 資 料 庫 程 式 , 目 前 想 學 習 for Windows 的 東 西 , 聽 說 VB 與 VFP(Visual Foxpro) 的 資 料 庫 能 力 都 不 弱 , 不 知 道 它 們 的 差 別 何 在 ? Access 的 功 能 又 如 何 ? |
![]() |
011 | 如 果 已 經 熟 悉 Clipper, 可 以 考 慮 使 用 VFP, 畢 竟 它 們 都
屬 於 xBase 體 系 的 資 料 庫 軟 體 , 共 通 的 觀 念 比 較 多 。 有 關
VFP 的 介 紹 , 相 信 不 難 在 雜 誌 上 找 到 相 關 的 文 章 。 Access
屬 於 『 關 連 式 』 資 料 庫 軟 體 , 可 以 用 來 管 理 及 開 發 資 料
庫 , VB 則 是 開 發 為 主 , 不 適 合 用 作 資 料 庫 管 理 工 具 。 Access
與 VB 在 資 料 庫 開 發 的 觀 念 上 是 相 通 的 , 而 VB 4.0 與 Access
7.0 的 程 式 語 言 核 心 部 份 也 都 統 一 為 VBA(Visual Basic For Application),
所 以 不 管 先 學 習 哪 一 個 , 都 可 以 輕 鬆 地 移 轉 到 另 一 套 軟
體 上 。
Access 優 於 VB 的 地 方 在 於 它 有 很 不 錯 的 管 理 工 具 , VB 優 於 Access 的 地 方 在 於 它 不 只 可 以 用 來 開 發 資 料 庫 軟 體 , 所 以 筆 者 的 建 議 是 以 Access 為 管 理 工 具 , 以 VB 為 開 發 工 具 , 這 樣 子 可 充 分 發 揮 它 們 的 優 點 。 |