《VB6的绘图方法与常用函数》由会员分享,可在线阅读,更多相关《VB6的绘图方法与常用函数(48页珍藏版)》请在金锄头文库上搜索。
1、VB6 的繪圖方法與常用函數2021/5/231常用繪圖方法(Method)指令 ClsClear Screen,清除螢幕用點、線、圓.等繪圖方法所畫出的圖形或是用 Print 輸出的字串,都可以用Cls 方法來加以清除。語法Object.Cls 物件.Cls 2021/5/232常用繪圖方法、指令(續)Pset 用來畫任意顏色的點 語法Object.PsetStep(X, Y), color 其中的 X, Y 是單精度變數,因此可以使用小數數值、變數。如果不指定 color 引數,就以 ForeColor 屬性的顏色為顏色。 如果將color 引數,設定為 BackColor就會有消除的效果
2、。 2021/5/233常用繪圖方法、指令(續)Point 可以讀取任意點的顏色值 語法Object.Point(X, Y)Picture1AutoRedraw : TrueDrawWidth : 52021/5/234常用繪圖方法、指令(續)Line 畫一條線 語法B:畫框BF:畫框且填滿Object.LineStep(X1, Y1) Step(X2, Y2) ,Color, BFLine (X1, Y1)-(X2, Y2)Line (X1, Y1)2021/5/235常用繪圖方法、指令(續)Circle畫圓 語法Radius:半徑Start:弧的起點End:弧的終點Aspec:長短軸比Ob
3、ject.Circle Step (X, Y), Radius, Color, Start, End, Aspec 2021/5/236牛刀小試(1)試寫一程式,模擬小畫家的噴霧、畫筆與畫線的功能2021/5/237牛刀小試(1)-續Picture1Box *1Shape *16CommandButton *82021/5/238牛刀小試(1)-續屬性設定PictureBox (Picture1)AutoRedraw:TrueAppearance:0 平面BorderStyle:1 單線固定ScaleMode:3 像素Shape (Shape1(0)(15)CommandButton (Com
4、mand15)Caption:如圖示Command4(0)(3)表示線條寬度設定2021/5/239牛刀小試(1)-續全域變數宣告:mode1噴霧、2畫筆、3畫線ttt滑鼠左鍵點選的狀態0第一次點選、1第二次點選xx, yy記錄滑鼠第一次點選的座標selcolor從調色盤選取的顏色值ttt的起始值設為0Picture1的起始線條寬度為1填充Shape1,建立調色盤當滑鼠的左鍵點選調色盤後,將色碼值指派給selcolor變數2021/5/2310牛刀小試(1)-續當按下Command1設定為噴霧當按下Command2設定為畫筆當按下Command3設定為畫筆當按下Command4(0)(3)時按
5、所對應 Index的Caption設定Picture1的 線條寬度當按下Command5時,清空Picture1的 內容2021/5/2311牛刀小試(1)-續當mode=1時(噴霧) ,以滑鼠所點選的位置座標為中心,上下左右各延伸十個像素,以亂數取20個座標點,分別畫上一點當mode=2時(畫筆) ,以滑鼠第一次點選的位置為基準繪上一點,並令ttt變數值為1,倘若第二次點選滑鼠,則令ttt變數值為0當mode=3時(畫線) ,以滑鼠第一次點選的位置為基準繪上一點,並令ttt變數值為1,以xx及yy變數記錄起點,倘若第二次點選滑鼠,則令ttt變數值為0,且於(xx,yy)到第二次的點選點繪製一
6、條線當mode=2且ttt=1時,移動滑鼠的同時,於Picture1上繪製前一個座標到目前座標間的線條2021/5/2312常用的字串函數Left()傳回字串左邊指定數量的字元語法Left_str=Left(Str, n)將Str字串的左邊n個字元放到Left_str中n為小數時,則系統會自動將n以四捨五入轉成整數型態如果nStr的長度時,將傳回全部字串Str=“ABCDEFG”sss=Left(Str,3) sss=“ABC”2021/5/2313常用的字串函數(續)Right()傳回字串右邊指定數量的字元語法Right_str=Right(Str, n)將Str字串的右邊n個字元放到Rig
7、ht_str中n為小數時,則系統會自動將n以四捨五入轉成整數型態如果nStr的長度時,將傳回全部字串Str=“ABCDEFG”sss=Right(Str,3) sss=“EFG”2021/5/2314常用的字串函數(續)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) sss=“CDEFG”Str=“ABCDEFG”sss=Mid(Str,3,4) sss=“
8、CDEF”2021/5/2315常用的字串函數(續)Len()傳回字串的長度語法Len_str=Len(Str)將Str字串長度的值放到Len_str中Str=“ABCDEFG”sss=Len(Str) sss=72021/5/2316常用的字串函數(續)LTrim() 、Trim() 、RTrim()刪除字串中的空白字元L_str=LTrim(Str)傳回Str字串左邊不含空白字元的字串T_str=Trim(Str)傳回Str字串左右兩邊不含空白字元的字串R_str=RTrim(Str)傳回Str字串右邊不含空白字元的字串Str=“ ABCD ”sss=LTrim(Str) sss=“ABC
9、D ”Str=“ ABCD ”sss=RTrim(Str) sss=“ ABCD”Str=“ ABCD ”sss=Trim(Str) sss=“ABCD”2021/5/2317常用的字串函數(續)Space()重複空白字元語法Space_str=Space(n)傳回n個空白的字元Str1=“ABCD”Str2=“EFGH”sss=Str1+Space(3)+Str2 sss=“ABCD EFGH”2021/5/2318常用的字串函數(續)String()重複特定字元語法String_str=String(n,Str)傳回n個Str字串的第一個字元Str=“ABCD” sss=String(4,
10、Str) sss=“AAAA”2021/5/2319常用的字串函數(續)Asc()字元轉成Ascii碼語法Asc_str=Asc(Str)傳回Str字串的第一個字元轉成Ascii碼Chr()Ascii碼轉成字元語法Chr_str=Chr(Str)將數值資料轉成相對應的Ascii字元Str=“ABCD” sss=Asc(Str) sss=65Str=65 sss=Chr(Str) sss=“A”2021/5/2320常用的字串函數(續)Tab()定位函數語法Tab(n)目前游標所在行的最前面開始,向右邊移動n個位置與Print指令搭配使用Spc()移位函數語法Spc(n)目前游標所在位置開始,向
11、右邊插入n個空白字元與Print指令搭配使用2021/5/2321常用的轉換函數Int_str=Val(Str)將字串轉為數值型態Str_str=Str(Int)將數值轉為字串型態CV=FormatCurrency(X,n,vbTrue 或 vbFalse)將數值資料轉為貨幣值格式FP=FormatPercent (X,n,vbTrue 或 vbFalse)將數值資料格式化為百分比格式數值資料小數位數vbTrue:小數點前要補0vbFalse:小數點前不補02021/5/2322常用的轉換函數(續)FN=FormatNumber (X,n,vbTrue 或 vbFalse)將數值資料格式化DV
12、=FormatDateTime(X,顯示日期時間的格式)假令X=#5/5/2003 10:10:19 PM#則顯示日期時間的格式為0 日期與時間 2003/5/5 PM 10:10:191 完整日期 2003年5月5日2 簡短日期 2003/5/53 完整時間 PM 10:10:194 24小時格式 22:102021/5/2323常用的轉換函數(續)Week_name=WeekdayName(Str)傳回星期的名稱給Week_nameMonth_name=MonthName(Str)傳回月份的名稱給Month_nameReverse_str=StrReverse(Str)將字串Str反轉後回
13、傳給Reverse_strJoin_str=Join(Str_Array,d)將字串陣列組合成一個字串,d代表分隔字元2021/5/2324常用的數學函數Abs(X)Sin(X)Cos(X)Tan(X)Atn(X)Exp(X)Log(X)Rnd(X)Sgn(X)CInt(X)Clog(X)Int(X)Fix(X)Sqr(X)Hex(X)Oct(X)Round(X,n)求整數值三角函數求絕對值指數函數自然對數亂數函數符號函數轉為整數函數轉為長整數函數求平方根16進位函數8 進位函數依指定求出小數點位數並四捨五入2021/5/2325常用的日期時間函數Date目前的系統日期Time目前的系統時間N
14、ow目前的系統日期與時間2021/5/2326常用的日期時間函數(續)Timer傳回一 Single型態的數值,其內容為從前一個午夜算起到現在所經過的秒數。Year(date) :傳回date變數的年份Month(date) :傳回date變數的月份Day(date) :傳回date變數的日期Hour(time) :傳回time變數的小時Minute(time) :傳回time變數的分鐘Second(time) :傳回time變數的秒鐘2021/5/2327範例試設計一萬年曆程式2021/5/2328陽曆為何有閏年的安排?有何規律性?陽曆訂地球繞太陽公轉一周為一年,全年合計365日,稱為平年(
15、平均太陽年的簡稱),但實際上地球繞日公轉一周平均為365.2422日,因此每積四年就會多出約0.9688日,為了使曆法能配合天象,規定當西元年數是四的倍數時,二月就增加1天成29天,該年稱為閏年,又因此法每四年又會多加0.03日左右,故再規定每四百年需減3天,當西元年數逢百年的倍數時,必需是400的倍數才是閏年,如1700、1800、1900都是平年,只有2000年能被400整除才是閏年。 2021/5/2329閏年的規則西元年數為4的倍數者閏100的倍數者不閏但400的倍數者閏所有的年可被4整除的年可被100整除的年可被400整除的年2021/5/2330西元元年一月一日是星期幾?星期一20
16、21/5/2331因此西元元年一月三十一日是星期?31 mod 7 = 3星期三西元元年二月十日是星期?(31 + 10) mod 7 = 6星期六西元二年一月十三日是星期?(365 + 13) mod 7 = 0星期日2021/5/2332版面配置ComboBoxCombo1ComboBoxCombo2LabelLabel1(0)LabelLabel3LabelLabel2LabelLabel1(1)Command ButtonCommand1(0)Command1(36)Command ButtonCommand22021/5/2333所使用的變數year (型態為long)欲查詢的西元年
17、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)2021/5/2334程式開始執行時的初值設定在Combo1中加入1999年至2010年的選項在Combo2中加入1月至12月的選項按平年各月的天數來設定month_day這個陣列的初始值Month_day01234567891011相對
18、月份123456789101112相對天數3128313031303131303130312021/5/2335CommandButton2的內容Private Sub Command2_Click() If MsgBox(是否確定離開?, vbOKCancel + vbQuestion, 離開) = vbOK Then End End IfEnd Sub2021/5/2336CommandButton1要做什麼?用來顯示月曆以複製方式建立Command1(0)Command1(36)2021/5/2337程式核心ComboBox2希望當選定月份後立即顯示相對於所選年月的月曆因此,整個動作的重
19、心就該放在ComboBox22021/5/2338ComboBox2的內容滑鼠左鍵點選 Combo2兩次出現Combo2_Change( )這不是所要的Combo2_Click才是所要的副程式段2021/5/2339ComboBox2的內容(續)2021/5/2340ComboBox2的內容(續) year = Val(Combo1.Text) month = Val(Combo2.Text) For i = 0 To 36 Command1(i).Caption = Next i令變數year等於Combo1所點選的年份,並透過Val函數將其轉換為數值令變數month等於Combo2所點選的
20、月份,並透過Val函數將其轉換為數值將Command1(0)到Command1(36)上Caption所顯示的值清空2021/5/2341ComboBox2的內容(續) day = (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400計算所欲查詢的年份前一年至西元元年的總天數假設欲查詢的是2001年12月,year = 2001則從西元1年1月1日到西元2000年12月31日共計有2000*365 + 2000/4 - 2000/100 + 2000/400= 730000 + 500 20 + 5 =7
21、30485 天先將每年都當作平年(365天),計算總天數其中共計有幾個閏年2021/5/2342ComboBox2的內容(續) 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天累計總天數至欲查詢的前一
22、個月的最後一天(11月30日)730485+31+28+31+30+31+30+31+31+30+31+30= 730485 + 334 = 730819 天2021/5/2343ComboBox2的內容(續) 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假如欲查詢的年份大
23、於1911年則Label2顯示民國年份及月份(民國90年12月)否則顯示民國前年份及月份(民國前5年8月)累計天數至欲查詢的當月第一天730819 + 1 = 730820 天計算欲查詢的年月第一天為星期幾(2000年12月1日) 730820 mod 7= 6 (星期六)餘數與星期對照表餘數0123456星期日 一 二 三 四 五 六2021/5/2344ComboBox2的內容(續)For i = 0 To week - 1 Command1(i).Visible = False Next IFor i = week + month_day(month - 1) To 36 Command1(i).Visible = False Next i 將不需顯示的CommandButton隱藏2021/5/2345ComboBox2的內容(續) For i = 1 To month_day(month - 1) Command1(week + i - 1).Visible = True Command1(week + i - 1).Caption = i Next i依序將日期填註到每一個相對的CommandButton中2021/5/2346本章結束 The End2021/5/2347部分资料从网络收集整理而来,供大家参考,感谢您的关注!