1 / 47

VB6 的繪圖方法與常用函數

VB6 的繪圖方法與常用函數. 常用繪圖方法( Method )指令. Cls Cl ear S creen ,清除螢幕 用點、線、圓 …. 等繪圖方法所畫出的圖形或是用 Print 輸出的字串,都可以用 Cls 方法來加以清除。 語法 [Object].Cls 物件 .Cls. 常用繪圖方法、指令 ( 續 ). Pset 用來畫任意顏色的點 語法 [Object.]Pset[Step](X, Y)[, color]

Download Presentation

VB6 的繪圖方法與常用函數

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. VB6 的繪圖方法與常用函數

  2. 常用繪圖方法(Method)指令 • Cls • Clear Screen,清除螢幕 • 用點、線、圓….等繪圖方法所畫出的圖形或是用 Print 輸出的字串,都可以用Cls 方法來加以清除。 • 語法 • [Object].Cls 物件.Cls

  3. 常用繪圖方法、指令(續) • Pset • 用來畫任意顏色的點 • 語法 • [Object.]Pset[Step](X, Y)[, color] • 其中的 X, Y 是單精度變數,因此可以使用小數數值、變數。如果不指定 color 引數,就以 ForeColor 屬性的顏色為顏色。 • 如果將color 引數,設定為 BackColor就會有「消除」的效果。

  4. Picture1 AutoRedraw : True DrawWidth : 5 常用繪圖方法、指令(續) • Point • 可以讀取任意點的顏色值 • 語法 • [Object.]Point(X, Y)

  5. 常用繪圖方法、指令(續) • Line • 畫一條線 • 語法 • B:畫框 • BF:畫框且填滿 [Object.]Line[[Step](X1, Y1)] – [Step](X2, Y2) ,[Color][, B[F]]] Line (X1, Y1)-(X2, Y2) Line –(X1, Y1)

  6. 常用繪圖方法、指令(續) • Circle • 畫圓 • 語法 • Radius:半徑 • Start:弧的起點 • End:弧的終點 • Aspec:長短軸比 [Object.]Circle Step (X, Y), Radius, Color, Start, End, Aspec

  7. 牛刀小試(1) • 試寫一程式,模擬小畫家的噴霧、畫筆與畫線的功能

  8. 牛刀小試(1)---續 Picture1Box *1 CommandButton *8 Shape *16

  9. 牛刀小試(1)---續 • 屬性設定 • PictureBox (Picture1) • AutoRedraw:True • Appearance:0 – 平面 • BorderStyle:1 – 單線固定 • ScaleMode:3 – 像素 • Shape (Shape1(0)~(15)) • CommandButton (Command1~5) • Caption:如圖示 • Command4(0)~(3)表示線條寬度設定

  10. 牛刀小試(1)---續 全域變數宣告: mode1噴霧、2畫筆、3畫線 ttt滑鼠左鍵點選的狀態0第一次點選、1第二次點選 xx, yy記錄滑鼠第一次點選的座標 selcolor從調色盤選取的顏色值 ttt的起始值設為0 Picture1的起始線條寬度為1 填充Shape1,建立調色盤 當滑鼠的左鍵點選調色盤後,將色碼值 指派給selcolor變數

  11. 牛刀小試(1)---續 當按下Command1設定為「噴霧」 當按下Command2設定為「畫筆」 當按下Command3設定為「畫筆」 當按下Command4(0)~(3)時按所對應 Index的Caption設定Picture1的 線條寬度 當按下Command5時,清空Picture1的 內容

  12. 牛刀小試(1)---續 當mode=1時(噴霧) ,以滑鼠所點選的位置座標為 中心,上下左右各延伸十個像素,以亂數取20個 座標點,分別畫上一點 當mode=2時(畫筆) ,以滑鼠第一次點選的位置為 基準繪上一點,並令ttt變數值為1,倘若第二次點 選滑鼠,則令ttt變數值為0 當mode=3時(畫線) ,以滑鼠第一次點選的位置為 基準繪上一點,並令ttt變數值為1,以xx及yy變數 記錄起點,倘若第二次點選滑鼠,則令ttt變數值為 0,且於(xx,yy)到第二次的點選點繪製一條線 當mode=2且ttt=1時,移動滑鼠的同時,於Picture1 上繪製前一個座標到目前座標間的線條

  13. 常用的字串函數 • Left() • 傳回字串左邊指定數量的字元 • 語法 • Left_str=Left(Str, n) • 將Str字串的左邊n個字元放到Left_str中 • n為小數時,則系統會自動將n以四捨五入轉成整數型態 • 如果n>Str的長度時,將傳回全部字串 Str=“ABCDEFG” sss=Left(Str,3)  sss=“ABC”

  14. 常用的字串函數(續) • Right() • 傳回字串右邊指定數量的字元 • 語法 • Right_str=Right(Str, n) • 將Str字串的右邊n個字元放到Right_str中 • n為小數時,則系統會自動將n以四捨五入轉成整數型態 • 如果n>Str的長度時,將傳回全部字串 Str=“ABCDEFG” sss=Right(Str,3)  sss=“EFG”

  15. 常用的字串函數(續) • Mid() • 傳回字串中間指定數量的字元 • 語法 • Mid_str=Mid(Str,n) • 將Str字串的第n個字元起後的全部字元放到Mid_str中 • Mid_str=Mid(Str,n,m) • 將Str字串的第n個字元起後的m個字元放到Mid_str中 Str=“ABCDEFG” sss=Mid(Str,3) Str=“ABCDEFG” sss=Mid(Str,3,4)  sss=“CDEFG”  sss=“CDEF”

  16. 常用的字串函數(續) • Len() • 傳回字串的長度 • 語法 • Len_str=Len(Str) • 將Str字串長度的值放到Len_str中 Str=“ABCDEFG” sss=Len(Str)  sss=7

  17. 常用的字串函數(續) • LTrim() 、Trim() 、RTrim() • 刪除字串中的空白字元 • L_str=LTrim(Str) • 傳回Str字串左邊不含空白字元的字串 • T_str=Trim(Str) • 傳回Str字串左右兩邊不含空白字元的字串 • R_str=RTrim(Str) • 傳回Str字串右邊不含空白字元的字串 Str=“ ABCD ” sss=Trim(Str)  sss=“ABCD” Str=“ ABCD ” sss=LTrim(Str) Str=“ ABCD ” sss=RTrim(Str)  sss=“ABCD ”  sss=“ ABCD”

  18. 常用的字串函數(續) • Space() • 重複空白字元 • 語法 • Space_str=Space(n) • 傳回n個空白的字元 Str1=“ABCD” Str2=“EFGH” sss=Str1+Space(3)+Str2  sss=“ABCD EFGH”

  19. 常用的字串函數(續) • String() • 重複特定字元 • 語法 • String_str=String(n,Str) • 傳回n個Str字串的第一個字元 Str=“ABCD” sss=String(4,Str)  sss=“AAAA”

  20. 常用的字串函數(續) • Chr() • Ascii碼轉成字元 • 語法 • Chr_str=Chr(Str) • 將數值資料轉成相對應的Ascii字元 • Asc() • 字元轉成Ascii碼 • 語法 • Asc_str=Asc(Str) • 傳回Str字串的第一個字元轉成Ascii碼 Str=“ABCD” sss=Asc(Str) Str=65 sss=Chr(Str)  sss=65  sss=“A”

  21. 常用的字串函數(續) • Spc() • 移位函數 • 語法 • Spc(n) • 目前游標所在位置開始,向右邊插入n個空白字元 • 與Print指令搭配使用 • Tab() • 定位函數 • 語法 • Tab(n) • 目前游標所在行的最前面開始,向右邊移動n個位置 • 與Print指令搭配使用

  22. 常用的轉換函數 vbTrue:小數點前要補0 vbFalse:小數點前不補0 • Int_str=Val(Str) • 將字串轉為數值型態 • Str_str=Str(Int) • 將數值轉為字串型態 • CV=FormatCurrency(X,n,vbTrue 或 vbFalse) • 將數值資料轉為貨幣值格式 • FP=FormatPercent (X,n,vbTrue 或 vbFalse) • 將數值資料格式化為百分比格式 數值資料 小數位數

  23. 常用的轉換函數(續) • FN=FormatNumber (X,n,vbTrue 或 vbFalse) • 將數值資料格式化 • DV=FormatDateTime(X,[顯示日期時間的格式]) • 假令X=#5/5/2003 10:10:19 PM# • 則顯示日期時間的格式為 • 0  日期與時間 2003/5/5 PM 10:10:19 • 1  完整日期 2003年5月5日 • 2  簡短日期 2003/5/5 • 3  完整時間 PM 10:10:19 • 4  24小時格式 22:10

  24. 常用的轉換函數(續) • Week_name=WeekdayName(Str) • 傳回星期的名稱給Week_name • Month_name=MonthName(Str) • 傳回月份的名稱給Month_name • Reverse_str=StrReverse(Str) • 將字串Str反轉後回傳給Reverse_str • Join_str=Join(Str_Array,[d]) • 將字串陣列組合成一個字串,d代表分隔字元

  25. 常用的數學函數 • Sgn(X) • CInt(X) • Clog(X) • Int(X) • Fix(X) • Sqr(X) • Hex(X) • Oct(X) • Round(X,n) 符號函數 轉為整數函數 轉為長整數函數 求絕對值 • Abs(X) • Sin(X) • Cos(X) • Tan(X) • Atn(X) • Exp(X) • Log(X) • Rnd(X) 三角函數 求整數值 求平方根 16進位函數 8 進位函數 指數函數 自然對數 亂數函數 依指定求出小數點位 數並四捨五入

  26. 常用的日期時間函數 • Date • 目前的系統日期 • Time • 目前的系統時間 • Now • 目前的系統日期與時間

  27. 常用的日期時間函數(續) • Timer • 傳回一 Single型態的數值,其內容為從前一個午夜算起到現在所經過的秒數。 • Year(date) :傳回date變數的年份 • Month(date) :傳回date變數的月份 • Day(date) :傳回date變數的日期 • Hour(time) :傳回time變數的小時 • Minute(time) :傳回time變數的分鐘 • Second(time) :傳回time變數的秒鐘

  28. 範例 • 試設計一萬年曆程式

  29. 陽曆為何有閏年的安排?有何規律性? • 陽曆訂地球繞太陽公轉一周為一年,全年合計365日,稱為平年(平均太陽年的簡稱),但實際上地球繞日公轉一周平均為365.2422日,因此每積四年就會多出約0.9688日,為了使曆法能配合天象,規定當西元年數是四的倍數時,二月就增加1天成29天,該年稱為閏年,又因此法每四年又會多加0.03日左右,故再規定每四百年需減3天,當西元年數逢百年的倍數時,必需是400的倍數才是閏年,如1700、1800、1900都是平年,只有2000年能被400整除才是閏年。

  30. 閏年的規則 • 西元年數為4的倍數者閏 • 100的倍數者不閏 • 但400的倍數者閏 所有的年 可被4整除的年 可被100整除的年 可被400整除的年

  31. 西元元年一月一日是星期幾? • 星期一

  32. 因此… • 西元元年一月三十一日是星期? • 31 mod 7 = 3 • 星期三 • 西元元年二月十日是星期? • (31 + 10) mod 7 = 6 • 星期六 • 西元二年一月十三日是星期? • (365 + 13) mod 7 = 0 • 星期日

  33. Label [Label1(0)] 版面配置 ComboBox [Combo1] Label [Label1(1)] Label [Label2] ComboBox [Combo2] Label [Label3] Command Button [Command1(0)~ Command1(36)] Command Button [Command2]

  34. 所使用的變數 • year (型態為long) • 欲查詢的西元年 • month (型態為integer) • 欲查詢的月份 • day (型態為long) • 自西元元年一月一日至欲查詢的西元年月的第一天的總天數 • 例如:欲查詢2001年12月,則day為西元元年1月1日至2001年12月1日的總天數 • month_day (型態為variant) • 一個儲存平年各月份天數的一維陣列 • (31,28,31,30,31,30,31,31,30,31,30,31)

  35. 程式開始執行時的初值設定 在Combo1中加入1999年至2010年的選項 在Combo2中加入1月至12月的選項 按平年各月的天數來設定month_day這個陣列的初始值

  36. CommandButton2的內容 Private Sub Command2_Click() If MsgBox("是否確定離開??", vbOKCancel + vbQuestion, "離開") = vbOK Then End End If End Sub

  37. CommandButton1要做什麼? 以複製方式建立Command1(0)~Command1(36) • 用來顯示月曆

  38. 程式核心—ComboBox2 • 希望當選定月份後立即顯示相對於所選年月的月曆 • 因此,整個動作的重心就該放在ComboBox2

  39. ComboBox2的內容 滑鼠左鍵點選 Combo2兩次出現 Combo2_Change( )這不是所要的 Combo2_Click才是所要的 副程式段

  40. ComboBox2的內容(續)

  41. ComboBox2的內容(續) 令變數year等於Combo1所點選的年份,並透過Val函數將其轉換為數值 year = Val(Combo1.Text) month = Val(Combo2.Text) For i = 0 To 36 Command1(i).Caption = "" Next i 令變數month等於Combo2所點選的月份,並透過Val函數將其轉換為數值 將Command1(0)到Command1(36)上Caption所顯示的值清空

  42. ComboBox2的內容(續) 計算所欲查詢的年份前一年至西元元年的總天數 假設欲查詢的是2001年12月,year = 2001 day = (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 先將每年都當作平年 (365天),計算總天數 其中共計有幾個閏年 則從西元1年1月1日到西元2000年12月31日 共計有2000*365 + 2000/4 - 2000/100 + 2000/400 = 730000 + 500 – 20 + 5 =730485 天

  43. ComboBox2的內容(續) If ((year Mod 4 = 0 And year Mod 100 <> 0) Or (year Mod 100 = 0 And year Mod 400 = 0)) Then month_day(1) = 29 Else month_day(1) = 28 End If For i = 0 To month - 2 day = day + month_day(i) Next i 假如所欲查詢的年份(2001)為閏年的話 則其2月有29天,否則為28天 累計總天數至欲查詢的前一個月的最後一天(11月30日) 730485+31+28+31+30+31+30+31+31+30+31+30 = 730485 + 334 = 730819 天

  44. ComboBox2的內容(續) 假如欲查詢的年份大於1911年則Label2顯示 民國年份及月份(民國90年12月)否則顯示民 國前年份及月份(民國前5年8月) If year > 1911 Then Label2.Caption = "民國" + Str(year - 1911) + "年" + Str(month) + "月 " Else Label2.Caption = "民國前" + Str(Abs(1912 - year)) + "年" + Str(month) + "月 " End If day = day + 1 week = day Mod 7 累計天數至欲查詢的當月第一天730819 + 1 = 730820 天 計算欲查詢的年月第一天為星期幾(2000年12月1日) 730820 mod 7= 6 (星期六)

  45. ComboBox2的內容(續) 將不需顯示的CommandButton隱藏 For i = 0 To week - 1 Command1(i).Visible = False Next I For i = week + month_day(month - 1) To 36 Command1(i).Visible = False Next i

  46. ComboBox2的內容(續) For i = 1 To month_day(month - 1) Command1(week + i - 1).Visible = True Command1(week + i - 1).Caption = i Next i 依序將日期填註到每一個相對的 CommandButton中

  47. 本章結束 The End

More Related