Delphi menyediakan komponen DBGrid yang kuat untuk memfasilitasi desain aplikasi database. Namun jika kita hanya menggunakan komponen DBGrid, setiap fokus (Grid) hanyalah kotak pengeditan teks sederhana, sehingga merepotkan pengguna untuk memasukkan data. Delphi juga menyediakan beberapa komponen data lain untuk memudahkan input pengguna, seperti DBComboBox, DBCheckBox dan komponen lainnya, namun komponen tersebut tidak sekuat DBGrid. Bisakah Delphi, seperti Visual FoxPRo, mengizinkan grid fokus di DBGrid menjadi komponen data visual lainnya demi kenyamanan pengguna? Faktanya, kita dapat mencapai hal ini dengan memasukkan komponen visual lainnya ke dalam DBGrid.
Mekanisme internal Delphi untuk memproses DBGrid adalah dengan mengapungkan komponen di grid - komponen DBEdit. Grid tempat Anda memasukkan data sebenarnya adalah komponen DBEdit mengambang, dan area lain yang tidak mendapatkan fokus hanyalah gambar. Oleh karena itu, memasukkan komponen visual lainnya ke dalam DBGrid akan membuat komponen visual melayang di grid. Oleh karena itu komponen apa pun, dari DbCheckBox sederhana hingga kotak dialog kompleks, dapat disisipkan di DBGrid. Berikut ini adalah langkah cara memasukkan komponen DBComboBox ke dalam DBGrid. Anda dapat memasukkan komponen lainnya dengan cara yang sama.
1. Buat proyek baru di Delphi 4.0.
2. Tarik keempat komponen DataSource dan Table pada papan komponen Akses data serta DBGrid dan DBComboBox pada papan komponen Kontrol Data ke Form1.
3. Atur properti masing-masing komponen sebagai berikut:
pabrik pengaturan atribut objek rcf1
Caption Form1 'Contoh memasukkan komponen SpinEdit ke dalam DBGrid'
DataSource1 Kumpulan Data Tabel1
Tabel 1 Nama Basis Data DBDEMOS
Nama Tabel 'guru.DBF'
Aktif Benar
Sumber Data DBGrid1 Sumber Data1
DBComboBox1 DataField SEKS
Sumber Data Sumber Data1
Terlihat Salah
Item String. 'Pria' |. 'Wanita'
Catatan: Saya menggunakan Teacher.dbf di sini, yang mencerminkan jenis kelamin dosen dan staf, yang hanya boleh "laki-laki" atau "perempuan".
4. Acara DrawDataCell adalah menggambar sel. Ketika bidang yang terkait dengan kisi fokus konsisten dengan bidang yang terkait dengan kotak kombo, pindahkan kotak kombo ke kisi fokus, dan
Jadikan kotak kombo terlihat untuk mencapai fungsi menampilkan DBComboBox pada kolom tertentu di DBGrid. Atur acara OnDrawDataCell DBGrid1 sebagai berikut:
prosedur TForm1.DBGrid1DrawDataCell(Pengirim: TObject; const Rect: TRect; Bidang: TField; Status: TGridDrawState);
mulai
if (gdFokus pada Negara) lalu
mulai
jika (Field.FieldName = DBComboBox1.DataField ) maka
mulai
DBComboBox1.Kiri := Persegi.Kiri + DBGrid1.Kiri;
DBComboBox1.Top := Persegi.Top + DBGrid1.top;
DBComboBox1.Width := Persegi.Kanan - Persegi.Kiri;
DBComboBox1.Height := Persegi.Bawah - Persegi.Atas;
DBComboBox1.Terlihat := Benar;
akhir;
akhir;
akhir;
5. DBComboBox tidak ditampilkan ketika sel tertentu di DBGrid tidak menerima fokus. Atur acara OnColExit DBGrid1 sebagai berikut:
prosedur TForm1.DBGrid1ColExit(Pengirim: TObject);
mulai
Jika DBGrid1.SelectedField.FieldName = DBComboBox1.DataField maka
mulai
DBComboBox1.Terlihat := false;
akhir;
akhir;
6. Ketika kolom DBGrid yang ditentukan mendapat fokus, event DrawDataCell hanya menggambar sel dan menampilkan DBComboBox, namun DBComboBox tidak mendapatkan fokus, dan input data tetap dilakukan pada sel. Panggil fungsi SendMessage Windows API di acara KeyPress DBGrid1 untuk mentransfer input data ke DBComboBox, sehingga mencapai input data di DBComboBox. Jadi atur juga event KeyPress sebagai berikut:
procedure TForm1.DBGrid1KeyPress(Pengirim: TObject; var Key: Char);
mulai
jika (kunci < > chr(9)) maka
mulai
jika (DBGrid1.SelectedField.FieldName =DBComboBox1.DataField) maka
mulai
DBComboBox1.SetFokus;
SendMessage(DBComboBox1.Handle, WM_Char, Word(Kunci), 0);
akhir;
akhir;
akhir;
Program ini berhasil di-debug pada Windows 98 dan Delphi 4.015 Cina. Saya harap artikel ini memungkinkan Anda mengembangkan aplikasi database dengan lebih mudah dan cepat.