You are on page 1of 8

Chng Tm - T to Object

T trc n gi, ta lp trnh VB6 bng cch thit k cc Forms ri vit codes x l cc Events ca nhng controls trn Form khi Users click mt Button hay Listbox, .v.v.. Ni chung, cch y cng hu hiu trin khai, nhng nu ta c th hng c cc li ch sau y th cng tt hn na: 1. 2. 3. 4. Dng li c code vit trc y trong mt d n khc D nhn din c mt li (error) pht xut t u D trin khai mt d n ln bng cch phn phi ra thnh nhiu d n nh D bo tr

Mi ln dng li code, nu y nguyn xi con l l tng. Vic y c gi l Reusability. Ni cho ng ra, dng li c tht s l khi ta ch cn dng object code, l code c compiled ri, tc l hon ton khng ng n source code. V h cho php User sa source code l to c hi cho bugs xut hin, ri li phi debug mt ln na. S thch chnh ca vic trin khai mt d n phn mm ln l thc hin ng thi hn (on time), khng l ti kha (within budget) v d bo tr (ease of maintenance). Mun t c cc mc tiu y, ta phi trin khai nhanh v lm sao cho chng trnh t c bugs, d bo tr. Gi d bn ng ra t chc mt m ci. Th tng tng bit bao nhiu chuyn phi lm: t danh sch quan khch, thip mi, m thc, xe c, chp hnh, quay phim, vn ngh cho n th tc nghi l, tip tn, hot no vin ..v.v.. Nu ch mt mnh bn lo tht khng bit lm sao nh cho ht. Cng may l nh hng s m trch lun c vic in n thip mi, ban nhc vn ngh v c hot no vin. Th tc nghi l th khng ai qua c bc Su t, v bc nhn li mua qu cp, lo v tip tn, xe c v th tc, nghi l. Bc cng s lin lc vi Mc s ch l dn ch nh th v sp t ngi git chung v ngi n. Anh T Thng c ngi bn lm ch tim hnh, nn anh nhn trch nhim mn ngi lo chp hnh, quay phim. Nh th vic bn t chc ci m ci nay rt li ch cn son danh sch quan khch, cc bi din vn, sp ch ngi v dn ch cho cp v chng mi i hng tun trng mt. S d bn cm thy trch nhim t chc khng nng n v nh hng, bc Su t v anh T Thng t lo gnh vc cc khu rc ri. Ci hay y l nhng ngi ny t lo quyt nh mi chi tit ca nhng g cn phi lm trong khu ca h. Ch khi no cn lm, h mi lin lc ly kin ca bn. H ging nh nhng ngi thu ca bn. Chc bn lu rng ci th d t chc m ci ny cho thy ni chung mun trin khai d n ln no ta cn phi nh nhng ngi thu gip . Qu tht, l cch cc qun tr vin nhng cng trnh lm t xa n nay. By gi tr li chuyn lp trnh, phi chi ta c th t chc cch trin khai d n phn mm ging nh t chc ci m ci ni trn th tt qu. Tht ra, khng phi cc l thuyt gia phn mm khng ngh n chuyn y trc y, nhng thc hin c vic y ngi ta cn trin khai cc phng tin, dng c thch hp. Ch trong vng 15 nm tr li y, vic y mi tr nn c th qua cc Operating Systems tinh vi, nht l dng Windows, v cc ngn ng lp trnh nh Eiffel, SmallTalk, C++ .v.v.. Lp trnh theo hng i tng (Object Oriented Programming) Ni mt cch nm na, lp trnh theo hng i tng l thit k cc b phn phn mm ca chng trnh, gi l Objects sao cho mi b phn c th t lo liu cng tc ca n ging nh mt ngi thu ngoi i vy. Chc c l bn s hi th th cc Sub hay Function m bn tng vit x l tng giai on trong chng trnh c th m trch vai tr ca mt thu khng? Ngi thu chng nhng c th lm c cng tc (Subs v Functions) g m cn chu trch nhim lun c mi th vt dng cn thit (data) cho vic y na. C mt cch nh ngha khc cho Object l mt Object gm c data structure v cc Subs/Functions lm vic trn cc data y. Thng thng, khi ta dng Objects t khi gim th chng, ngc li nu khi c s

c g th ta mun chng bo co cho ta bit. Trong VB6, cc Forms, Controls hay ActiveX l nhng Objects m ta vn dng lu nay. Ly th d nh Listbox. Mt Listbox t qun l cc items hin th bn trong n. Ta bit listbox List1 ang c bao nhiu items bng cch hi List1.ListCount. Ta bit item no va mi c selected bng cch hi List1.ListIndex. Ta thm mt item vo listbox bng cch gi method AddItem ca List1, ..v.v.. Ni cho ng ra, Object l mt thc th ca mt Class. Nu Listbox l mt Class th List1, List2 l cc thc th ca Listbox. Cng ging nh B T Cho Lng v D Su Bnh Tm l cc thc th ca Class u Bp. Ngay c mt form tn frmMyForm m ta vit trong VB6 chng hn, n cng l mt Class. Thng thng ta dng thng frmMyForm nh sau: frmMyForm.Show Trong trng hp ny tht ra frmMyForm tuy l mt Class nhng c dng y nh mt Object. Ch nu mun, ta c th to ra hai, ba Objects ca Class frmMyForm cng mt lc nh trong th d sau: Dim firstForm As frmMyForm Dim secondForm As frmMyForm Set firstForm = New frmMyForm Set secondForm = New frmMyForm firstForm.Show secondForm.Show Trong th d trn ta declare firstForm v secondForm l nhng Objects ca Class frmMyForm. Sau ta lm nn (instantiate) cc Objects firstForm v secondForm bng statements Set... = New... firstForm v secondForm cn c gi l cc instances ca Class frmMyForm. Class ging nh ci khun, cn Objects ging nh nhng ci bnh lm t khun y. Chc bn thy trong VB6 t dng hai t Class v Object ln ln nhau. u ny cng khng quan trng, min l bn nm vng ngha ca chng. VB6 c ym tr Class m ta c th trin khai v instantiate cc Objects ca n khi dng. Mt Class trong VB6 c cha data ring ca n, c nhng Subs v Functions m ta c th gi. Ngoi ra Class cn c th Raise Events, tc l bo cho ta bit khi chuyn g xy ra bn trong n. Cng ging nh Event Click ca CommandButton, khi User clicks ln button th n Raise Event Click cho ta x l trong Sub myCommandButton_Click(), chng hn. Classtrong VB6 khng c h tr Visual components, tc l khng c cha nhng controls nh TextBox, Label .v.v.. Tuy nhin, ta c th ly nhng control c sn t bn ngoi ri a cho Object ca Class dng. By gi chng ta hy bt u vit mt Class. Bn hy m mt Project mi loi Standard EXE Visual Basic. Sau dng Menu Command chn Add Class Module:

Khi Add Class Module dialog hin ra chn Class Module v click Open.

Bn s thy m ra mt khung trng v Project Explorer vi Properties Window. Trong Properties Window, hy sa Name property ca Class thnh clsBox nh di y:

K nh vo nhng dng code di y, trong c biu din cch dng Class clsBox. Option Explicit Private mX As Integer Private mY As Integer Private mWidth As Integer Private mHeight As Integer Public Property Let X(ByVal vValue As Integer)

mX = vValue End Property Public Property Get X() As Integer X = mX End Property Public Property Let Y(ByVal vValue As Integer) mY = vValue End Property Public Property Get Y() As Integer Y = mY End Property Public Property Let Width(ByVal vValue As Integer) mWidth = vValue End Property Public Property Get Width() As Integer Width = mWidth End Property Public Property Let Height(ByVal vValue As Integer) mHeight = vValue End Property Public Property Get Height() As Integer Height = mHeight End Property Public Sub DrawBox(Canvas As Object) Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), , B End Sub Public Sub ClearBox(Canvas As Object) Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), Canvas.BackColor, B End Sub Class clsBox c 4 Properties: X, Y, Width v Height. Ta s instantiate mt Box t clsBox. Mi Box c ta (X,Y) v kch thc chiu rng v chiu cao (width, height) ca n. Tht ra ta c th dng Public statement declare cc bin X, Y, Width v Height. Nhng y ta c declare chng l Private, di dng mX, mY, mWidth v mHeight. Khi ta mun thay i cc tr s ca chng, ta s dng cng mt cch vit code nh bnh thng (th d: myBox.X = 80 ). Nhng khi chng trnh x l assignment statement y, n s execute mt loi method (ging nh Sub) gi l Property Let X (vValue). Ta thy y vValue c assigned cho mX (i.e. mX = vValue ), ci Private variable ca X. Nh th cng vic ny cng chng khc g sa i mt Public variable X. Tuy nhin, y ta c th vit thm code trong Property Let X n lm g cng c. Bn c nh trong khi thit k mt Label, mi ln bn dng Property Window edit Font size, forcolor hay backcolor th chng nhng cc properties y ca Label thay i, m kt qu ca s thay i c c hiu lc ngay lp tc, ngha l Label c hin th tr li vi tr s mi ca property. l v trong method Property c c code bo Label redisplay. Ngc li, khi ta dng property X ca Object myBox, khng phi ta ch c tr s thi m cn execute c ci method Property Get X. Ni tm li, Property cho ta c hi execute mt method mi khi User

c hay vit tr s variable y. Th d nh nu ta mun kim sot ch chp nhn tr s ta X mi khi n khng phi l s m. Ta s sa Property Let X li nh sau: Public Property Let X(ByVal vValue As Integer) If (vValue >= 0) Then mX = vValue End If End Property Property c th l Read Only hay Write Only. Nu mun mt Property l Read Only th ta khng cung cp Property Let. Nu mun mt Property l Write Only th ta khng cung cp Property Get. Ngoi ra nu lm vic vi Object, thay v Data type thng thng, th ta phi dng Property Set, thay v Property Let. Th d ta cho clsBox mt Property mi, gi l Font dng object ca class stdFont ca VB6. Trong clsBox ta declare mt Private variable mFont v vit mt Property Set Font nh sau: Private mFont As StdFont Public Property Set Font(ByVal newFont As StdFont) Set mFont = newFont End Property Ta s dng property Font ca myBox (thuc Class clsBox) nh sau: ' Declare an object of Class StdFont of VB6 Dim myFont As StdFont Set myFont = New StdFont myFont.Name = "Arial" myFont.Bold = True Dim myBox As clsBox Set myBox = New clsBox Set myBox.Font = myFont ' Call the Property Set method Class clsBox c hai Public Subs, DrawBox v ClearBox. ClearBox cng v mt box nh DrawBox, nhng n dng BackColor ca mn nh (canvas), nn coi nh xa ci box c sn. Do , nu mun, bn c th sa Sub DrawBox li mt cht nhn mt Optional draw color nh sau: Public Sub DrawBox(Canvas As Object, Optional fColor As Long) If IsMissing(fColor) Then Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), , B Else Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), fColor, B End If End Sub Trong th d trn, Optional parameter fColor c tested bng function IsMissing. Nu fColor l BackColor ca canvas th ta s c hiu qu ca ClearBox. Trong form chnh ca chng trnh dng test clsBox, mi khi ta refer n mt object thuc class clsBox, IDE Intellisense s hin th cc Properties v Subs/Functions ca clsBox nh trong hnh di y:

Trong chng trnh ny, mi khi ta click nt Draw th mt Box c instantiate, cho ta X,Y v kch thc Width, Height, ri c v ra ngay trn form. Ch Me trong code ni n chnh ci form frmClass.

cho chng trnh th v hn, khi user clicks nt Animate, ta s cho mt box mu chy t tri qua phi. Khi user clicks nt Two Boxes ta s v hai boxes, hp trong mu xanh, hp ngoi mu , v cho chng chy t tri sang phi. y ta biu din cho thy mnh mun instantiate bao nhiu boxes t clsBox cng c, v d nhin mi box c mt b properties vi gi tr ring ca n.

Ta c th lp trnh cho Object bo co program ch ca n khi c mt bin c (Event) xy ra bn trong Class. Ta th declare mt Event tn Draw trong clsBox, v vit code mi khi Sub DrawBox executes th Class s Raise mt event Draw. Public Event Draw(X As Integer, Y As Integer) Public Sub DrawBox(Canvas As Object, Optional fColor As Long) If IsMissing(fColor) Then Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), , B Else Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), fColor, B End If RaiseEvent Draw(mX, mY) End Sub

By gi, trong frmClass thay v ch declare Dim myBox as clsBox, ta s declare Private WithEvents myBox as clsBox. Ngay sau , ch myBox s hin ra trong danh sch cc Object c h tr Event ca frmClass. K ta s vit code handle Event Draw ca myBox, tc l ta cung cp code cho Private Sub myBox_Draw (X as Integer, Y as Integer). y ta ch hin th mt s ip bo co mt hp va c v u.

Khi chy program, mi ln mt clsBox object executes Sub DrawBox ta s thy frmClass display mt message ging nh di y.

Nh rng, ta declare mt Object vi WithEvents khi ta mun handle cc Events ca n. Trong th d trn frmClass l ch ca myBox v n handles Event Draw ca myBox. Tng t nh vy, ngay c bn trong mt Class, nu Class y c giao cho mt Object c th Raise Events (th d nh TextBox, ListBox, Timer .v.v..), bn cng c th declare Object y WithEvents n c th handle Events ca Object. Trong th d di y ta vit codes ny trong mt Class c giao cho mt Textbox khi form chnh gi Sub InitObject a cho Object mt TextBox: Private WithEvents mTextBox As TextBox Public Sub InitObject(givenTextBox As TextBox) Set mTextBox = givenTextBox End Sub Private Sub mTextBox_KeyPress(KeyAscii As Integer) ' Place your code here to handle this event within the Class Object End Sub

You might also like