You are on page 1of 24

Chng Mi Hai - Dng Ha (Phn I)

Tc ng Anh c cu: "Mt hnh nh ng gi mt ngn ch (a picture is worth a thousand words)", ni khi ta dng hnh nh din t s gip ngi xem hiu nhanh hn khi ta ch c ni thi. Visual Basic 6 c cho ta mt s phng tin v ha (graphics) trang im cho cc ca s phong ph, thn thin, d lm vic vi, v th v. D rng cc phng tin v th ny khng nhanh cho ta vit nhng chng trnh tr chi (games) nhng tng i cng kh nng p ng cc nhu cu cn thit thng thng. Khi ni n ha, ta mun phn bit n vi Text thng thng. Th d ta dng Notepad edit mt bi th trong mt ca s. Trong lc bi th ang c hin th ta c th sa i d dng bng cch dng bn phm nh thm cc ch mi vo, dng cc nt Delete, Backspace xa cc ch. l ta lm vic vi Text. By gi, trong khi bi th cn ang hin th, ta dng mt chng trnh Graphic nh PhotoImpact Capture ca ULead chp ci hnh ca s ca bi th (active window) thnh ging nh mt photo, th ta c mt Graphic. Sau , mun sa i bi th t graphic ny ta phi dng mt graphic editor nh MSPaint, PaintShopPro,.v.v.. Cc ch trong hnh cng c cng dng graphic nh ta thy mt photo, nn mun edit phi dng mt c vi mu sn. Di y l graphic ca mt ca s Notepad sau khi c thm ch g v du chm hi cui bng cch dng MSPaint.

Mu (color) v mn (resolution) Ta ni mt tm hnh tt v n c mu sc so v r rng. Bn c cn nh trong ngy L khai mc Th Vn Hi Moscow, ngi ta cho hin th nhiu hnh rt hay bng cch nh khn gi, trong mt khu hnh ch nht, mi ngi cm a ln mt tm ct-tng mu. Hng ngn tm ct-tng a ln rp li thnh ra mt hnh tuyt p. Mt graphic trong Windows cng gm c nhiu m nh, mi m, c gi l mt pixel, c kh nng hin th 16, 256, ... mu khc nhau. mn (resolution) Thng thng mn (resolution) ca mn nh ta dng l 800x600, tc l chiu ngang c 800 pixels v chiu cao c 600 pixels. Sau ny, xem cc hnh r hn ta cn dng mn 1028x768 vi ct SuperVGA v Monitor tt. Ta ni ct SuperVGA c n 2MB RAM, ti sao phi cn n 2MB hin th graphic p?

Nu mu ca mi pixel c biu din bi mt byte d kin th vi mt byte ta c th cha mt con s t 0 n 255. Ngi ta ng vi nhau theo mt quy c rng s 0 tng trng cho mu en, s 255 tng trng cho mu trng chng hn. Nu mn ca mn nh l 1024x768 th ta s cn 1024x768=786432 bytes, tc l gn 0,8 MB. Mt byte c 8 bits. i khi ta nghe ni 16 bit color, ni thay v mt byte, ngi ta dng n 2 bytes cho mi pixel. Nh vy mi pixel ny c kh nng hin th 216 = 65536 mu khc nhau. Mun dng 16 bit color cho SuperVGA, ta cn phi c 1024x768x2 =1572864 bytes, tc l gn 1,6 MB. l l do ti sao ta cn 2MB RAM. Lu l RAM ca VGA (Vector Graphic Adapter) card khng lin h g vi RAM ca b nh computer. Khng ng cc c ng-L ngy xa bit Tin Hc nn ni trc:"Mt hnh nh ng gi mt ngn ch". Ch word thi IBM gm c 4 bytes, nn mt mn nh ng gi 400 ngn ch, nh vy cc c khng chnh xc lm, nhng coi nh ng. Nn nh rng cng mt graphic hin th trn hai mn nh c cng mn, th d nh 800x600, nhng kch thc khc nhau, th d nh 14 inches v 17 inches, th d nhin hnh trn mn nh 17 inches s ln hn, nhng n vn c cng mt s pixels, c iu pixel ca n ln hn pixel ca mn nh 14 inches. Ni mt cch khc, nu ta dng mn nh ln hn th graphic s ln hn nhng khng c ngha l n r hn. Mun thy r chi tit, ta phi lm cho graphic c mn cao hn. Tr li cu chuyn Th Vn Hi Moscow, mun c hnh r hn, th trong cng mt din tch, ta phi nh b con ngi xch li gn nhau khong t cha nhiu ngi hn v mi ngi cm mt tm ct-tng nh hn. Ta thay i Display Properties ca mt mn nh bng cch right click ln desktop ri select Properties, k click Tab Settings ri chn Screen resolution v Color quality ging nh hnh di y:

Khi ta tng mn ca mn nh, cc hnh nh s nh li v kch thc ca pixel c thu nh li. Do , ta c th cho hin th nhiu th hn trn desktop. Phm cht ca cc graphic vn khng thay i, mc du hnh nh hn. Nh l mun hnh r hn th khi cu to v cha graphic, ta phi dng mt mn cao. Ging nh khi chp hnh, mun hnh p ta cn ci my chp hnh dng phim ln ca th chuyn nghip v focus k lng, thay v dng my r tin t ng, ch a ln l bm chp c. Mu (color) Khi ta dng ch c mt bit (ch c tr s 0 hay 1) cho mi pixel th ta ch c trng hay en. Lc y ta c th dng mt byte (8 bits) cho 8 pixels. Du vy, nu mn ca graphic cao , th hnh cng p. Th xem cc tuyt tc photos trng en ca Cao m, Cao Lnh th bit. Cc my Fax dng nguyn tc scan hnh giy c A4 ra thnh nhng pixels trng en ri gi qua ng dy in thoi qua u kia ti to li hnh t nhng d kin pixels. Visual Basic 6 cho ta ch nh mt con s vo mi mu VB c th hin th, hay chn trc tip mt mu t Dialog. C bn cch:

Bn ch nh trc tip mt con s hay chn mt mu t ci Palette.

Bn chn mt trong cc hng s nh ngha sn trong VB, gi l intrinsic color constants (intrinsic c ngha nm na l cy nh l vn hay in-built), chng hn nh vbRed , vbBlue. Danh sch ca intrinsic color constants ly t VB6 online help c lit k di y:

Dng Function QBColor chn mt trong 16 mu. Function QBColor xut pht t thi Quick Basic (QBasic) ca Microsoft. QBsic l tin thn ca Visual Basic. Trong QBasic bn c th dng cc con s 1,2,3 .. ch nh cc mu Blue, Green, Cyan , .v.v..Function QBColor gin tin ha cch dng mu, user khng cn phi bn tm v cch trn ba th mu cn bn Red, Green, Blue. Bn vit code mt cch n gin nh:

Di y l tr s cc mu ta c th dng vi Function QBColor. Tr s 0 1 2 3 4 5 6 7

Mu Black Blue Green Cyan Red Magenta Yellow White 8 9

Tr s

Mu Gray Light Blue Light Green Light Cyan Light Red Light Magenta Light Yellow Bright White

10 11 12 13 14 15

Dng Function RGB trn ba mu Red, Green v Blue. Trong ci bng lit k cc intrinsic color constants pha trn, nu bn s thy vbWhite(0xFFFFFF) l tng s ca vbRed(0x0000FF), vbGreen(0x00FF00) v vbBlue(0xFF0000). Mt mu c biu din bng s pha trn ca ba thnh phn mu cn bn, mi mu bng mt byte c tr s t 0 n 255. 0 l khng dng mu y, 255 l dng ti a mu y.

H thng s ta dng hng ngy l Thp Phn. Tr s 0xFF ca vbRed l con s 255 vit di dng Thp lc phn (Hexadecimal hay Hex cho gn v y c nh du bng 0x trc con s phn bit vi s Thp phn). Trong h thng s Hex ta m t 0 n 9 ri A,B,C,D,E,F ri qua s hng thp lc 10, 11,.., 19, 1A, 1B, ..1E,1F,20,21..v.v. Tc l thay v ch dng 10 symbols t 0 n 9 trong Thp phn, ta dng 16 symbols t 0 n F. Mun bit thm v h thng s Hex hy c bi C s Nh Phn. Trong hnh di y l mt th d cho thy mu xanh nht c chn gm ba thnh phn Blue(0x990000= 153*256*256), Green(0xCC00= 204*256) v Red(0xFF= 255):

Ghi ch: Bn c th dng Windows Calculator hon chuyn s gia cc dng Decimal, Binary v Hexadecimal. Chn View|Scientific thay v View|Standard.

Function RGB

p dng Function RGB, ta s vit mt chng trnh VB6. Bn hy khi ng mt chng trnh VB6 mi, b vo mt Label tn Label1 vi Caption Red v mt Vertical Scroll tn VScroll1. K select c hai Label1 v VScroll1 ri Copy v Paste hai ln l thm hai cp. i Caption ca hai Label mi ny ra Green v Blue. By gi ta c mt Array ba Vertical Scrolls cng tn VScroll1, vi index l 0,1 v 2. t mt PictureBox tn picColor vo bn phi ba ci VScrolls. Thm mt Label pha di, t tn n l lblRGBValue, nh clear caption ca n, ng c ch Label1 nh di y:

By gi select c ba VScrolls v edit value ca property Max trong ca s Properties thnh 255, ni khi ko ci bar ca mt VScroll1 ln xung ta gii hn tr s ca n t Min l 0 n Max l 255.

Chuyn chnh ta phi lm l vit code x l Event Change ca cc VScrolls. V chng l mt Array nn ta c th dng mt Sub duy nht handle events n t c ba VScrolls. Mi lc mt trong 3 VScrolls thay i tr s ta s trn ba mu Red, Green, Blue biu din bi tr s ca 3 VScrolls thnh mu BackColor ca PictureBox picColor. ng thi ta cho hin th tr s ca ba thnh phn mu Red, Green v Blue trong Label lblRGBValue. Bn hy double click ln mt trong 3 VScrolls ri vit code nh sau: Private Sub VScroll1_Change(Index As Integer) ' Use Function RGB to mix 3 colors VScroll1(0) for Red, ' VScroll1(1) for Green and VScroll1(2) for Blue ' and assign the result to BackColor of PictureBox picColor picColor.BackColor = RGB(VScroll1(0).Value, VScroll1(1).Value, VScroll1(2).Value) ' Variable used to prepare display string Dim strRGB As String ' Description of what is displayed strRGB = "picColor.BackColor = RGB(Red, Green, Blue) " & vbCrLf ' Values of Red, Green, Blue in Decimal strRGB = strRGB & " Decimal: " & VScroll1(0).Value & ", " & VScroll1(1).Value & ", " & VScroll1(2).Value & vbCrLf ' Values of Red, Green, Blue in Hexadecimal strRGB = strRGB & " Hex: 0x" & Hex(VScroll1(0).Value) & ", 0x" & Hex(VScroll1(1).Value) & ", 0x" & Hex(VScroll1(2).Value) ' Assign the resultant string to caption of Label lblRGBValue lblRGBValue.Caption = strRGB End Sub Bn hy khi ng chng trnh ri nm cc bar ca 3 VScrolls ko ln, ko xung xem kt qu. Ca s ca chng trnh s c dng ging nh di y:

Color Mapping Nu dng Hex Calculator i con s 0xFFFFFF ra decimal ta s c 16777215, nu k c s 0 ta s c tng cng 16777216 mu. Lc ny ta bn v 8bit (1 byte) v 16bit (2 bytes) color, nhng y ta ni chuyn 3 byte color. Nh th c th mn nh khng kh nng cung cp mi mu m Function RGB tnh ra. Vy VGA card s lm sao?

Th d mt ct VGA ch h tr n 8 bits. N s cung cp 256 mu khc nhau. Nu Function RGB i hi mt mu m VGA card c th cung cp chnh xc th tt, nu khng n s tm cch dng hai hay ba m gn nhau trn mu v cho ta o tng mu ta mun. Cng tc ny c gi l Color Mapping v ci mu c lm ra c gi l custom color. Dng Intrinsic Color Constants Mt trong nhng features ca MSWindows l cho ta chn Color Scheme ca Windows theo s thch. Bnh thng, Color Scheme ca Windows l Blue, nhng ta c th chn Olive Green hay Silver, nu ta mun.

Ch kh ni nu ta dng mt mu m hin th tuyt p th g trong chng trnh VB6 m by gi user t nhin thay i Color Scheme thnh Olive Green chng hn khin cho mu m y coi chng ging ai trong ci Color Scheme mi. trnh trng hp y, thay v ni thng ra l mu g (xanh hay ) ta ni dng mu vbActiveTitlebar hay vbDesktop, .v.v. Dng Intrinsic Color Constant s bo m mu ta dng s c bin i theo Color Scheme m user chn khi b trng hp ci mu tr nn chng ging ai. Lc thit k, ta cng c th chn Intrinsic Color Constant t Tab System khi chn mu.

Graphic files Khi mt hnh Graphic c lu tr theo dng s pixels vi mu ca chng nh ni trn th ta gi l mt Bit Map v tn file ca n trong disk c extension BMP th d nh House.bmp. Lu tr kiu ny cn rt nhiu memory v rt bt tin gi i hay hin th trn mt trang Web. Do ngi ta dng nhng k thut gim thiu lng memory cn cha graphic nhng vn gi c cht lng ca hnh nh. C hai dng Graphic files rt thng dng trn Web, mang tn vi extensions l JPG v GIF. c bit vi GIF files ta c th cha c hot ha (animation), tc l mt GIF file c th cha nhiu hnh (gi l Frames) chng ln lt thay nhau hin th, cho ngi xem c cm tng mt vt ang di ng. In trn mn nh VB6 c method Print cho ta in thng trn Form, PictureBox hay Printer. Ba loi control ny c coi nh nhng khung vi m ha s v ln. Bn hy khi ng mt chng trnh VB6 mi. t ln form mt PictureBox tn Picture1 v mt button tn CmdPrintTenLines vi Caption Print Ten Lines. DoubleClick ln button ny v vit code di 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 Bn hy chy th program ri click nt Print Ten Lines. Trong trng hp ny ta dng default Font v Color in 10 hng. Sau mi Print, chng trnh t ng xung hng. K , thm mt button tn CmdPrintFontSizes vi Caption Print Font Sizes. DoubleClick ln button ny v vit code di 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 Trong Sub CmdPrintFontSizes_Click, ta thay i c kiu ch cho cc con s c in ra ln ln dn dn v thay i mu ca cc con s bng cch dng function QBColor. in cc con s lin tc khng xung hng ta dng method Print vi semicolon (;). Bn hy chy chng trnh li. Click nt Print Ten Lines ri click nt Print Font Sizes, kt qu s ging nh di y:

By gi bn th minimize ca s ca chng trnh, k restore n li kch thc c. Bn s thy cc hng ta in lc ny khng cn trong form hay PictureBox na. L do l khi ta Print ln form hay PictureBox, cc hnh y c v trong graphic a phng ch khng c VB6 k l mt phn ca ca s. Mun trnh tr ngi ny ta phi dn VB6 nh v li bng cch set property AutoRedraw ca form v Picture1 ra True.

H thng ta Khi t mt Object hay v mt ci g ln mn nh (screen) hay form .v.v.. ta cn phi ch nh Object y nm ch no k t (with reference to) ci gc Trn Tri (Top Left) ca mn nh hay form. Ci gc Trn Tri l Trung tm ta ca screen hay form. ta X v Y u bng 0, ta vit l 0,0. Nu ta i ln qua phi theo chiu rng ca screen th ta X tng ln. Nu ta i dc xung di

theo chiu cao ca screen th ta ca Y tng ln. K n l n v o lng ta dng biu din khong cch. Trong bi trc ta ni n mn ca mn nh (screen resolution) da vo pixel. Ta c th dng n v pixel ni mt Object c ta X v Y mi chiu bao nhiu pixels tnh t trung tm ta . Nh th, ngay c trn cng mt mn nh khi ta tng mn n ln th mt Object c t ln mn nh theo n v pixel s xch qua tri v ln trn mt t v kch thc mt pixel by gi nh hn lc trc mt cht. Hnh di y minh ha cc kch thc ca mn nh v Form.

im cn bit l c nhng phn nh title bar v border ca mt form ta khng th v ln c. Do din tch cn li ca form c gi l Client Area. Chiu rng v chiu cao ca Client Area c gi l ScaleWidth v ScaleHeight. Nu mun khong cch t mt Object n trung tm ta , hay kch thc ca chnh Object, khng h thay i d ta c tng, gim mn ca mn nh hay in hnh ra printer (th d ta mun n lun lun di 5cm chng hn) th ta dng h thng ta theo n v twips ca form. Twips l Default Coordinate System ca VB6. Trong h thng ny mi im l tng ng vi 1/567 centimeter. Do , nu bn v mt dng di 567 twips n s hin th di 1cm trn mn nh, v khi bn in n ra, n cng di 1cm trn giy. Tc l di tht ca Object khng ty thuc vo loi mn nh ( mn cao hay thp) hay printer. Ngi ta ni n l Device independent coordinate system (H thng ta c lp vi dng c). Ni mt cch khc Twips cho ta tht s what you see is what you get (WYSIWYG - thy sao c vy), rt thch hp vi Desktop publishing. Bn c th thay i h thng ta ca mt form bng cch edit property ScaleMode qua ca s Properties nh sau:

Ghi ch: Thay i tr s ScaleMode khng c hiu lc ngay m ch nh hng nhng g c thit k sau . Ging nh khi ta Edit Text trong Notepad, Text Cursor (thanh | chp chp) l v tr hin ti, ni s hin th ci ch ta nh sp ti, trong graphic ta c mt Cursor v hnh, ni s hin th ci g ta sp Print. Ta ch nh v tr ca graphic cursor y bng cch cho tr s ca CurrentX v CurrentY. Bn hy khi ng mt d n VB6 mi v vit code cho Event Resize ca form chnh nh sau:

Th chy chng trnh v Resize form. Mi khi bn Resize form, ch X s c di n v tr khong chnh gia ca Client Area ca form.

Dng Graphics c mt cht cn bn v graphics ca VB6, by gi ta c th t nhng graphics ln form. C hai cch lm chuyn y: Dng Graphical Controls: Ta c PictureBox v Image c th cha hnh nh. Trong khi Line v Shape c th v ng thng hay cc hnh ch nht, trn .v.v.. trn form, lc thit k. Dng Graphics Methods: y l nhng mnh lnh cho ta v trc tip ln form lc run-time. Cc mnh lnh VB6 cho ta l Cls, Pset, Point, Line v Circle.

Ty theo hon cnh, bn c th la chn cch no tin dng. PictureBox v Image Dng PictureBox hay Image l cch d nht hin th mt graphic trong form. Lc thit k, bn c th nh thng tn ca graphic vo property Picture trong ca s Properties. Form cng nhn property Picture. Bn cng c th click ln bn phi ch property Picture browse v chn mt graphic, thng l Bitmap hay Icon.

S khc bit ch gia Image v PictureBox l Image c property Stretch m ta c th set thnh True ko dn graphic ra cho chim trn din tch ca Image. Image l mt grapgic control lightweight (nh k), tc l n khng i hi nhiu memory v chy nhanh hn PictureBox. L do l PictureBox l mt container, tc l n c th cha cc controls khc. Ngoi ra, PictureBox cng cho php ta v ln trn n ging nh trn form. Trong hnh di y, trong lc thit k ta t mt PictureBox v mt Image cng mt c ln cng mt form. K ta assign cng mt picture hnh happy.bmp cho c hai. Ring vi Image, ta set property Stretch ca n ra True.

Ch nh hnh nh lc run-time Trong lc program ang chy, ta c th thay i hnh nh cha trong PictureBox hay Image bng cch dng Function LoadPicture. Nh l ta khng th assign trc tip vo Property Picture ca hai graphical controls ny. L do l Property Picture ch l mt cch thn thin cho ta ch nh mt graphic trong lc thit k. Khi mt hnh nh c ch nh ri, VB6 cha c hnh y vo file c cng tn vi file ca form nhng vi extension .frx. Tc l nu tn ca form l Form1 th graphic ca Property Picture c cha chung vi cc graphics khc ca form trong file Form1.frx. Do , v VB6 program cha lun graphic chung vi n, ta khng cn phi nhc n tn ca graphic file khi dng hay deploy, tc l khng cn nh km tn graphic file trong Setup file cho ngi ta install. Di y l code mu lc run-time ta load mt graphic tn sad.bmp nm trong Subfolder tn images ca App.path vo Image control tn 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 & "\" End If ' Load graphic "sad.bmp" from SubFolder "images" into Image1 Image1.Picture = LoadPicture(LocalDir & "images\sad.bmp") End Sub D nhin, nu ta mun load graphic lc run-time th phi cung cp graphic file ring.

Control Shape Control Shape cho php bn v nhng hnh n gin nh ng thng, hp, vng trn trn form, lc thit k. Sau khi DoubleClick ln control Shape trong Toolbox thm mt control Shape vo form, bn chn loi Shape ca n t ca s Properties ri nm vo mt gc ca Shape trn form drag ln nh ty . Mun sn bn trong mt Shape, bn chn mu t property FillColor. Property FillColor cng ging nh BackColor ca cc controls khc, nhng n ch c hiu lc khi bn cho property FillStyle mt tr s khc hn l 1- Transparent (trong sut), th d nh 0- Solid (dy c).

Control Line Tng t vi cc properties Fill ca Shape, i vi Line bn c cc properties BorderColor, BorderStyle v BorderWidth. Border color ch nh mu ca chnh ng thng, BorderStyle cho bn la ng lin tc hay gch chm, v BorderWidth lm cho ng dy to hn. Cc properties ny cng p dng cho chu vi (ng bao quanh) ca cc hnh ch nht, trn .v.v.

Graphics Methods Trong khi cc Graphical Controls nh Shape, Line cho ta v hnh lc thit k th Graphics Methods cho ta v nhng th y lc run-time. Ta cng c th chm tng m (pixel) hay copy c mt Picture t ch ny n ch khc. Ch cn mt cht kinh nghim bn c th lm hot ha (animation) hay to visual effects tuyt diu m khng cn phi ng n Windows API (Application Programming Interface) dng Function BitBlt. Method PaintPicture Method PaintPicture cho php bn copy rt nhanh mt khi d kin ha, ni nm na l mt khu vc trong mt hnh graphic trn form, PictureBox hay Printer n mt ni khc. Th d bn copy mt hnh t ch ny n ch khc trong form, hay t form/PictureBox ra Printer Object mt chc sau bn in n ra. Bn hy khi ng mt d n VB6 mi v DoubleClick ln PictureBox Icon trong ToolBox t mt PictureBox ln form. t tn PictureBox y l picGraphic v set property Visible ca n ra False ta khng thy n lc run-time. By gi load mt hnh vo property Picture ca picGraphic bng cch Browse mt Bitmap file t ca s Properties. y ta chn INTL_NO.BMP t folder \Program Files\Microsoft Visual Studio\Common\Graphics\Bitmaps\Assorted

Trong chng trnh ny ta mun h khi nt tri ca Mouse xung v di chuyn Mouse cursor th khi cursor i n u, hnh INTL_NO c v n . Ta s dng mt Flag nh du nt-tri-ca-Mouse-Down, t tn l flgMouseDown. Khi nhn c Event MouseDown ta set flgMouseDown thnh True, v khi nhn c Event MouseUp ta reset flgMouseDown thnh False. Mi ln nhn c Event MouseMove th nu flgMouseDown l True ta s PaintPicture INTL_NO. xa background ca form, ta thm mt button tn CmdClearForm chy graphic method Cls. Di y l lit k code mu: ' 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 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

Lu l bn phi declare variable flgMouseDown bn ngoi cc Subs mi Sub u thy v c th dng n. Mun bit thm chi tit v cch dng method PaintPicture, trong VB6 IDE DoubleClick ln ch PaintPicture trong code editor highlight ch y ri bm nt F1. Method PSet
Ta dng method PSet (n t ch Point Set) v mt pixel ln form. Ta cn cho bit PSet u v vi mu g, tc l ta cho n ta X,Y ca pixel v mt mu tnh t function RGB. Di y l code v pixels mu ln form mt cch bt chng (randomly) v v tr v mu sc khi user clicks ln form chnh: 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 trn ta dng method Randomize generate sn trong b nh cc con s real bt chng t 0 n 0.999. Sau mi ln ta gi Function Rnd(1) l n s tr v mt con s real ly bt chng t b s do method Randomize generated. Do , Rnd(1) * ScaleWidth s cho ta mt con s real c tr s t 0 n ScaleWidth. Mun i con s real ra Integer, ta dng Function Int. Khi khi ng chng trnh v Click ln form ta s c hnh ging nh di y:

Mch nc: xa mt m bn Pset li ti ch y mt m mi c cng mu vi BackColor ca form. Method Line


Method Line v mt ng thng t mt ta ny n mt ta khc trong mu do ta ch nh. Vi hai methods PSet v Line ta c th lm c rt nhiu chuyn. Th d mun cho mt vt di ng, ta xa vt y bng cch v li n vi cng mu ca BackColor ca form, ri v vt y v tr mi. Mun v mt a gic nh tam gic hay ch nht ta rp nhiu ng thng li vi nhau, u ca mi ng thng l cui ca ng thng va mi c v trc. Mun sn Shade bn trong mt hnh ch nht ta dng PSet..v.v. C ba cch ch nh ta ca hai u ca mt ng thng ta mun v:

1.

Cho bit ta ca u v cui ng thng: th d: Line (50, 100)-(3000, 4000) Khi ng ny c v xong th v tr ca graphic cursor c ta l v tr ca cui ng, tc l CurrentX=3000 v CurrentY=4000 trong trng hp ny.

2.

Ch cho bit ta cui ng thng: th d: Line -(3600, 4500), vbMagenta Trong trng hp ny v tr ca graphic cursor (CurrentX, CurrentY) c ly lm ta ca u ng thng khi v. Tc l nu trc khi execute dng code ny CurrentX=3000 v CurrentY=4000 th dng code tng ng vi: Line (3000,4000)-(3600,4500), vbMagenta

3.

Dng ch Step ni s khc bit t CurrentX v CurrentY: th d: Line Step(400, 600)-Step(800, -500), vbGreen Nu trc khi execute dng code ny CurrentX=3600 v CurrentY=4500 th dng code tng ng vi: Line (4000,5100)-(4800,4600), vbGreen Trong th d di y, mt hnh tam gic c v bng hai cch coding khc nhau. Khi chy program th, bn hy ln lt click Triangle METHOD I v Triangle METHOD II thy c hai cch v u y nh nhau, ch khc mu thi. 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 mt hnh ch nht, cch tin nht l dng Step nh di 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 cn c th v mt hnh ch nht vi bn gc trn 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) Line -Step(-Delta, Delta) Line -(X1 + Delta, Y2) Line -Step(-Delta, -Delta) Line -(X1, Y1 + Delta) Line -Step(Delta, -Delta) End Sub Ta cng c th sn Shade bn trong hnh ch nht bng cch dng method PSet chm cc m cch nhau chng 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 Mun Shade m hn, bn c th chm cc m gn nhau hn, th d cho cch nhau 30 pixels thay v 50 pixels. C mt cch khc l tng tr s ca DrawWidth, dy ca ng v hay m. By gi phi hp cch v hnh ch nht vi method Shade ni trn v method Print ta c th vit ch bn trong mt khung mu nht 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 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 chy chng trnh ny v click tt c cc buttons trn form, bn s c hnh di y:

Hy nh set property AutoDraw ca form ra True cc graphic chng trnh v khng b mt khi user minimises form. Bn cng c th dng nhng k thut ni trn vi Object Printer in cc mu giy in chi tit. Method Circle
Ta dng Method Circle v hnh trn, hnh bu dc v ng cung, vi bn trong trng rng hay c sn y bng mt mu ta ch nh. Ta phi cho bit ta ca tm im vng trn v bn knh ca n. Bn hy khi ng mt d n VB6 mi, t ln form mt button vi tn frmCircle v caption Circle & Lines. DoubleClick ln button y v vit 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

By gi hy t ln form mt button khc tn CmdArc v caption Draw Arc. Thay v v nguyn mt vng trn, ta s ch v mt hnh vng cung bng mu . ch nh rng ta s v t v tr no trn vng trn n v tr no khc, th d t 45 n 230, ta cn phi i degree ra n v Radian bng cch dng 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 Vng cung lun lun c v ngc chiu kim ng h. Di y l code v mt ng vng cung mu bn knh 800, tm im (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 sn bn trong cc hnh trn, hay Pie Slices (mt phn ca hnh trn) bng cch set FillStyle bng 0 v ch nh mu FillColor. Mt Pie Slice l mt vng cung ng knh bi hai ng thng bn knh hai u. Mun v mt Pie Slice ta nh thm du tr ("-") trc hai tr s Radian, tc l dng -Rads(45), -Rads(230) thay v Rads(45), Rads(230). Di y l code v hai Pie Slices, c tm im lch nhau mt t, ng thi thm ch thch 87.5% v 12.5%. Private Sub CmdPie_Click() FillStyle = 0 ' Fill inside any closed shaped FillColor = vbYellow ' 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 Cch dng cui cng ca method Circle l v mt hnh bu dc (Elllipse). V hnh bu dc ging nh v mt hnh trn nhng ta cn cho thm mt parameter gi l Aspect. Aspect l s lin h gia bn knh vertical v bn knh horizontal. Th d nu Aspect=2 th chiu cao ca hnh bu dc gp i chiu ngang, ngc li, nu Aspect=0.5 th chiu ngang s gp i chiu cao. Di y l code ta dng v hai hnh bu dc cng c, mt ci mu tm nm thng ng v mt ci mu xanh nm ngang. Private Sub CmdEllipse_Click() Circle (1400, 3000), 800, vbMagenta, , , 2

Circle (1400, 3000), 800, vbBlue, , , 0.5 End Sub Nu bn khi ng chng trnh v click c bn buttons bn s thy hnh sau y:

Property DrawMode Thng thng khi ta v, tr s default ca property DrawMode l 13- Copy Pen. C mt tr s DrawMode rt thch hp cho p dng hot ha l 7- Xor Pen. Mun xa mt hnh va v xong ta ch cn v li hnh y trong DrawMode Xor Pen, khng cn bit trc background nh th no, n s hin ra tr li.

You might also like