Setelah diluncurkannya VB Net sampai beberapa versi, banyak yang bilang bahwa VB6 sudah usang dan tidak layak pakai, malahan Microsoft pun seakan-akan sudah "Membuang" VB6, ini terbukti sewaktu saya berniat membeli VB6 original, mereka bilang bahwa VB6 sudah ditarik, dan sebagai gantinya disarankan membeli VB net, dengan membeli VB Nete otomatis VB6 saya menjadi legal. Mungkin pendapat VB6 sudah usang dan tidak layak pakai ada benarnya, tapi menurut saya pribadi VB6 merupakan pilihan terbaik, sebab selain bahasanya sederhana dan mudah dimengerti, yang tidak kalah pentingnya adalah Software yang dihasilkan VB6 bisa berjalan pada OS Windows 95, Windows 98, Windows Me, Windows XP, Windows Vista dan Windows 7, yang tentunya kemampuan VB6 ini belum tentu dimiliki oleh saudara mudanya. Aplikasi yang dibuat dapat digolongkan menjadi 2 yaitu
- MDIÂ (Multiple Document Interface)
- SDI (Single Document Interface)
Pada MDI, tidak ada masalah bagi pengembang, tapi bagi user cukup merepotkan, diantaranya harus buka tutup Form, Sedangkan bila menggunakan SDI user tidak akan direpotkan dengan buka tutup form, tapi menjadi masalah bagi pengembang. Masalahnya jumlah kontrol atau objek objek yang dapat menempel pada sebuah Form hanya sebanyak 255 kontrol atau objek, bila lebih dari 255 akan muncul pesan kesalahan sebagai berikut : Kalau sudah muncul pesan seperti ini, ya kita tidak bisa berbuat apa-apa. Tapi tentunya tidak ada masalah yang tidak bisa dipecahkan, kita bisa menggunakan tehnik Form Container, yaitu sebuah Form memanggil Fom lain dan form yang dipanggil tersebut akan menempel pada form yang memanggil. Pasti pusing ya, supaya tidak pusing, saya akan memberikan contohnya, kita buat Form1, Form2, dan Form3, Form 11 adalah Form yang memanggil sedangkan Form 2 adalah dan Form3 adalah Form Yang Dipanggil.
Form1 terdiri dari sebuah Picture tempat dimana Form2 dan Form3 akan menempel, dan dua buah Command yaitu Command1 untuk memanggil Form2 dan Command3 untuk memanggil Form3
Yang perlu diperhatikan untuk Form2 dan Form3Â yaitu
- Ukuran Width dan Height harus sama dengan ukuran Picture1 pada Form1
- BerderStyle set ke 0-none
Dan Hasilnya adalah sebagai berikut
SOURCE CODE
Buat Modul dengan kode seperti berikut
Option Explicit Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Declare Function winSetFocus Lib "user32" Alias "SetFocus" (ByVal hWnd As Long) As Long
Declare Function winGetFocus Lib "user32" Alias "GetFocus" () As Long
Public Const GWL_STYLE = (-16)
Public Const WS_CHILD = &H40000000
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOMOVE = &H2 Public Const SWP_NOZORDER = &H4 Public Const SWP_NOREDRAW = &H8 Public Const SWP_NOACTIVATE = &H10 Public Const SWP_FRAMECHANGED = &H20 Public Const SWP_SHOWWINDOW = &H40 Public Const SWP_HIDEWINDOW = &H80 Public Const SWP_NOCOPYBITS = &H100 Public Const SWP_NOOWNERZORDER = &H200
Public Const SWP_DRAWFRAME = SWP_FRAMECHANGED
Public Const SWP_NOREPOSITION = SWP_NOOWNERZORDER Public Const HWND_TOP = 0 Public Const HWND_BOTTOM = 1 Public Const HWND_TOPMOST = -1 Public Const HWND_NOTOPMOST = -2
Pada Form1 tulis kode seperti berikut
Option Explicit
Private mlF2Ptr As Long Private mlP2Ptr As Long Private mlFocus2Ptr As Long Private WithEvents oF2 As Form2 Private WithEvents oF3 As Form3
Private Sub pSetWinStyle(hWnd As Long)
End Sub
Private Function pAssignContainer(lFrmPtr As Long, lPicPtr As Long) As Long
pAssignContainer = SetParent(lFrmPtr, lPicPtr) Call SetWindowPos(lFrmPtr, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE) End Function
Private Sub pReleaseContainer(lFrmPtr As Long, lParentPtr As Long)
SetParent lFrmPtr, lParentPtr End Sub
Private Sub oF2_MoveFocus()
Call winSetFocus(mlFocus1Ptr) End Sub
Private Sub Picture1_GotFocus()
Call winSetFocus(mlF2Ptr) End Sub
Pada event Command1_click tulis kode sebagai berikut
Private Sub Command1_Click() Set oF2 = New Form2 mlF2Ptr = oF2.hWnd pSetWinStyle mlF2Ptr mlP2Ptr = pAssignContainer(mlF2Ptr, Picture1.hWnd) oF2.Visible = True End Sub
Pada Event event Comman2_click, tulis kode sebagai berikut
Private Sub Command2_Click()
Set oF3 = New Form3 mlF2Ptr = oF3.hWnd pSetWinStyle mlF2Ptr mlP2Ptr = pAssignContainer(mlF2Ptr, Picture1.hWnd) oF3.Visible = True oF2.Visible = False Form2.Hide End Sub
Pada Form2 dan Form3, sebelum menuliskan kode sesuai dengan program yang akan dibuat, pertama-tama tulis terlebih dahulu kode sebagai berikut :
Option Explicit
Event MoveFocus()
Contoh Software Sistem Kepegawaian yang menggunakan tehnik Form Container
Baca konten-konten menarik Kompasiana langsung dari smartphone kamu. Follow channel WhatsApp Kompasiana sekarang di sini: https://whatsapp.com/channel/0029VaYjYaL4Spk7WflFYJ2H