計算機程式 Visual BASIC 程式設計

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

第 1 章 公共基础知识 第 2 章 Visual Basic程序开发环境 第 3 章 对象及其操作 第 4 章 数据类型及其运算
第二章 VB的编程机制 【授课时间】第3周,第2次课 【授课题目】 2.1 面向对象程序设计概述 2.2 VB中的对象
第10章 处理图形 Visual Basic 程序设计教程.
計算機概論 使用Excel製作試算表.
VB教学中游戏化教学案例设计.
网 络 课 程 马 鞍 学 网 络 山 课 程 大 络 网 Visual Basic程序设计 第 一 讲 最容易接受的编程语言
第一课 计算机基础知识.
Chapter 5 迴圈.
PowerPoint圖形總合.
Visual Basic程序设计.
課程名稱:程式設計 授課老師:________
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
第10章 图 形 基 础 10.1 坐标系 10.2 绘图属性 10.3 图形控件 10.4 图形方法 习题十.
程式語言 -Visual Basic 變數、常數與資料型態.
新觀念的 VB6 教本 第13章 表單的圖形輸出系統.
副程式 將可以重複使用的程式區塊獨立而成 寫在Private Sub 函數名稱() 副程式碼 End Sub 呼叫副程式
Visual Basic程序设计 第八章 过程 -子程序和函数
Visual Basic 程序设计教程 机械工业出版社同名教材 配套电子教案 2003 年 6月.
初识Visual Basic.
Visual Basic程序设计基础 计算机科学学院.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
第4章 程序控制结构与算法基础.
計算機程式 廖文淵 Department of Computer Science and Engineering
新觀念的 VB6 教本 第七章 讓程式轉彎的控制敘述.
第4章 基本的控制结构 4.1 顺序结构 4.2 选择结构程序设计 4.3 循环结构 4.4 综合实例 退出.
Visual Basic 程序设计 教师:王 杨 电话:
第8章 键盘、鼠标事件和图形 Visual Basic为用户提供了键盘、鼠标事件用于响 应键盘操作和鼠标操作。在Visual Basic中,大多 数控件都有键盘事件和鼠标事件。这一章将讲述 与键盘和鼠标相关的内容,除此之外,还有通常 在鼠标事件中出现的关于绘制图形方面的内容。
第十二章 事件 12-1 KeyPress 12-2 KeyDown及KeyUp
程式設計 Visual Basic簡介 週次:1 建國技術學院 資管系 饒瑞佶 2003年9月17日.
第12章 VBA模块设计.
Visual Basic 物件導向程式設計簡介.
PR150 (125K) Reader RS232.
新觀念的 VB6 教本 第 6 章 資料型別.
广州市教育局教学研究室编写的 初中《信息技术》第二册第二章 《程序设计初步》
第四章 命令按钮、标签和文本框 大多数应用程序中都有命令按钮CommandButton控件,用户可以单击按钮执行某项操作。
高等学校计算机基础教育教材 Visual Basic 6.0 程序设计 上海中医药大学现代教育技术中心 计算机教学部 1.
第二章 创建用户界面 本章重点和难点 2.1 基本属性 2.2 创建窗体 2.3 Visual Basic的常用控件 2.4 制作菜单.
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
程式設計 Visual Basic簡介 週次:2 建國技術學院 資管系 饒瑞佶 2003年9月17日.
第一單元 建立java 程式.
建立一 function s (type) 可以用來繪製cyclic-harmonic curves
網頁程式設計 本章投影片錄自HTML5、CSS3、RWD、jQuery Mobile跨裝網頁設計 陳惠貞 著 碁峰資訊股份有限公司出版
程序设计基础 第 2 章 学习程序设计的基本方法: 多练 模仿.
VB程序设计语言 主讲教师:王 杨.
輸入&輸出 函數 P20~P21.
程序基础 2019/4/25.
挑戰C++程式語言 ──第8章 進一步談字元與字串
圓的定義 在平面上,與一定點等距的所有點所形成的圖形稱為圓。定點稱為圓心,圓心至圓上任意一點的距離稱為半徑,「圓」指的是曲線部分的圖形,故圓心並不在圓上.
程式語言Visual Basic 繪圖方法與顏色控制
GridView.
GridView操作 (II).
目錄 在中文輸入法底下打標點符號 Backspace退位鍵 Delete刪除鍵 Enter確定鍵 NumLock數字卡鎖鍵
Visual Basic 程序设计及应用教程 (6.0版)
Video 影像 (VideoPlayer 影像播放器、Camcorder 錄影機) 靜宜大學資管系 楊子青
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
函數應用(二)與自定函數.
程式設計 Visual Basic簡介 週次:4 建國技術學院 資管系 饒瑞佶 2003年10月18日.
Print方法和函数 2019/5/19.
5. 令圖畫動起來 Tween 功能介紹 移動效果 顏色漸變效果 形狀漸變效果 離開.
第八章: 輸入裝置-鍵盤與滑鼠.
國立台灣大學 關懷弱勢族群電腦課程 By 資訊工程 黃振修
資料表示方法 資料儲存單位.
Visual Basic 第11章 图形与图象设计
1、复选框和单选按钮 2、框架 3、列表框和组合框 4、滚动条 5、鼠标器事件 6、键盘
第四組 停車場搜尋系統 第四組 溫允中 陳欣暉 蕭積遠 李雅俐.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
認識電腦鍵盤.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Presentation transcript:

計算機程式 Visual BASIC 程式設計 四海工商專校 電算中心 廖文淵 E-Mail: andres@sitc.edu.tw

Chapter 11 繪圖 1. VB座標系統 2. 色彩 3. 圖形方法 4. 直線控制項 (Line) 5. 幾何圖形控制項 (Shape) 6. 滑鼠事件 7. 鍵盤事件

1. VB座標系統 使用繪圖區域或收納器的座標系統圖形作業 表單使用座標 (x, y)定義格線的位置 調整大小、移動和繪圖 定義表單和控制項的位置 使用座標 (x, y)定義表單格線的位置 表單使用座標 (x, y)定義格線的位置 x 值是沿 x 軸的位置,最左方是預設位置 0 y 值是沿 y 軸的位置,最上端是預設位置 0

座標系統使用規則 收納器: 用來移動或調整表單大小的陳述式,必然是在格線上表示 表單的位置和大小 表單為收納器 : 在表單上繪製、移動、調整控制項的大小 框架或控制項為收納器 : 框架或圖片方塊裡繪製控制項時 圖形和 Print 方法,皆使用收納器的座標系統 用來移動或調整表單大小的陳述式,必然是在格線上表示 表單的位置和大小 建立程式碼時,先檢查 Screen 物件的 Height 和 Width 屬 性,以確定表單在螢幕上大小是否合適 預設座標 : 螢幕、收納器左上角是(0,0) 刻度 : 定義沿座標軸位置的測量單位,每個軸都有自己的刻度

twips 預設情況下 1twip = 印表機解析點的 1/20 1440 twips = 1英吋 567 twips = 1公分 所有 VB 的移動、調整大小和圖形繪製的陳述式,皆使用一個 twip 為單位 1twip = 印表機解析點的 1/20 1440 twips = 1英吋 567 twips = 1公分 可指定物件列印出來的大小 螢幕上的實體距離的變動是根據顯示器的大小

設定座標系統(1) -- 使用預設刻度 使用表單和圖片方塊刻度屬性預設值 物件預設刻度左上角座標 = (0,0) 預設刻度單位為 twips ScaleLeft ScaleTop ScaleWidth ScaleHeight ScaleMode 物件預設刻度左上角座標 = (0,0) 預設刻度單位為 twips 使用沒有引數的 Scale 方法: 傳回預設的刻度

設定座標系統(2) -- ScaleMode屬性 0 - 使用者定義,直接設定ScaleWidth、ScaleHeight、ScaleTop 或 ScaleLeft,則 ScaleMode 屬性會自動地設定為 0 1 - Twips,VB預設刻度,1440 twips = 1英吋 2 - 點,72 點 = 1英吋 3 - 映像點,顯示器或印表機解析度的最小單位。每英吋裡映像點的數目是由週邊設備的解析度來決定 4 - 字元,列印時,一個字元是 1/6 英吋高、1/12 英吋寬 5 - 英吋 6 - 公厘 7 - 公分 除了 0 和 3,其餘模式都可引用為列印的長度 ScaleMode = 5 '設定表單的刻度單位為英吋 picPicture1.ScaleMode = 3 '設定 picPicture1 的刻度單位為映像點

設定座標系統(3) -- 自訂刻度 ScaleLeft、ScaleTop 屬性: ScaleWidth、ScaleHeight 屬性: 指定物件左上角的數值 ScaleLeft = 100 ScaleTop = 100 picArena.ScaleLeft = 100 picArena.ScaleTop = 100 ScaleWidth、ScaleHeight 屬性: 根據繪圖區域目前的寬度和高度定義單位 ScaleWidth = 1000 定義表單內部寬度的水平單位 1/1,000 ScaleHeight = 500 表單內部高度的垂直單位為 1/500

Scale 方法 語法: x1、y1 : 決定 ScaleLeft 和 ScaleTop 屬性的設定 [object.]Scale (x1, y1) - (x2, y2) x1、y1 : 決定 ScaleLeft 和 ScaleTop 屬性的設定 兩個x-座標和兩個 y-座標之間的差異分別決定 ScaleWidth 和 ScaleHeight 屬性的設定 Scale (100, 100)-(200, 200) 定義表單為 100 單位寬和 100 單位高 x1 > x2 或 y1 > y2 的值,則與設定 ScaleWidth 或 ScaleHeight 為負值的效果相同

2. 色彩 ‧使用 RGB 函數 由Long 整數表示,其值在指定色彩的所有內容中,皆具 有相同的涵義 在執行階段有四種方法可用來指定色彩值: ‧使用 RGB 函數 ‧使用 QBColor 函數 選取 Microsoft QuickBasic(R) 16 種色彩中的一種 ‧使用表列在「瀏覽物件」中的內部常數之一 ‧直接輸入色彩值

(1) 使用 RGB 函數 給定GRB三數值輸入到 RGB 函數 指定結果到色彩屬性或色彩引數 從 0 到 255 中的數值 0 表示亮度最低,255 表示亮度最高 使用紅-綠-藍的排列順序 指定結果到色彩屬性或色彩引數 '設定背景為綠色。 Form1.BackColor = RGB(0, 128, 0) '設定背景為黃色。 Form2.BackColor = RGB(255, 255, 0) '設定點為深藍色。 PSet (100, 100), RGB(0, 0, 64)

(2) 使用定義的內部常數 常數 vbRed BackColor = vbRed

(3) 直接使用色彩設定 RGB 色彩有效範圍 色彩設定 : 4-位元的整數 十六進位數指定色彩語法: 0 到 16,777,215 (&HFFFFFF&) 色彩設定 : 4-位元的整數 高位元數等於 0,而較低的三個位元,從最低到最高顯著的位元 組,分別決定了紅、綠、藍三種色彩的數目 紅、綠、藍三種元件皆使用 0 到 255 (&HFF) 之間的數值表示 十六進位數指定色彩語法: &HBBGGRR& 每個部分都是兩位從 00 到 FF 的十六進位數。中間值為 80 &H808080&

色彩屬性 BackColor ForeColor BorderColor FillColor 設定表單或控制項的背景色彩 設定表單或控制項中,以繪圖方法所建立的文字或圖形色彩 改變 ForeColor 屬性,並不影響已建立的文字或圖形 BorderColor 設定幾何圖形控制項邊框色彩 FillColor 設定填滿 Circle 方法所建立的圓之色彩 設定填滿 Line 方法建立的方塊之色彩

3. 圖形方法 [物件名稱.] 圖形方法 物件名稱: 表單、圖片方塊、 Printer 物件 省略物件名稱,VB假設要繪製在表單上

Cls 方法 [object.]Cls 清除繪圖區域 指定的繪圖區域會重畫其背景色彩 未指定 object 則會清除程式碼所對應的表單

Pset方法 (平面繪點) x 和 y 引數 : 單一精確度,可以接受輸入任何數值的運算 式,包括變數 color 引數 : 設定映像點色彩 [object.]PSet (x, y)[, color] x 和 y 引數 : 單一精確度,可以接受輸入任何數值的運算 式,包括變數 color 引數 : 設定映像點色彩 PSet (10.75, 50.33) MyForm.PSet (230, 1000) picPicture1.PSet (1.5, 3.2) PSet (50, 75), RGB(0, 0, 255)

Blanker應用程式 若您要「清除」一點,只要將其設定為背景色彩即可: Sub PSetDemo () R = 255 * Rnd '設定紅色為隨機值 G = 255 * Rnd '設定綠色為隨機值 B = 255 * Rnd '設定藍色為隨機值 XPos = Rnd * ScaleWidth '設定水平位置 YPos = Rnd * ScaleHeight ‘設定垂直位置 PSet (XPos, YPos), RGB(R, G, B) '用隨機色彩繪點 End Sub 若您要「清除」一點,只要將其設定為背景色彩即可: PSet (50, 75), BackColor

Point 方法 傳回指定位置的色彩值: PointColor = Point (500, 500) [object.] point (x, y) 傳回指定位置的色彩值: PointColor = Point (500, 500)

Line 方法 (繪製直線) object : (x1, y1) : 物件名稱 選擇性的。若省略,目前的 x,y 位置當作終點 目前位置 : [object.]Line [(x1, y1)]-(x2, y2)[, color] object : 物件名稱 (x1, y1) : 選擇性的。若省略,目前的 x,y 位置當作終點 目前位置 : CurrentX 和 CurrentY 屬性指定 之前圖形或 Print 方法所繪製的最後一點位置 若以上二者都沒有使用過,則預設位置為物件的左上角

Line 方法 (2) x 和 y 引數 : color 引數 : 整數、分數 直線的色彩 若省略color 引數,直線的色彩 = 物件 ForeColor 屬性 Line (500, 500)-(2000, 2000), RGB(0, 0, 255)

Example Line (500, 500)-(2000, 2000) CurrentX = 1500 '設定起始點的 x 座標 CurrentY = 500 '設定起始點的 y 座標 Line -(3000, 2000) '從起點的右下方畫一直線 Line -(1500, 2000) '從目前點的左方畫一直線 Line -(1500, 500) ’向右上方畫一直線到起始點

Step 關鍵字 語法: 指定相對於繪製點最後位置的點。加入最後繪製點的值到 x 和 y 的值裡 可免除需要時常地記錄最後繪製點的位置 Line (100, 200)-(150, 250) 等於: Line (100, 200)-Step(50, 50) 可免除需要時常地記錄最後繪製點的位置 通常較關心的可能是兩點的相對位置,而非它們的絕對位置

繪製方塊 Line 方法的 B 選項 Line (500, 500)-Step(1000, 0) Line -Step(0, 1000) Line (500, 500)-Step(1000, 1000), , B

FillStyle 和 FillColor FillStyle 預設值 = 1- 透明 在 B 之後指定 F選項,方塊將填滿為實心 1 透明(預設值)。圖形物件會出現空值,不管您使用哪種色彩 2 水平線 3 垂直線 4 向上的對角線 5 向下的對角線 6 十字線陰影 7 對角十字線陰影 在 B 之後指定 F選項,方塊將填滿為實心 F 不能沒有 B 而單獨使用 使用 F 選項時,Line 方法將忽略 FillColor 和 FillStyle 屬性 Line (500, 500)-Step(1000, 1000), , BF

Circle 方法 畫圓形、橢圓形、圓弧和楔形餅塊(派) 變化的 Circle 方法可以畫出各種的曲線 圓的半徑通常按照水平單位來指定 [object.]Circle [Step](x, y), radius[, color] x 引數和 y 引數 : 圓心座標 radius : 圓的半徑 Circle (1200, 1000), 750 Circle ((ScaleWidth + ScaleLeft)/2,(ScaleHeight + _ ScaleTop) / 2), ScaleWidth / 4 圓的半徑通常按照水平單位來指定 如果使用自訂刻度,水平單位和垂直單位可能對應不同的距 離

Example Sub CircleDemo () Dim Radius R = 255 * Rnd '設定紅色為隨機數 G = 255 * Rnd '設定綠色為隨機數 B = 255 * Rnd '設定藍色為隨機數 XPos = ScaleWidth / 2 '設定 x 座標在表單中間 YPos = ScaleHeight / 2 '設定 y 座標在表單中間 '將半徑設定在表單高度的 0 到 50% 之間 Radius = ((YPos * 0.9) + 1) * Rnd Circle (XPos, YPos), Radius, RGB(R, G, B) '使用隨機色彩畫圓 End Sub

畫圓弧 [object.]Circle [Step](x, y), radius, [color], start, end[, aspect] start 或 end 引數 : 若為負值,Visual Basic 會畫出一條線以連接圓心到負值的終點 Private Sub Form_Click () Const PI = 3.14159265 Circle (3500, 1500), 1000, , -PI/2, -PI/3 End Sub

畫橢圓 aspect 引數 : 指定水平對垂直方位的比值 radius 引數 : 對應橢圓較長的軸 [object.]Circle [Step](x, y), radius, [color], [start], [end] [, aspect] aspect 引數 : 指定水平對垂直方位的比值 正浮點數,但不可以是負值 aspect 引數值若較大時,會產生沿著垂直軸拉長的橢圓 aspect 引數值較小時,則將產生沿著水平軸拉長的橢圓 radius 引數 : 對應橢圓較長的軸 若 aspect 引數小於 1,則 radius = x 軸半徑 若 aspect 引數大於或等於 1 的話, radius = y 軸半徑

Example Private Sub Form_Click () '繪製實心的橢圓。 FillStyle = 0 Circle (600, 1000), 800, , , , 3 '繪製空的橢圓。 FillStyle = 1 Circle (1800, 1000), 800, , , , 1/3 End Sub

PaintPicture方法 (1) 在表單、圖片方塊和 Printer 物件上的任何地方繪製圖 形 語法: object : [object.]PaintPicture pic, destX, destY[, destWidth[, destHeight [, srcX[, srcY[, srcWidth[, srcHeight[, Op]]]]]]] object : 表單、圖片方塊或 Printer 物件,放置 pic 圖片的地方 若省略,則將假設為目前的表單 pic 引數 : 必須是 Picture 物件,即表單或控制項的 Picture 屬性所描述的

PaintPicture方法 (2) destX 和 destY 引數 : 選擇性destWidth 和 destHeight 引數 : 根據 objec 的 ScaleMode,圖片被放置的水平和垂直位置 選擇性destWidth 和 destHeight 引數 : 設定在標的物件 object 中圖片的寬度和高度 選擇性srcX 和 srcY 引數 : 定義 pic 中剪輯範圍之左上角的 x 座標以及 y 座標 選擇性的Op 引數 : 定義光域效果(例如,AND 和 XOR),意即當您在object 標的 物件上繪圖時,執行於圖片上的作業。

PaintPicture方法 (3) 例如,您可以使用 PaintPicture 方法產生相同點陣圖的多 個備份,並將它們堆砌在表單上。使用這種方法,比在表 單上移動圖片控制項要快些。下列的程式碼用來堆砌排列 100 個圖片控制項的備份,並且透過給予 destWidth 一個 負值,就可以使每幅圖片水平的跳動。 For i = 0 To 10 For j = 0 To 10 Form1.PaintPicture picF.Picture, j * _ picF.Width, i * picF.Height, _ picF.Width, -picF.Height Next j, i

PaintPicture方法 (4) destX 和 destY 引數 : 選擇性destWidth 和 destHeight 引數 : 根據 objec 的 ScaleMode,圖片被放置的水平和垂直位置 選擇性destWidth 和 destHeight 引數 : 設定在標的物件 object 中圖片的寬度和高度 選擇性srcX 和 srcY 引數 : 定義 pic 中剪輯範圍之左上角的 x 座標以及 y 座標 選擇性的Op 引數 : 定義光域效果(例如,AND 和 XOR),意即當您在object 標的 物件上繪圖時,執行於圖片上的作業

Example 使用 PaintPicture 方法產生相同點陣圖的多個備份,並將它 們堆砌在表單上 此方法,比在表單上移動圖片控制項要快 例: 堆砌排列 100 個圖片控制項的備份,並且透過給予 destWidth 一個負值,就可以使每幅圖片水平的跳動 For i = 0 To 10 For j = 0 To 10 Form1.PaintPicture picF.Picture, j *picF.Width, - i * picF.Height, picF.Width,picF.Height Next j, i

DrawWidth、BorderWidth屬性 指定圖形方法輸出時直線的寬度 BorderWidth 屬性: 指定直線和幾何圖形控制項框線的粗細 Private Sub Form_Click () DrawWidth = 1 Line (100, 1000)-(3000, 1000) DrawWidth = 5 Line (100, 1500)-(3000, 1500) DrawWidth = 8 Line (100, 2000)-(3000, 2000) End Sub

DrawStyle 屬性 指定使用圖形方法所建立的直線,是實線還是虛線 幾何圖形控制項的 BorderStyle 屬性作用與 DrawStyle 屬 性相同,但是可適用於各種的物件 Private Sub Form_Click () Dim I As Integer, Y As Long For I = 0 To 6 DrawStyle = I Y = (200 * I) + 1000 Line (200, Y)-(2400, Y) Next I End Sub

DrawMode屬性 設定一個樣式繪製在另一個之上時,會發生什麼樣的情況 當在一個空白的、或純白色的背景、或者是無差異色彩的 背景上繪製時,通常沒有必要使用到這個屬性 4 - Not Copy Pen ,繪製相反的直線模式,無論原來存在模式如何 7 - Xor Pen 。顯示出直線模式和現存顯示的差異,以此模式繪製物件兩次,將精確地回存該處原來的背景 11 - 不作動作,效果相當於關閉繪製模式 13 - Copy Pen(預設值)。適用於直線模式,無論原來的存在模式如何

DrawMode屬性 = 7 DrawMode = 7 ,對於動畫來說是非常有用的 繪製一條直線兩次,就可精確地回存該直線繪製之前既存 的顯示狀態。這樣可能建立一個移動的背景,而不致破壞 原來背景的物件,因為當執行大部分模式時,可以回存背 景。但卻無法保證也能保存舊有的背景 Private Sub Form_Click () ForeColor = 255 : DrawMode = 7 Circle (CurrentX, CurrentY), 1000 CurrentX = CurrentX + 220 CurrentY = CurrentY + 220 End Sub

4. 直線控制項 (Line) 控制直線控制項的位置、長度、顏色和樣式,自 訂應用程式的外觀 BorderStyle 屬性 設定直線樣式: 控制直線控制項的位置、長度、顏色和樣式,自 訂應用程式的外觀 BorderStyle 屬性 設定直線樣式: 0 - 透明 1 -‧實線 2 -‧破折線 3 -‧點線 4 -‧破折線-點線 5 -‧破折線-點線-點線 6-‧內實線

BackColor屬性 指定直線的顏色 BorderStyle = 0(透明) X1、X2、Y1 和 Y2 屬性: 忽略 BorderColor 屬性 X1、X2、Y1 和 Y2 屬性: 移動控制項或調整直線控制項的大小 X1、Y1 屬性 : 設定直線控制項左方點的水平位置和垂直位置 X2、Y2 屬性 : 設定直線控制項右端點的水平位置和垂直位置

5. 幾何圖形控制項 (Shape) 在表單、框架或圖片方塊中建立義幾何圖形 Shape 屬性 幾何圖形 樣式 常數 幾何圖形 樣式 常數 矩形 0 vbShapeRectangle 正方形 1 vbShapeSquare 橢圓形 2 vbShapeOval 圓形 3 vbShapeCircle 圓角矩形 4 vbShapeRoundedRectangle 圓角正方形 5 vbShapeRoundedSquare

FillStyle、BorderStyle、 BackColor、 FillColor屬性 塗滿樣式花色 : 實線、透明、水平線、垂直線、向上對角線、向下對 角線、十字線和對角十字線 BorderStyle 屬性 : 邊框樣式 : 透明、實線、虛線、點線、虛線、虛線和內實線 BackColor屬性 : 幾何圖形色彩 FillColor 屬性 : 幾何圖形邊框色彩 FillStyle = 1 或 BackStyle = 1 -Transparent : 忽略 FillColor 和 BackColor 屬性

6. 滑鼠事件 滑鼠指標位於無控制項的表單上,表單識別滑鼠事件 滑鼠指標在控制項上時,控制項識別滑鼠事件 事件 描述 MouseDown 按住任意滑鼠按鈕時發生 MouseUp 交付任意滑鼠按鈕時發生 MouseMove 每當滑鼠指標移動到螢幕新位置時發生 滑鼠指標位於無控制項的表單上,表單識別滑鼠事件 滑鼠指標在控制項上時,控制項識別滑鼠事件 按住滑鼠按鈕不放,物件將繼續識別所有滑鼠事件,直到 使用者交付按鈕 滑鼠事件識別和回應各種滑鼠狀態,並把這些狀態看作獨 立的事件,與 Click 和 DblClick 事件不同

滑鼠事件引數 Form_MouseDown (Button, Shift, X, Y) 引數: button: Shift: x, y: 1bit 資料欄引數,描述滑鼠按鈕的狀態。 Shift: 1bit資料欄引數,描述SHIFT、CTRL 與 ALT 鍵的狀態 x, y: 滑鼠指標的位置,使用可接受滑鼠事件的物件的座標系統來描述的滑鼠指標位置 位元資料欄引數傳回單個位元的資訊,每個位元都會指出 某個狀態是啟用或關閉

MouseDown 事件 Private Sub Form_MouseDown (Button As Integer, _ Shift As Integer, X As Single, Y As Single) Command1.Move X, Y End Sub Command1.Move(X-Command1.Width/2),(Y-Command1.Height/2) Line -(X, Y)

MouseMove 事件 MouseMove 如何工作 並不是對滑鼠經過的每個像素,VB都會產生 MouseMove 事件 Private Sub Form_MouseMove (Button As Integer, _ Shift As Integer, X As Single, Y As Single) Line -(X, Y) End Sub MouseMove 如何工作 並不是對滑鼠經過的每個像素,VB都會產生 MouseMove 事件 作業環境每秒產生有限多個滑鼠訊息 Private Sub Form_MouseMove (Button As Integer,_ Circle (X, Y), 50

MouseUp 事件 Private Sub Form_MouseDown (Button As Integer, _ Shift As Integer, X As Single, Y As Single) DrawNow = True CurrentX = X CurrentY = Y End Sub Private Sub Form_MouseUp (Button As Integer, _ DrawNow = False

檢測滑鼠按鈕 001 1 vbLeftButton 按住左按鈕 010 2 vbRightButton 按住右按鈕 100 4 vbMiddleButton 按住中間按鈕 000 0 未按住任何按鈕 011 3 vbLeftButton + vbRightButton 按住左、右按鈕 101 5 vbLeftButton + vbMiddleButton 按住左按鈕和中間按鈕。 110 6 vbRightButton + vbMiddleButton 按住右按鈕和中間按鈕。 111 7 vbRightButton + vbMiddleButton + vbLeftButton 按住三個按鈕

Example 1 Private Sub Form_MouseDown (Button As Integer, _ Shift As Integer, X As Single, Y As Single) If Button = 1 Then Print "You pressed _ the left button." If Button = 2 Then Print "You pressed _ the right button." If Button = 4 Then Print "You pressed _ the middle button." End Sub

Example 2 Private Sub Form_MouseUp(Button As Integer, _ Shift As Integer, X As Single, Y As Single) If Button = 1 Then Print "You released _ the left button." If Button = 2 Then Print "You released _ the right button." If Button = 4 Then Print "You released _ the middle button." End Sub

Example 3 Private Sub Form_MouseMove (Button As Integer, _ Shift As Integer, X As Single, Y As Single) If Button = 1 Then Print "You're pressing _ only the left button." End Sub If Button And 1 Then Print "You're pressing _ the left button." If Button And 2 Then Print "You're pressing _ the right button."

Example 4 Private Sub Form_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) ShiftTest = Shift And 7 Select Case ShiftTest Case 1: Print "You pressed the SHIFT key." Case 2: Print "You pressed the CTRL key." Case 4: Print "You pressed the ALT key." Case 3: Print "You pressed both SHIFT and CTRL." Case 5: Print "You pressed both SHIFT and ALT." Case 6: Print "You pressed both CTRL and ALT." Case 7: Print "You pressed SHIFT, CTRL, and ALT." End Select End Sub

Example 5 Private Sub Form_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single) ButtonTest = Button And 7 Select Case ButtonTest Case 1 '或 vbLeftButton Print "You're pressing the left button." Case 2 '或 vbRightButton Print "You're pressing the right button." Case 4 '或 vbMiddleButton Print "You're pressing the middle button." Case 7 Print "You're pressing all three buttons." End Select End Sub

Example 6 Private Sub Form_MouseDown (Button As Integer, _ Shift As Integer, X As Single, Y As Single) If Button = vbLeftButton Then DrawNow = True CurrentX = X CurrentY = Y ElseIf Button = vbRightButton Then Line -(X, Y) End If End Sub Private Sub Form_MouseUp (Button As Integer, _ If Button = vbLeftButton Then DrawNow = False Private Sub Form_MouseMove (Button As Integer, _ If DrawNow Then Line -(X, Y)

shift 引數 001 1 vbShiftMask 按 SHIFT 鍵 010 2 vbCtrlMask 按 CTRL 鍵 100 4 vbAltMask 按 ALT 鍵 011 3 vbShiftMask + vbCtrlMask 同時按住 SHIFT 與 CTRL 鍵 101 5 vbShiftMask + vbAltMask 同時按住 SHIFT 與 ALT 鍵 110 6 vbCtrlMask + vbAltMask 同時按住 CTRL 與 ALT 鍵 111 7 vbCtrlMask + vbAltMask + vbShiftMask 同時按住SHIFT、CTRL與ALT鍵

Example Private Sub Form_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) ShiftTest = Shift And 7 Select Case ShiftTest Case 1: Print "You pressed the SHIFT key." Case 2: Print "You pressed the CTRL key." Case 4: Print "You pressed the ALT key." Case 3: Print "You pressed both SHIFT and CTRL." Case 5: Print "You pressed both SHIFT and ALT." Case 6: Print "You pressed both CTRL and ALT." Case 7: Print "You pressed SHIFT, CTRL, and ALT." End Select End Sub

7. 鍵盤事件 只有獲得駐點的物件才能夠接受鍵盤事件 表單為活動表單且其上所有控制項均未獲得駐點時,表單 才獲得駐點 鍵盤事件 引發原因 KeyPress 按住對應某 ASCII 字元的鍵 KeyDown 按住鍵盤的任意鍵 KeyUp 交付鍵盤的任意鍵 只有獲得駐點的物件才能夠接受鍵盤事件 表單為活動表單且其上所有控制項均未獲得駐點時,表單 才獲得駐點 表單KeyPreview屬性 = True : 表單在每個控制項識別所有鍵盤事件之前,就接受這些鍵盤事件

檢測低階鍵盤回應 SHIFT、CTRL 和 ALT 鍵 方向鍵 PAGEUP 和 PAGEDOWN 數值小鍵盤數字鍵 打字鍵盤數值鍵 注意,某類控制項(指令按鈕、選項按鈕和核取方塊)不接受方 向鍵事件:相反,按住方向鍵後將使駐點移動到另一個控制項 PAGEUP 和 PAGEDOWN 數值小鍵盤數字鍵 打字鍵盤數值鍵 不僅回應按鍵動作,而且回應交付鍵的動作(KeyPress 只回應按鍵動作) 功能鍵: 與功能表指令無關的功能鍵

檢測低階鍵盤回應 使用 KeyUp 和 KeyDown 事件之前要確保 KeyPress 事 件的功能不夠使用 KeyPress 事件檢測的鍵所有標準 ASCII 字元: ENTER TAB BACKSPACE 鍵 標準鍵盤的字母、數字和標點符號鍵

KeyPress 事件 識別 ENTER、TAB、BACKSPACE鍵和標準 ASCII 字元 KeyPress (KeyAscii As Integer) 識別 ENTER、TAB、BACKSPACE鍵和標準 ASCII 字元 Private Sub Text1_KeyPress (KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) End Sub 您可用相同的 ASCII 字元程式碼檢測,是否可透過按 住 KeyPress 事件識別一個鍵 If KeyAscii = 8 Then MsgBox "You pressed the _ BACKSPACE key."

KeyUp 和 KeyDown 事件 報告鍵盤本身準確的實體狀態 KeyPress 事件只提供鍵所代表的字元而不識別鍵的狀態 KeyDown(KeyCode As Integer, Shift As Integer) 報告鍵盤本身準確的實體狀態 KeyPress 事件只提供鍵所代表的字元而不識別鍵的狀態 keycode : 指示按住的實體鍵。這時將「A」與「a」作為同一個鍵傳回。具有相同的 keycode 值 鍵盤上的「1」和數字小鍵盤的「1」被作為不同的鍵傳回,儘管它們產生相同的字元 Shift : 指示 SHIFT、CTRL 和 ALT 鍵的狀態 只有檢查此引數才能判斷輸入的是大寫字母還是小寫字母

Keycode 引數 透過 ASCII 值或鍵程式碼常數來識別鍵 字母鍵的鍵程式碼與此字母的大寫字元的 ASCII 值相同。 所以「A」和「a」的 keycode 都是由 Asc(A)傳回的數 值 Private Sub Text1_KeyDown(KeyCode As Integer, _ Shift As Integer) If KeyCode = vbKeyA Then MsgBox "You pressed _ the A key." End Sub

識別控制鍵 KeyDown和KeyUp 事件可識別標準鍵盤上大多數控制鍵: 可以透過鍵程式碼常數或相對的 ASCII 值檢測這些鍵 功能鍵(F1-F16) 編輯鍵(HOME、PAGE UP、DELETE 等等) 搜尋鍵(RIGHT、LEFT、UP 和 DOWN ARROW) 數字小鍵盤上的鍵 可以透過鍵程式碼常數或相對的 ASCII 值檢測這些鍵 Private Sub Text1_KeyDown(KeyCode As Integer, _ Shift As Integer If KeyCode = vbKeyHome Then MsgBox "You _ pressed the HOME key." End Sub

Shift 引數 SHIFT、CTRL 和 ALT 鍵的整數值或常數 Private Sub Text1_KeyDown(KeyCode As Integer, _ Shift As Integer) If KeyCode = vbKeyA And Shift = 1 _ Then MsgBox "You pressed the uppercase A key." End Sub

Example Private Sub Text1_KeyDown(KeyCode As Integer, _ Shift As Integer) ShiftKey = Shift And 7 Select Case ShiftKey Case 1: Print "You pressed the SHIFT key." Case 2: Print "You pressed the CTRL key." Case 4: Print "You pressed the ALT key." Case 3: Print "You pressed both SHIFT and CTRL." Case 5: Print "You pressed both SHIFT and ALT." Case 6: Print "You pressed both CTRL and ALT." Case 7: Print "You pressed SHIFT, CTRL, and ALT." End Select End Sub