Th ng dùng hàm RGB đ ch đ nh màu... Nh p đúp vào form và nh p code: Private Sub Ve Dim R As Integer, G As Integer, B As Integer Dim kieuto As Integer Dim w As Integer, h As Integer
Trang 11
PictureBox V Đ Th
1 Hãy C C N TH N T T C N I DUNG trong bài th c hành tr c khi làm bài
2 Sinh viên T GÕ CODE, KHÔNG COPY t bài có s n, đ n m đ c vi c l p trình
1 Chu n đ u ra
Sau bài này, ng i h c có th :
Chuy n đ i đ c t a đ gi a h t a đ toán (Oxy) và h t a đ c a PictureBox ho c Form đ
v đ th hàm s
S d ng đ c các ph ng th c v : PSet, Line, Circle
V đ c các bi u đ tròn, c t và các đ th hàm s đ c yêu c u
2 Chu n b
c l i v control: PictureBox
Tài li u tham kh o g i ý: Ch ng 9, Giáo trình Visual Basic 6.0, Nguy n ng Quang, i h c
S Ph m K Thu t TP H Chí Minh
3 Ph ng ti n
Máy tính có cài đ t Visual Studio 6.0
4 Ki n th c b tr
H màu RGB:
H màu: là m t s mô t các màu s c trong máy tính Ví d trong th c t , ta mô t màu
b ng t ng , nh : , Cam, Vàng, Tr ng, en…, còn trong máy tính, có r t nhi u màu
c n ph i th hi n, do đó ng i ta th ng đánh s đ ch các màu, ví d : RGB(255, 0, 0):
màu đ , RGB(0, 255, 0): màu xanh lá, RGB(255, 255, 255): màu tr ng
H màu RGB: là h màu đ c dùng ph bi n trong máy tính H màu này dùng 3 thông
s : R (Red – ), G (Green – Xanh lá), B (Blue – Xanh d ng) đ ch màu s c M i
thông s có giá tr t 0-255 Các thông s này k t h p v i nhau t o thành các màu s c,
gi ng nh khi ta tr n các màu l i đ c m t màu t ng h p
Ví d : Red = 255, Green = 0, Blue = 0: màu đ , th ng đ c ghi là: RGB(255, 0, 0);
ho c Red = 0, Green = 0, Blue = 255: màu xanh d ng (RGB(0, 0, 255)); hay Red = 255,
Green = 255, Blue = 0: màu vàng (RGB(255, 255, 0))
Trang 22
H t a đ trong PictureBox:
Trong PictureBox, g c t a đ là góc trên, bên trái c a PictureBox v i các tr c t a đ có chi u
nh hình bên d i Ta g i tên h t a đ này là Ost (đ phân bi t v i h t a đ Oxy trong toán
h c (có tr c Oy h ng lên)):
Nh v y, trong PictureBox:
T a đ theo chi u ngang (Os) có giá tr t 0 ScaleWidth
T a đ theo chi u d c (Ot) có giá tr t 0 ScaleHeight
(ScaleWidth và ScaleHeight là thu c tính ch b r ng và b cao c a PictureBox, xem ph n Các thu c tính c a PictureBox)
i h t a đ sang h t a đ c a PictureBox:
H t a đ trong toán là Oxy (có tr c tung Oy h ng lên), còn h t a đ Ost c a PictureBox có
tr c tung Ot h ng xu ng Ngoài ra, 2 h t a đ này còn có đi m đ t g c t a đ khác nhau Vì
v y, đ v đ th hàm s , ta ph i chuy n t h Oxy sang h Ost Xem 2 ví d chuy n đ i sau
Ví d 1: V hàm y = Asin(x), v i A là m t s d ng, x t 02
i t a đ tr c hoành:
x: 0 2 s: 0 width (width = PictureBox.ScaleWidth)
x/2 = s/width x = s*2 /width
Os
Ot
(0,0)
PictureBox
Oxy Ost
Trang 33
i t a đ tr c tung:
y: -A A t: height 0 (height = PictureBox.ScaleHeight)
Ta th y y t ng (-A A), t gi m (height 0), vì v y ta nhân t v i -1 đ t c ng t ng:
y: -A A -t: -height 0
Bây gi ta đ a m t đ u mút c a y và –t v cùng m t giá tr (trong bài này ta ch n
đ a v 0), b ng cách c ng y v i -A:
y-A: -2A 0 -t: -height 0
y-A/-2A = -t/-height t = (A-y)*height/2A
N u ta ch n A = height/2 thì t = A-y
Ví d 2: V hàm y = -x3 + 3x2 - 2, v i x t -a a ho c y t -a a (t c là g c t a đ Oxy n m chính gi a PictureBox)
i t a đ tr c hoành:
x: -a a s: 0 width (width = PictureBox.ScaleWidth)
Bây gi ta đ a m t đ u mút c a x và s v cùng m t giá tr (trong bài này ta ch n
đ a v 0), b ng cách c ng x v i a:
a+x: 0 2a s: 0 width
(a+x)/2a = s/width x = s*2a/width - a
Oxy Ost
Trang 44
i t a đ tr c tung:
y: -a a t: height 0 (height = PictureBox.ScaleHeight)
Ta th y y t ng (-a a), t gi m (height 0), vì v y ta nhân t v i -1 đ t c ng t ng:
y: -a a -t: -height 0
Bây gi ta đ a m t đ u mút c a y và –t v cùng m t giá tr (trong bài này ta ch n
đ a v 0), b ng cách c ng y v i -a:
y-a: -2a 0 -t: -height 0
y-a/-2a = -t/-height t = (a-y)*height/2a
i m hi n t i (current graphics position) c a PictureBox:
Khi v các hình trong PictureBox, VB s t l u l i v trí c a l n v sau cùng và g i nó là i m
hi n t i T a đ c a đi m này đ c l u trong thu c tính CurrentX, CurrentY c a PictureBox
Ví d : Ban đ u, đi m hi n t i s là g c t a đ c a PictureBox (CurrentX=0, CurrentY=0) Sau
đó, ta v m t đi m lên PictureBox thì đi m hi n t i s là t a đ c a đi m này Sau đó, v ti p
m t đi m khác, thì đi m hi n t i là t a đ đi m m i v N u ta s m t đ ng th ng thì đi m
hi n t i s là đi m đ u cu i c a đ ng th ng (xem thêm v CurrentX ho c CurrentY trong MSDN)
Các thu c tính c a PictureBox:
Cls: xóa n i dung đã có trên PictureBox
AutoRedraw = True: t đ ng v l i n i dung trong PictureBox (ví d nh sau khi
PictureBox b che khu t hay đi u ch nh kích th c… )
ForeColor: xác l p màu dùng đ v hình (màu đ ng vi n hình)
DrawWidth: ch đ nh đ dày c a đ ng vi n khi v hình
FillColor: xác l p màu dùng đ tô vào trong các hình Th ng dùng hàm RGB() đ ch
đ nh màu
FillStyle: xác l p ki u tô trong các hình Ví d : VbFSTransparent: trong su t (m c đ nh
c a VB), vbFSSolid: tô kín b ng màu, vbVerticalLine: tô b ng các đ ng k d c,
vbCross: tô b ng đ ng ca rô (xem thêm trong MSDN)
ScaleHeight, ScaleWidth: chi u cao và chi u r ng bên trong c a PictureBox (không tính
vi n c a PictureBox)
Height, Width: chi u cao và chi u r ng c a PictureBox (có tính c vi n)
Các ph ng th c v c a PictureBox:
PSet (x, y), [color]: v m t đi m (Point Set) t i t a đ (x, y) v i màu color
Line (x1, y1) - (x2, y2), [color], [B][F]: v đ ng th ng t đi m (x1, y1) đ n đi m (x2, y2)
v i màu color N u không ch đ nh đi m (x1, y1) thì VB s l y đi m hi n t i (CurrentX,
CurrentY) làm đi m (x1, y1) N u ch đ nh thêm B: v hình ch nh t (Box) v i 2 đ nh là (x1, y1) và (x2, y2) N u ch đ nh BF: v hình ch nh t và tô màu vào bên trong (Fill),
màu tô là màu đ c ch đ nh b i thu c tính FillColor và FillStyle c a PictureBox
Trang 55
Circle (x, y), radius, [color, start, end, aspect]: v cung tròn ho c hình tròn, hình ellipse
(x, y) là t a đ tâm
N u v hình tròn: radius là bán kính, aspect = 1
N u v ellipse: radius là bán kính l n h n trong 2 bán kính (xem hình bên d i), aspect
= bán kính tr c đ ng / bán kính tr c ngang
Hai hình sau v ellipse có ph ng trình:
Tham s start, end: góc b t đ u và k t thúc c a cung tròn (tính b ng radian) VB luôn luôn
tính góc theo chi u d ng (chi u ng c chi u kim đ ng h ) cho dù góc start và end là s
âm Tuy nhiên, khi ch đ nh góc là s âm, VB s v m t ph n hình tròn đóng (có th tô
màu), còn n u góc là s d ng VB ch v cung tròn (xem hình bên d i)
start = 2 , end = /2 start = - 2 , end = - /2
Các hàm c n bi t:
RGB(do, xanhla, xanhduong): tr v màu s c theo h RGB v i các thông s màu s c có giá tr do, xanhla, xanhduong Ví d : RGB(0, 0, 255): màu xanh d ng
5 Th i l ng 4 ti t
6 N i dung th c hành
Bài th c hành có h ng d n chi ti t:
6.1 V đ ng ellipse 6
6.2 V ellipse và tô màu 7
6.3 V bi u đ tròn 9
6.4 V bi u đ c t 12
6.5 V đ th hàm sin 14
6.6 V đ th hàm b c 3 15
Bài th c hành t th c hi n: 7.1 V đ th hàm s l ng giác 17
b
a
b
a
a>b radius = a, aspect = b/a
b>a radius = b, aspect = b/a
Trang 66
6.1.1 Mô t
D li u vào: các bán kính a, b c a đ ng ellipse
D li u ra: đ ng ellipse t ng ng
i u khi n: nút cmdVe: th c hi n v ellipse
6.1.2 Th c hi n
0 M Visual Basic, ch n New Project/Standard EXE, và save vào th m c
Bai27_PictureBox_VeDuongEllipse (t t o tr c)
1 T o form nh hình:
2 Nh p đúp vào nút cmdVe và nh p code:
Private Sub cmdVe_Click()
Dim a As Integer, b As Integer
Dim xc As Integer, yc As Integer
Dim BanKinh As Integer
a = Val(txtA.Text)
b = Val(txtB.Text)
If a > b Then
BanKinh = a
Else
BanKinh = b
End If
xc = pic1.ScaleWidth / 2
yc = pic1.ScaleHeight / 2
pic1.Cls
pic1.Circle (xc, yc), BanKinh, RGB(0, 0, 255), , , b / a
End Sub
PictureBox:
pic1
Trang 77
3 L u và nh n nút Start hay F5 đ ch y và xem k t qu :
6.2.1 Mô t
D li u vào: các ch đ nh màu s c và ki u tô
D li u ra: hình ellipe v i màu s c và ki u tô t ng ng
i u khi n: các CheckBox và OptionButton
6.2.2 Th c hi n
0 M Visual Basic, ch n New Project/Standard EXE, và save vào th m c
Bai28_PictureBox_VeEllipseVaToMau (t t o tr c)
1 T o form nh hình:
2 Nh p đúp vào form và nh p code:
Private Sub Ve()
Dim R As Integer, G As Integer, B As Integer
Dim kieuto As Integer
Dim w As Integer, h As Integer
PictureBox:
pic1
Trang 88
If chkRed.Value = vbChecked Then
R = 255
Else
R = 0
End If
If chkGreen.Value = vbChecked Then
G = 255
Else
G = 0
End If
If chkBlue.Value = vbChecked Then
B = 255
Else
B = 0
End If
If optSolid.Value = True Then
kieuto = vbFSSolid
ElseIf optVerticalLine.Value = True Then
kieuto = vbVerticalLine
Else
kieuto = vbCross
End If
pic1.Cls
pic1.AutoRedraw = True
pic1.ForeColor = RGB(0, 0, 255)
pic1.DrawWidth = 3
pic1.FillColor = RGB(R, G, B)
pic1.FillStyle = kieuto
w = pic1.ScaleWidth
h = pic1.ScaleHeight
pic1.Circle (w / 2, h / 2), w / 2, , , , h / w
End Sub
Private Sub Form_Load()
Call Ve
End Sub
3 L n l t nh p đúp vào các CheckBox và nh p code:
Private Sub chkBlue_Click()
Call Ve
End Sub
Trang 99
Private Sub chkGreen_Click()
Call Ve
End Sub
Private Sub chkRed_Click()
Call Ve
End Sub
4 L n l t nh p đúp vào các OptionButton và nh p code:
Private Sub optCross_Click()
Call Ve
End Sub
Private Sub optSolid_Click()
Call Ve
End Sub
Private Sub optVerticalLine_Click()
Call Ve
End Sub
5 L u và nh n nút Start hay F5 đ ch y và xem k t qu :
6.3.1 Mô t
D li u vào: s li u cho 4 ph n c a bi u đ
D li u ra: bi u đ tròn v i 4 ph n t ng ng
i u khi n: nút cmdVe: th c hi n v bi u đ
6.3.2 Th c hi n
0 M Visual Basic, ch n New Project/Standard EXE, và save vào th m c
Bai29_PictureBox_VeBieuDoTron (t t o tr c)
Trang 1010
1 T o form nh hình:
2 Nh p đúp vào nút cmdVe và nh p code:
Private Sub cmdVe_Click()
Dim phan1 As Integer, phan2 As Integer, phan3 As Integer, phan4 As Integer
Dim tong As Integer
Dim gocdau As Double, goccuoi As Double
Dim PI As Double
Dim xc As Integer, yc As Integer
PI = 4# * Atn(1#)
xc = pic.ScaleWidth / 2
yc = pic.ScaleHeight / 2
phan1 = Val(txtPhan1.Text)
phan2 = Val(txtPhan2.Text)
phan3 = Val(txtPhan3.Text)
phan4 = Val(txtPhan4.Text)
tong = phan1 + phan2 + phan3 + phan4
pic.Cls
pic.AutoRedraw = True
pic.ForeColor = RGB(0, 0, 255)
pic.DrawWidth = 2
pic.FillStyle = vbFSSolid
'Ve Phan 1
pic.FillColor = RGB(255, 0, 0)
gocdau = 2 * PI
goccuoi = (phan1 / tong) * 2 * PI
PictureBox:
pic
Trang 1111
pic.Circle (xc, yc), pic.ScaleWidth / 2 100, , gocdau, -goccuoi
'Ve Phan 2
pic.FillColor = RGB(0, 255, 0)
gocdau = goccuoi
goccuoi = gocdau + (phan2 / tong) * 2 * PI
pic.Circle (xc, yc), pic.ScaleWidth / 2 200, , gocdau, -goccuoi
'Ve Phan 3
pic.FillColor = RGB(255, 255, 0)
gocdau = goccuoi
goccuoi = gocdau + (phan3 / tong) * 2 * PI
pic.Circle (xc, yc), pic.ScaleWidth / 2 200, , gocdau, -goccuoi
'Ve Phan 4
pic.FillColor = RGB(255, 0, 255)
gocdau = goccuoi
goccuoi = gocdau + phan4 / tong * 2 * PI
pic.Circle (xc, yc), pic.ScaleWidth / 2 200, , gocdau, -goccuoi
End Sub
3 L u và nh n nút Start hay F5 đ ch y và xem k t qu :
Trang 1212
6.4.1 Mô t
D li u vào: s li u cho 4 c t c a bi u đ
D li u ra: bi u đ c t v i 4 c t t ng ng
i u khi n: nút cmdVe: th c hi n v bi u đ
6.4.2 Th c hi n
0 M Visual Basic, ch n New Project/Standard EXE, và save vào th m c
Bai30_PictureBox_VeBieuDoCot (t t o tr c)
1 T o form nh hình:
2 Nh p đúp vào nút cmdVe và nh p code:
Private Sub cmdVe_Click()
Dim c1 As Integer, c2 As Integer, c3 As Integer, c4 As
Integer
Dim cmax As Integer
Dim ChieuRongCot As Integer, ChieuCaoCot As Integer
c1 = Val(txtCot(0).Text)
c2 = Val(txtCot(1).Text)
c3 = Val(txtCot(2).Text)
c4 = Val(txtCot(3).Text)
cmax = c1
If c2 > cmax Then
cmax = c2
End If
If c3 > cmax Then
cmax = c3
End If
If c4 > cmax Then
cmax = c4
End If
PictureBox:
pic
Trang 1313
pic.Cls
pic.AutoRedraw = True
pic.ForeColor = RGB(0, 0, 255)
pic.DrawWidth = 3
ChieuRongCot = pic.ScaleWidth / 4
pic.FillColor = RGB(255, 0, 0)
'Ve Cot 1
pic.FillStyle = vbVerticalLine
ChieuCaoCot = (c1 / cmax) * pic.ScaleHeight
pic.Line (0, Height)-(ChieuRongCot, pic.ScaleHeight -
ChieuCaoCot), , B
'Ve Cot 2
pic.FillStyle = vbHorizontalLine
ChieuCaoCot = (c2 / cmax) * pic.ScaleHeight
pic.Line (ChieuRongCot, Height)-(ChieuRongCot * 2,
pic.ScaleHeight - ChieuCaoCot), , B
'Ve Cot 3
pic.FillStyle = vbCross
ChieuCaoCot = (c3 / cmax) * pic.ScaleHeight
pic.Line (ChieuRongCot * 2, Height)-(ChieuRongCot * 3,
pic.ScaleHeight - ChieuCaoCot), , B
'Ve Cot 4
pic.FillStyle = vbDiagonalCross
ChieuCaoCot = (c4 / cmax) * pic.ScaleHeight
pic.Line (ChieuRongCot * 3, Height)-(ChieuRongCot * 4,
pic.ScaleHeight - ChieuCaoCot), , B
End Sub
3 L u và nh n nút Start hay F5 đ ch y và xem k t qu :
Trang 1414
6.5.1 Mô t
D li u vào: không có
D li u ra: đ th hàm sin
i u khi n: không có (đ th s đ c v khi s ki n Form_Paint (v form) x y ra)
6.5.2 Th c hi n
0 M Visual Basic, ch n New Project/Standard EXE, và save vào th m c
Bai31_PictureBox_VeDoThiHamSin (t t o tr c)
1 T o form nh hình:
2 Nh p đúp vào form và nh p code:
Private Sub Form_Paint()
Dim x As Double, y As Double
Dim s As Integer, t As Integer
Dim A As Integer
Dim width As Integer, height As Integer
Dim PI As Double
Dim SoChuKy As Integer
width = pic1.ScaleWidth
height = pic1.ScaleHeight
A = height \ 2
PI = 4 * Atn(1)
pic1.AutoRedraw = True
PictureBox:
pic1
Trang 1515
'Ve truc Ox
pic1.Line (0, height / 2)-(width, height / 2)
pic1.DrawWidth = 3
'Ve 2 chu ky
SoChuKy = 2
For s = 0 To width Step 1
x = SoChuKy * 2 * PI * s / width
y = A * Sin(x)
t = A - y
pic1.PSet (s, t), RGB(255, 0, 0)
Next
End Sub
3 L u và nh n nút Start hay F5 đ ch y và xem k t qu :
6.6.1 Mô t
D li u vào: hàm b c 3: y = -x3 + 3x2– 2
D li u ra: đ th hàm b c 3: y = -x3
+ 3x2 - 2, v i x có giá tr t -a a ho c y t -a a (a là s
d ng tùy ý)
i u khi n: không có (đ th s đ c v khi s ki n Form_Paint (v form) x y ra)
6.6.2 Th c hi n
0 M Visual Basic, ch n New Project/Standard EXE, và save vào th m c
Bai32_PictureBox_VeDoThiHamBac3 (t t o tr c)
1 Không c n thi t k form (vì v tr c ti p lên form)