Agus's Virtual House
A g u s ' s V i r t u a l H o u s e


Membuat Kotak Dialog File Tanpa ActiveX

Artikel ini pernah dimuat di Mikrodata Volume 6 Seri 14. Anda juga dapat mendownload program demonya di http://www.mikrodata.co.id/download

Visual Basic (VB) merupakan bahasa yang menggunakan teknologi ActiveX, dimana komponen-komponen yang ada (dalam VB disebut control) disimpan dalam file yang berbeda (*.OCX) Hal ini menyebabkan ukuran file terkompilasinya (*.EXE,*DLL) kecil, tetapi tetapi jumlah total ruang disk yang dipakai untuk distribusi program sangat besar. Hal ini sebenarnya tidak menjadi masalah bila program yang kita buat memang besar, tetapi akan menjadi masalah serius bila kita membuat program sederhana tetapi mempunyai tampilan standard yang lengkap(menu, toolbar, statusbar, kotak dialog file open dan file save). Juga akan menjadi masalah bila program tersebut akan dibuat untuk didownload dari internet. Bagaimana mengatasi masalah ini?

Ada beberapa control yang sebenarnya diambil dari sistem Windows. File ActiveX(*.OCX) yang dipakai merupakan penghubung antara Visual Basic dengan file system Windows (*.DLL). Kita bisa secara langsung memanggil fungsi system dengan menggunaka fungsi API sehingga bisa mengurangi jumlah file ActiveX(*.OCX) yang kita gunakan. Dengan catatan yang kita panggil langsung adalah komponen yang tidak perlu dibuat secara pemrograman visual. Karena jika hal ini kita lakukan kita malah akan melangkah mundur.

Contoh yang bisa kita gunakan adalah kotak dialog internal Windows, misalnya kotak dialog "File Open" dan "File Save".

Windows mempunyai fungsi API GetOpenFileName untuk menampilkan kotak dialog "Open File" dan GetSaveFileName untuk kotak dialog "File Save". Adapu cara menggunakan kedua fungsi tersebut adalah:

lErrStatus=GetOpenFileName(OpenFile)
lErrStatus=GetSaveFileName(OpenFile)
OpenFile adalah fariable bertipe OPENFILENAME.yang deklarasi type-nya sebagai berikut:

Public Type OPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    Flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type

lErrStatus adalah variabel bertipe Long yang berisi status dari operasi yang berlangsung. Bila lErrStatus > 0 bberarti proses berhasil, sebaliknya bila lErrStatus = 0 berarti proses gagal atau dibatalkan dengan menekan tombol Cancel di dalam kotak dialog file.

Untuk memudahkan Anda saya telah membuat module klas CFileDialog (lihat listing 1 <CFileDialog.txt>) yang membungkus kedua fungsi diatas. Klas ini mudah digunakan karena nama metode dan properti yang dipakai sedapat mungkin dibuat sama dengan kontrol CommonDialog.

Adapun properti yang digunakan sebagai berikut:

  • DefaultExt (Read/Write) – Mengembalikan atau mengeset ektensi file default.
  • DialogTitle (Read/Write) – Mengembalikan atau mengeset string yang ditampilkan di titel bar(caption) dari kotak dialog.
  • ErrorStatus (Read Only) – Mengembalikan status dari proses yang dilakukan, 0 untuk gagal dan > 0 untuk berhasil.
  • FileName (Read/Write) – Mengembalikan path dan nama file yang dipilih atau mengeset nama file yang ditampilkan pertama kali waktu kotak dialog ditampilkan.
  • FileTitle (Read Only) – Mengembalikan nama file (tanpa path) yang dipilih.
  • Filter (Read/Write) – Mengembalikan atau mengeset filter yang ditampilkan di dalam Type list box dari kotak dialog. Catatan: jika pada CommonDialog antar filter dipisahkan dengan karakter "|", maka untuk CFileDialog digunakan karakter ASCII 0 (CHR$(0)).
  • FilterIndex (Read/Write) – Mengembalikan atau mengeset filter default jika digunakan filter lebih dari satu.
  • Flags (Read/Write) – Mengembalikan atau mengeset pilihan(options) untuk kotak dialog. Nilainya didefinisikan di modul modFileDialog (lihat listing 2-<modFileDialog.txt>), jika Anda akan menggunakan beberapa flag Anda tinggal menambahkan saja. Untuk keterangan dari konstanta dalam modFileDialog Anda dapat melihat konstanta yang digunakan CommonDialog di Help, cocokkan nilainya.
  • hwndOwner (Read/Write). - Mengembalikan dan mengeset window/form yang menjadi pemilik dari kotak diaolog Open/Save. Anda harus mengisikan properti hWnd dari form pemilik. Yang dimaksut form pemilik disini adalah form yang ditempati kontrol CommonDialog, jika Anda menggunakan CommonDialog.
  • InitDir (Read/Write) – Mengembalikan atau mengeset direktori inisial.

Sedangkan metoda yang digunakan adalah:

  • ShowOpen – Menampilkan kotak dialog "Open File".
  • ShowSave – Menampilkan kotak dialog "Open Save ".

Supaya lebih jelas bagaimana menggunakan klas CFileDialog saya telah membuat program demo berupa text editor yang saya beri nama CivilSoft Note 1.0 (CSNote.EXE) yang dibuat dengan VB 5.0 (sebelumnya menggunakan VB 4.0). Program ini masih sederhana karena memang hanya untuk demo saja. Program ini juga menggunakan beberapa teknik lain, untuk lebih jelasnya silahkan ke bagian download.

Saya menerima kritik dan saran bila ternyata masih terdapat bug dalam klas CFileDialog. Semoga bermanfaat bagi pembaca sekalian.

[ Top ]
Copyright © 1999 by Agus Suhartono
Last modified on:
Hierarchical Menu by Peter Belesis, Dynamic HTML Lab.