Tải bản đầy đủ (.pdf) (72 trang)

Tự học Visual Basic phần 3

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.09 MB, 72 trang )

T HC VISUAL BASIC 6.0 - PHN 3 1


MC LC

Dùng  Ha (Phn II) ................................................................................. 3
Dùng  Ha (Phn III).............................................................................. 12
C s d liu (Database)............................................................................. 23
Dùng Control Data ...................................................................................... 35
Lp trình vi k thut DAO .......................................................................... 46
Lp trình vi ADO (phn I) .......................................................................... 58

T HC VISUAL BASIC 6.0 - PHN 3 2



T HC VISUAL BASIC 6.0 - PHN 3 3



Dùng  Ha (Phn II)
In trên màn nh
VB6 có method Print cho ta in thng trên Form, PictureBox hay Printer. Ba loi
control này đc coi nh nhng khung vi mà ha s v lên.
Bn hãy khi đng mt chng trình VB6 mi. t lên form mt PictureBox tên
Picture1 và mt button tên CmdPrintTenLines vi Caption Print Ten Lines.
DoubleClick lên button này và vit code di đây:
Private Sub CmdPrintTenLines_Click()
Dim i As Integer
' String variable used for display
Dim strLine As String


' Write 10 lines, one under the other
For i = 1 To 10
strLine = "This is line " & CStr(i)
Me.Print strLine ' Print on Form
Picture1.Print strLine ' Print on Picture1
Next
End Sub

Bn hãy chy th program ri click nút Print Ten Lines. Trong trng hp này
ta dùng default Font và Color đ in 10 hàng. Sau mi Print, chng trình t đng
xung hàng.
K đó, thêm mt button tên CmdPrintFontSizes vi Caption Print Font Sizes.
DoubleClick lên button này và vit code di đây:
Private Sub CmdPrintFontSizes_Click()
Dim i As Integer
' Print numbers 1 to 10, one after the other on the same line
For i = 1 To 10
' Define Font size
Me.Font.Size = Me.Font.Size + i
' Define Color using Function QBColor
Me.ForeColor = QBColor(i)
' Print without moving to next line. Note the semicolon ";"
Me.Print Str(i);
Next
End Sub

T HC VISUAL BASIC 6.0 - PHN 3 4

Trong Sub CmdPrintFontSizes_Click, ta thay đi c kiu ch đ cho các con s
đc in ra ln lên dn dn và thay đi màu ca các con s bng cách dùng

function QBColor.  in các con s liên tc không xung hàng ta dùng method
Print vi semicolon (;). Bn hãy chy chng trình li. Click nút Print Ten Lines
ri click nút Print Font Sizes, kt qu s ging nh di đây:


Bây gi bn th minimize ca s ca chng trình, k đó restore nó li kích
thc c. Bn s thy các hàng ta in lúc nãy không còn trong form hay
PictureBox na.
Lý do là khi ta Print lên form hay PictureBox, các hình y đc v trong graphic
đa phng ch không đc VB6 k là mt phn ca ca s. Mun tránh tr ngi
này ta phi dn VB6 nh v li bng cách set property AutoRedraw ca form
và Picture1 ra True.



T HC VISUAL BASIC 6.0 - PHN 3 5

H thng ta đ
Khi đt mt Object hay v mt cái gì lên màn nh (screen) hay form .v.v.. ta cn
phi ch đnh Object y nm ch nào k t (with reference to) cái góc Trên Trái
(Top Left) ca màn nh hay form.

Cái góc Trên Trái là Trung tâm ta đ ca screen hay form.  đó ta đ X và Y
đu bng 0, ta vit là 0,0. Nu ta đi ln qua phi theo chiu rng ca screen thì
ta đ X tng lên. Nu ta đi dc xung di theo chiu cao ca screen thì ta đ
ca Y tng lên.

K đn là đn v đo lng ta dùng đ biu din khong cách. Trong bài trc ta
đã nói đn đ mn ca màn nh (screen resolution) da vào pixel. Ta có th
dùng đn v pixel đ nói mt Object có ta đ X và Y mi chiu bao nhiêu pixels

tính t trung tâm ta đ.

Nh th, ngay c trên cùng mt màn nh khi ta tng đ mn nó lên thì mt
Object đã đc đt lên màn nh theo đn v pixel s xích qua trái và lên trên
mt ít vì kích thc mt pixel bây gi nh hn lúc trc mt chút.

Hình di đây minh ha các kích thc ca màn nh và Form.



im cn bit là có nhng phn nh title bar và border ca mt form ta không
th v lên đc. Do đó din tích còn li ca form đc gi là Client Area. Chiu
rng và chiu cao ca Client Area đc gi là ScaleWidth và ScaleHeight.
Nu mun khong cách t mt Object đn trung tâm ta đ, hay kích thc ca
chính Object, không h thay đi dù ta có tng, gim đ mn ca màn nh hay in
hình ra printer (thí d ta mun nó luôn luôn dài 5cm chng hn) thì ta dùng h
thng ta đ theo đn v twips ca form.
T HC VISUAL BASIC 6.0 - PHN 3 6

Twips là Default Coordinate System ca VB6. Trong h thng này mi đim là
tng đng vi 1/567 centimeter. Do đó, nu bn v mt dng dài 567 twips
nó s hin th dài 1cm trên màn nh, và khi bn in nó ra, nó cng dài 1cm trên
giy. Tc là đ dài tht ca Object không tùy thuc vào loi màn nh (đ mn
cao hay thp) hay printer. Ngi ta nói nó là Device independent coordinate
system (H thng ta đ đc lp vi dng c). Nói mt cách khác Twips cho ta
tht s what you see is what you get (WYSIWYG - thy sao có vy), rt
thích hp vi Desktop publishing.
Bn có th thay đi h thng ta đ ca mt form bng cách edit property
ScaleMode qua ca s Properties nh sau:



Ghi chú: Thay đi tr s ScaleMode không có hiu lc ngay mà ch nh hng
nhng gì đc thit k sau đó.
Ging nh khi ta Edit Text trong Notepad, Text Cursor (thanh | chp chp) là v
trí hin ti, ni s hin th cái ch ta đánh sp ti, trong graphic ta có mt
Cursor vô hình, ni s hin th cái gì ta sp Print. Ta ch đnh v trí ca graphic
cursor y bng cách cho tr s ca CurrentX và CurrentY.
Bn hãy khi đng mt d án VB6 mi và vit code cho Event Resize ca form
chính nh sau:
T HC VISUAL BASIC 6.0 - PHN 3 7



Th chy chng trình và Resize form. Mi khi bn Resize form, ch X s đc
di đn v trí khong chính gia ca Client Area ca form.


Dùng Graphics
ã có mt chút cn bn v graphics ca VB6, bây gi ta có th đt nhng
graphics lên form. Có hai cách đ làm chuyn y:
• Dùng Graphical Controls: Ta có PictureBox và Image có th cha
hình nh. Trong khi Line và Shape có th v đng thng hay các hình
ch nht, tròn .v.v.. trên form, lúc thit k.
• Dùng Graphics Methods: ây là nhng mnh lnh cho ta v trc tip
lên form lúc run-time. Các mnh lnh VB6 cho ta là Cls, Pset, Point,
Line và Circle.

T HC VISUAL BASIC 6.0 - PHN 3 8



Tùy theo hoàn cnh, bn có th la chn cách nào tin dng.
PictureBox và Image
Dùng PictureBox hay Image là cách d nht đ hin th mt graphic trong form.
Lúc thit k, bn có th đánh thng tên ca graphic vào property Picture trong
ca s Properties. Form cng nhn property Picture. Bn cng có th click lên
bên phi ch property Picture đ browse và chn mt graphic, thng là Bitmap
hay Icon.


S khác bit chí gia Image và PictureBox là Image có property Stretch mà ta
có th set thành True đ kéo dãn graphic ra cho chim trn din tích ca Image.
Image là mt grapgic control lightweight (nh ký), tc là nó không đòi hi
nhiu memory và chy nhanh hn PictureBox. Lý do là PictureBox là mt
container, tc là nó có th cha các controls khác. Ngoài ra, PictureBox cng cho
phép ta v lên trên nó ging nh trên form.

T HC VISUAL BASIC 6.0 - PHN 3 9

Trong hình di đây, trong lúc thit k ta đt mt PictureBox và mt Image cùng
mt c lên cùng mt form. K đó ta assign cùng mt picture hình happy.bmp
cho c hai. Riêng vi Image, ta set property Stretch ca nó ra True.



Ch đnh hình nh lúc run-time

Trong lúc program đang chy, ta có th thay đi hình nh cha trong PictureBox
hay Image bng cách dùng Function LoadPicture. Nh là ta không th assign
trc tip vào Property Picture ca hai graphical controls này. Lý do là Property
Picture ch là mt cách thân thin cho ta ch đnh mt graphic trong lúc thit k.

Khi mt hình nh đã đc ch đnh ri, VB6 cha c hình y vào file có cùng tên
vi file ca form nhng vi extension .frx. Tc là nu tên ca form là Form1 thì
graphic ca Property Picture đc cha chung vi các graphics khác ca form
trong file Form1.frx.
Do đó, vì VB6 program cha luôn graphic chung vi nó, ta không cn phi nhc
đn tên ca graphic file khi dùng hay deploy, tc là không cn đính kèm tên
graphic file trong Setup file cho ngi ta install. Di đây là code mu đ lúc
run-time ta load mt graphic tên sad.bmp nm trong Subfolder tên images ca
App.path vào Image control tên Image1.
Private Sub CmdLoad_Click()
Dim LocalDir As String
' Assign Folder where program resides to LocalDir
LocalDir = App.Path
' Append right backslash if last character is not "\"
If Right(LocalDir, 1) <> "\" Then
LocalDir = LocalDir & "\"
T HC VISUAL BASIC 6.0 - PHN 3 10

End If
' Load graphic "sad.bmp" from SubFolder "images" into Image1
Image1.Picture = LoadPicture(LocalDir & "images\sad.bmp")
End Sub

D nhiên, nu ta mun load graphic lúc run-time thì phi cung cp graphic file
riêng.
Control Shape
Control Shape cho phép bn v nhng hình đn gin nh đng thng, hp,
vòng tròn trên form, lúc thit k. Sau khi DoubleClick lên control Shape trong
Toolbox đ thêm mt control Shape vào form, bn chn loi Shape ca nó t
ca s Properties ri nm vào mt góc ca Shape trên form drag ln nh tùy ý.

Mun sn bên trong mt Shape, bn chn màu t property FillColor. Property
FillColor cng ging nh BackColor ca các controls khác, nhng nó ch có hiu
lc khi bn cho property FillStyle mt tr s khác hn là 1- Transparent
(trong sut), thí d nh 0- Solid (dày đc).


T HC VISUAL BASIC 6.0 - PHN 3 11

Control Line
Tng t vi các properties Fill ca Shape, đi vi Line bn có các properties
BorderColor, BorderStyle và BorderWidth. Border color ch đnh màu ca
chính đng thng, BorderStyle đ cho bn la đng liên tc hay gch chm,
và BorderWidth đ làm cho đng dày to hn. Các properties này cng áp dng
cho chu vi (đng bao quanh) ca các hình ch nht, tròn .v.v.


T HC VISUAL BASIC 6.0 - PHN 3 12

Dùng  Ha (Phn III)
Graphics Methods
Trong khi các Graphical Controls nh Shape, Line cho ta v hình lúc thit k thì
Graphics Methods cho ta v nhng th y lúc run-time. Ta cng có th chm
tng đóm (pixel) hay copy c mt Picture t ch này đn ch khác.

Ch cn mt chút kinh nghim bn có th làm hot ha (animation) hay to
visual effects tuyt diu mà không cn phi đng đn Windows API
(Application Programming Interface) đ dùng Function BitBlt.
Method PaintPicture
Method PaintPicture cho phép bn copy rt nhanh mt khi d kin đ ha,
nói nôm na là mt khu vc trong mt hình graphic trên form, PictureBox hay

Printer đn mt ni khác. Thí d bn copy mt hình t ch này đn ch khác
trong form, hay t form/PictureBox ra Printer Object đ mt chc sau bn in nó
ra.
Bn hãy khi đng mt d án VB6 mi và DoubleClick lên PictureBox Icon trong
ToolBox đ đt mt PictureBox lên form. t tên PictureBox y là picGraphic và
set property Visible ca nó ra False đ ta không thy nó lúc run-time.
Bây gi load mt hình vào property Picture ca picGraphic bng cách Browse
mt Bitmap file t ca s Properties.  đây ta chn INTL_NO.BMP t folder
\Program Files\Microsoft Visual
Studio\Common\Graphics\Bitmaps\Assorted
T HC VISUAL BASIC 6.0 - PHN 3 13



Trong chng trình này ta mun h khi đè nút trái ca Mouse xung và di
chuyn Mouse cursor thì khi cursor đi đn đâu, hình INTL_NO đc v đn đó.
Ta s dùng mt Flag đ đánh du nút-trái-ca-Mouse-Down, đt tên là
flgMouseDown. Khi nhn đc Event MouseDown ta set flgMouseDown
thành True, và khi nhn đc Event MouseUp ta reset flgMouseDown thành
False. Mi ln nhn đc Event MouseMove thì nu flgMouseDown là True ta s
PaintPicture INTL_NO.
 xóa background ca form, ta thêm mt button tên CmdClearForm đ chy
graphic method Cls. Di đây là lit kê code mu:
' Flag that indicates that the Mouse's left button is depressed
Dim flgMouseDown As Boolean

Private Sub Form_Load()
' Initialise flgMouseDown to False
flgMouseDown = False
End Sub


Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
' Set Flag flgMouseDown
flgMouseDown = True
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As
T HC VISUAL BASIC 6.0 - PHN 3 14

Single, Y As Single)
' Paint picGraphic if flgMouseDown is True
If flgMouseDown Then
' Paint full-size picGraphic at Mouse cursor location
PaintPicture picGraphic.Picture, X, Y, picGraphic.Width,
picGraphic.Height
End If
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As
Single, Y As Single)
' Reset Flag flgMouseDown
flgMouseDown = False
End Sub

Private Sub CmdClearForm_Click()
' Clear the form
Cls
End Sub



Lu ý là bn phi declare variable flgMouseDown bên ngoài các Subs đ mi
Sub đu thy và có th dùng nó. Mun bit thêm chi tit v cách dùng method
PaintPicture, trong VB6 IDE DoubleClick lên ch PaintPicture trong code editor
đ highlight ch y ri bm nút F1.
Method PSet
Ta dùng method PSet (đn t ch Point Set) đ v mt pixel lên form. Ta cn
cho bit PSet  đâu và vi màu gì, tc là ta cho nó ta đ X,Y ca pixel và mt
màu tính t function RGB.
T HC VISUAL BASIC 6.0 - PHN 3 15

Di đây là code đ v pixels đ màu lên form mt cách bt chng (randomly)
v v trí và màu sc khi user clicks lên form chính:
Private Sub Form_Click()
Dim i As Integer
' Variables for pixel coordinates
Dim iXCoord As Integer
Dim iYCoord As Integer
' Variable for primary colours
Dim iRed As Integer
Dim iGreen As Integer
Dim iBlue As Integer
' Start the Random number generation
Randomize
' Plot 2000 dots randomly
For i = 1 To 2000
' get a random XCoord.
' Note that Rnd(1) returns a real number between 0 and 1, eg:
0.384
iXCoord = Int(Rnd(1) * ScaleWidth)

' get a random YCoord.
iYCoord = Int(Rnd(1) * ScaleHeight)
' Get a random number between 0 and 254 for each primary colour
iRed = Int(Rnd(1) * 255)
iGreen = Int(Rnd(1) * 255)
iBlue = Int(Rnd(1) * 255)
' Plot the pixel at iXCoord,iYCoord
PSet (iXCoord, iYCoord), RGB(iRed, iGreen, iBlue)
Next
MsgBox ("All done!")
End Sub

Trong thí d trên ta dùng method Randomize đ generate sn trong b nh
các con s real bt chng t 0 đn 0.999. Sau đó mi ln ta gi Function
Rnd(1) là nó s tr v mt con s real ly bt chng t b s do method
Randomize generated. Do đó, Rnd(1) * ScaleWidth s cho ta mt con s real
có tr s t 0 đn ScaleWidth. Mun đi con s real đó ra Integer, ta dùng
Function Int.

Khi khi đng chng trình và Click lên form ta s có hình ging nh di đây:
T HC VISUAL BASIC 6.0 - PHN 3 16


Mách nc:  xóa mt đóm bn Pset li ti ch y mt đóm mi có cùng màu
vi BackColor ca form.
Method Line
Method Line v mt đng thng t mt ta đ này đn mt ta đ khác
trong màu do ta ch đnh. Vi hai methods PSet và Line ta có th làm đc rt
nhiu chuyn. Thí d mun cho mt vt di đng, ta xóa vt y bng cách v li
nó vi cùng màu ca BackColor ca form, ri v vt y  v trí mi. Mun v mt

đa giác nh tam giác hay ch nht ta ráp nhiu đng thng li vi nhau, đu
ca mi đng thng là cui ca đng thng va mi đc v trc. Mun sn
Shade bên trong mt hình ch nht ta dùng PSet..v.v.
Có ba cách đ ch đnh ta đ ca hai đu ca mt đng thng ta mun v:
1. Cho bit ta đ ca đu và cui đng thng:
thí d: Line (50, 100)-(3000, 4000)
Khi đng này đc v xong thì v trí ca graphic cursor có
ta đ là v trí ca cui đng, tc là CurrentX=3000 và
CurrentY=4000 trong trng hp này.
2. Ch cho bit ta đ cui đng thng:
thí d: Line -(3600, 4500), vbMagenta
Trong trng hp này v trí ca graphic cursor (CurrentX,
CurrentY) đc ly làm ta đ ca đu đng thng khi v.
Tc là nu trc khi execute dòng code này CurrentX=3000
và CurrentY=4000 thì dòng code tng đng vi:
Line (3000,4000)-(3600,4500), vbMagenta
T HC VISUAL BASIC 6.0 - PHN 3 17

3. Dùng ch Step đ nói s khác bit t CurrentX và CurrentY:
thí d: Line Step(400, 600)-Step(800, -500), vbGreen
Nu trc khi execute dòng code này CurrentX=3600 và
CurrentY=4500 thì dòng code tng đng vi:
Line (4000,5100)-(4800,4600), vbGreen
Trong thí d di đây, mt hình tam giác đc v bng hai cách coding khác
nhau. Khi chy program đ th, bn hãy ln lt click Triangle METHOD I và
Triangle METHOD II đ thy c hai cách v đu y nh nhau, ch khác màu
thôi.
Private Sub CmdTrianI_Click()
' Drawing a black triangle: METHOD I
Line (700, 500)-(2800, 2400)

Line (2800, 2400)-(1800, 900)
Line (1800, 900)-(700, 500)
End Sub

Private Sub CmdTrianII_Click()
' Drawing a red triangle: METHOD II
' Draw a red line from Location(700, 500) to Location (2800, 24000)
Line (700, 500)-(2800, 2400), vbRed
' Draw a red line from Location(2800,2400) to Location (1800,900)
Line -(1800, 900), vbRed
' Draw a red line from Location(1800,900) to Location (700,500)
Line -(700, 500), vbRed
End Sub

 v mt hình ch nht, cách tin nht là dùng Step nh di đây:
Private Sub Rectangle(ByVal X1 As Integer, ByVal Y1 As Integer, ByVal
X2 As Integer, ByVal Y2 As Integer)
' Draw a rectangle
Line (X1, Y1)-(X2, Y1)
Line -(X2, Y2)
Line -(X1, Y2)
Line -(X1, Y1)
End Sub

Ta còn có th v mt hình ch nht vi bn góc tròn nh sau:
Private Sub RoundCornerRectangle(ByVal X1 As Integer, ByVal Y1 As
Integer, ByVal X2 As Integer, ByVal Y2 As Integer)
Const Delta = 50
' Draw a rectangle with round corner
Line (X1 + Delta, Y1)-(X2 - Delta, Y1)

Line -Step(Delta, Delta)
Line -(X2, Y2 - Delta)
T HC VISUAL BASIC 6.0 - PHN 3 18

Line -Step(-Delta, Delta)
Line -(X1 + Delta, Y2)
Line -Step(-Delta, -Delta)
Line -(X1, Y1 + Delta)
Line -Step(Delta, -Delta)
End Sub

Ta cng có th sn Shade bên trong hình ch nht bng cách dùng method PSet
đ chm các đóm cách nhau chng 50 pixels nh sau:
Private Sub Shade(ByVal X1 As Integer, ByVal Y1 As Integer, ByVal X2 As
Integer, ByVal Y2 As Integer)
' Shade a roundcorner rectangle by plotting dots using method Pset
Const Delta = 50
Dim i As Integer
Dim j As Integer
' Make sure that X1 is less than X2
' Swap values of X1, X2 if X1 > X2
If X2 < X1 Then
Temp = X1
X1 = X2
X2 = Temp
End If
' Make sure that Y1 is less than Y2
' Swap values of Y1, Y2 if Y1 > Y2
If Y2 < Y1 Then
Temp = Y1

Y1 = Y2
Y2 = Temp
End If
' Plotting dots inside the rectangle at 50 pixels apart
For i = X1 + Delta To X2 - Delta Step 50
For j = Y1 + Delta To Y2 - Delta Step 50
PSet (i, j)
Next
Next
End Sub

Mun Shade đm hn, bn có th chm các đóm gn nhau hn, thí d cho cách
nhau 30 pixels thay vì 50 pixels. Có mt cách khác là tng tr s ca
DrawWidth, đ dày ca đng v hay đóm.
Bây gi phi hp cách v hình ch nht vi method Shade nói trên và method
Print ta có th vit ch bên trong mt khung màu nht nh sau:
Private Sub CmdDrawFrame_Click()
Dim X1 As Integer
Dim Y1 As Integer
Dim X2 As Integer
Dim Y2 As Integer
' Initialise Coordinates of rectangle
T HC VISUAL BASIC 6.0 - PHN 3 19

X1 = 4200: Y1 = 1000
X2 = 6200: Y2 = 2000
' Draw a roundcorner rectangle
RoundCornerRectangle X1, Y1, X2, Y2
' Shade the rectangle
Shade X1, Y1, X2, Y2

' Position cursor to Print some text
CurrentX = X1 + 50
CurrentY = Y1 + 50
' Define Font Size
Font.Size = 18
' Print the text at cursor location
Print "Hello there!"
End Sub

Khi chy chng trình này và click tt c các buttons trên form, bn s có hình
di đây:



Hãy nh set property AutoDraw ca form ra True đ các graphic chng trình v
không b mt khi user minimises form.

Bn cng có th dùng nhng k thut nói trên vi Object Printer đ in các mu
giy đin chi tit.
Method Circle
Ta dùng Method Circle đ v hình tròn, hình bu dc và đng cung, vi bên
trong trng rng hay đc sn đy bng mt màu ta ch đnh. Ta phi cho bit
ta đ ca tâm đim vòng tròn và bán kính ca nó.
T HC VISUAL BASIC 6.0 - PHN 3 20

Bn hãy khi đng mt d án VB6 mi, đt lên form mt button vi tên
frmCircle và caption Circle & Lines. DoubleClick lên button y và vit code sau
đây:
Private Sub CmdCircleLine_Click()
' Draw a circle centered at 2000,1500 with radius equal 800

Circle (2000, 1500), 800
' Draw a vertical line from center
Line (2000, 1500)-Step(0, 800)
' Draw a horizontal line from center
Line (2000, 1500)-Step(800, 0)
End Sub

Bây gi hãy đt lên form mt button khác tên CmdArc và caption Draw Arc.
Thay vì v nguyên mt vòng tròn, ta s ch v mt hình vòng cung bng màu đ.
 ch đnh rng ta s v t v trí nào trên vòng tròn đn v trí nào khác, thí d
t 45đ đn 230đ, ta cn phi đi degree ra đn v Radian bng cách dùng
Function Rads nh sau:
Private Function Rads(ByVal Degree As Single) As Single
' Convert Degrees to Radian
Const PI = 22 / 7
Rads = Degree / 180 * PI
End Function

Vòng cung luôn luôn đc v ngc chiu kim đng h. Di đây là code đ v
mt đng vòng cung màu đ bán kính 800, tâm đim  (4000, 2000), t 45đ
đn 230đ:
Private Sub CmdArc_Click()
Circle (4000, 2000), 800, vbRed, Rads(45), Rads(230)
End Sub

Ta có th cho sn bên trong các hình tròn, hay Pie Slices (mt phn ca hình
tròn) bng cách set FillStyle bng 0 và ch đnh màu FillColor. Mt Pie Slice là
mt vòng cung đóng kính bi hai đng thng bán kính  hai đu. Mun v mt
Pie Slice ta đánh thêm du tr ("-") trc hai tr s Radian, tc là dùng -
Rads(45), -Rads(230) thay vì Rads(45), Rads(230).

Di đây là code v hai Pie Slices, có tâm đim lch nhau mt tí, đng thi thêm
chú thích 87.5% và 12.5%.
Private Sub CmdPie_Click()
FillStyle = 0 ' Fill inside any closed shaped
FillColor = vbYellow
T HC VISUAL BASIC 6.0 - PHN 3 21

' Draw a Pie Slice from 90deg to 45deg in Yellow
Circle (3000, 4000), 800, , -Rads(90), -Rads(45)
' Position the graphic cursor to Print some text
CurrentX = 2800: CurrentY = 4400
Print "87.5%"
FillColor = vbBlue
' Draw a Pie Slice from 45deg to 90deg in Blue
Circle (3050, 3900), 800, , -Rads(45), -Rads(90)
' Position the graphic cursor to Print some text
CurrentX = 3400: CurrentY = 3000
Print "12.5%"
FillStyle = 1 ' No fill
End Sub

Cách dùng cui cùng ca method Circle là đ v mt hình bu dc (Elllipse).
V hình bu dc ging nh v mt hình tròn nhng ta cn cho thêm mt
parameter gi là Aspect. Aspect là s liên h gia bán kính vertical và bán kính
horizontal. Thí d nu Aspect=2 thì chiu cao ca hình bu dc gp đôi chiu
ngang, ngc li, nu Aspect=0.5 thì chiu ngang s gp đôi chiu cao.
Di đây là code ta dùng đ v hai hình bu dc cùng c, mt cái màu tím nm
thng đng và mt cái màu xanh nm ngang.
Private Sub CmdEllipse_Click()
Circle (1400, 3000), 800, vbMagenta, , , 2

Circle (1400, 3000), 800, vbBlue, , , 0.5
End Sub

Nu bn khi đng chng trình và click c bn buttons bn s thy hình sau
đây:

T HC VISUAL BASIC 6.0 - PHN 3 22

Property DrawMode
Thông thng khi ta v, tr s default ca property DrawMode là 13- Copy
Pen. Có mt tr s DrawMode rt thích hp cho áp dng hot ha là 7- Xor
Pen. Mun xóa mt hình va v xong ta ch cn v li hình y trong DrawMode
Xor Pen, không cn bit trc đó background nh th nào, nó s hin ra tr li.
T HC VISUAL BASIC 6.0 - PHN 3 23

C s d liu (Database)
Table, Record và Field
Nói đn c s d liu, ta lp tc ngh đn SQLServer, Access hay Oracle .v.v.,
nhng ni cha rt nhiu d liu đ ta có th lu tr hay ly chúng ra mt cách
tin li và nhanh chóng. Hu ht các chng trình ta vit đu có truy cp c s
d liu, và ta dùng nó nh mt công c đ làm vic vi rt nhiu d liu trong
khi tp trung vào vic lp trình phn giao din vi ngi dùng (users).

Do đó ta cn có mt kin thc cn bn v kin trúc ca c s d liu đ hiu lý
do to sao ta thit k hay truy cp nó theo nhng cách nht đnh.

Ta s dùng Access Database biblio.mdb, nm  C:\Program Files\Microsoft
Visual Studio\VB98\biblio.mdb đ minh ha các ý nim cn bit v c s d
liu.


Trong database này có 4
tables: Authors (tác gi), Publishers (nhà xut
bn), Titles (đ mc) và Title Author.



Table Authors cha nhiu
records. Mi record trong table Authors cha 3
fields: Au_ID, Author và Year Born (nm sanh). Ta có th trình bày Table
Authors di dng mt spreadsheet nh sau:
T HC VISUAL BASIC 6.0 - PHN 3 24



Vì cùng mt field ca các records hin th trong cùng mt ct ca spreadsheet,
nên ta cng nói đn mt field nh mt
column (ct). Và vì mi data record
chim mt row (hàng) ca spreadsheet, nên có khi ta cng nói đn mt record
nh mt
row.
Tht tình mà nói, ta không cn phi có mt computer đ lu tr hay làm vic vi
mt table nh Authors này. Ta đã có th dùng mt hp ct, trên mi ct ta ghi
các chi tit Au_ID, Author và Year Born ca mt Author. Nh th mi tm ct
tng đng vi mt record và nguyên cái hp là tng đng vi Table
Authors.
Ta s sp các ct trong hp theo th t ca s Au_ID đ có th truy cp record
nhanh chóng khi bit Au_ID. Ch kh mt ni, nu mun bit có bao nhiêu tác
gi, trong s 300 ct trong hp, già hn 50 tui thì phi mt vài phút mi có th
tr li đc. Database trong computer nhanh hn mt h thng bng tay
(Manual) là  ch đó.

Primary Key và Index
 tránh s trùng hp, thng thng có mt field ca record, thí d nh Au_ID
trong Table Authors, đc dành ra đ cha mt tr s đc đáo (unique). Tc là
trong Table Authors ch có mt record vi field Au_ID có tr s y mà thôi. Ta gi
nó là
Primary Key.
T HC VISUAL BASIC 6.0 - PHN 3 25



Không phi lúc nào ta cng mun truy cp mt record Author da vào Au_ID.
Nhiu khi ta mun dùng chính tên ca Author đ truy cp, do đó ta cng cn
phi sort sn các records theo th t alphabet. Ta cng có th hp nhiu fields
li đ sort các records. Tht ra, chính các records không cn phi đc di đi đ
nm đúng v trí th t. Ta ch cn nh v trí ca nó  đâu trong table là đ ri.

Cái field hay tp hp ca nhiu fields (thí d surname và firstname ) đ dùng
vào vic sorting này đc gi là
Index (ngón tay ch). Mt Table có th có mt
hay nhiu Index. Mi Index s là mt table nh ca nhng pointers, cha v trí
ca các records trong Table Authors. Nó ging nh mc lc index  cui mt
cun sách cha trang s đ ch ta đn đúng phn ta mun tìm trong quyn sách.

Khi thit k mt Table ta ch đnh Datatype ca mi field đ có th kim tra
data cho vào có hp l hay không. Các Datatypes thông dng là Number, String
(đ cha Text), Boolean (Yes/No), Currency (đ cha tr s tin) và Date (đ
cha date/time). Datatype Number li gm có nhiu loi datatypes v con s
nh Integer, Long (integer chim 32 bits), Single, Double, .v.v.















×