Ketika orang menggunakan Delphi untuk mengembangkan aplikasi basis data, mereka sering menggunakan kontrol tabel untuk membuat laporan. Penggunaan yang fleksibel dari acara OnDrawcell dari kontrol tabel dapat melengkapi tampilan beberapa efek khusus, yang dapat memenuhi kebutuhan pengguna dengan lebih baik. Artikel ini memperkenalkan tiga tips untuk secara fleksibel menggunakan acara OnDrawcell.
Perbarui warna baris tabel secara dinamis
Terkadang perlu memperbarui warna baris tabel secara dinamis dalam laporan. Misalnya, dalam daftar pemasok, pemasok yang lebih disukai pasokan ditampilkan berwarna hijau, sementara pemasok lain ditampilkan dengan warna merah. Saat ini, Anda dapat menggunakan kode berikut untuk mengimplementasikannya di acara OnDrawcell:
Jika Table1.FieldbyName ('Custno'). AsInteger> 1500 Lalu
Dbgrid1.canvas.font.color: = clred;
Dbgrid1.defaultdrawcolumncell (Rect, Datacol,
Kolom, negara bagian)
Kode di atas dapat diperluas sesuai dengan kebutuhan aplikasi. Misalnya, ketika Anda perlu menampilkannya dalam huruf tebal, cukup ubah baris yang sesuai menjadi:
Dbgrid1.canvas.font.style: = [fsbold];
Masukkan kontrol visual lainnya dalam tabel
Dalam pemrograman database, kendala kunci asing adalah metode yang efektif untuk memastikan bahwa data dalam database disimpan sesuai dengan persyaratan pengguna. Misalnya, dalam lingkungan pemrosesan pesanan, ada kendala kunci asing antara tabel pesanan dan tabel pelanggan, yaitu, setiap catatan dalam tabel pesanan harus memiliki item yang sesuai dalam tabel pelanggan. Dengan cara ini, saat mengisi formulir pesanan, jika daftar pelanggan disediakan untuk pengguna untuk memilih dalam fokus input, kebenaran data akan dijamin secara efektif.
Kontrol DBGRID dan kontrol StringGrid berasal dari TCUSTOMGRID, di mana kontrol DBGRID dapat memasukkan data. Mekanisme internal Delphi untuk pemrosesan DBGRID adalah untuk mengapung kontrol dbedit pada grid. Grid yang dapat memperoleh fokus dan data input sebenarnya adalah kontrol dbedit mengambang. sehingga data dimasukkan di atas tabel. Jadi, cara untuk memasukkan kontrol visual lainnya ke dalam tabel adalah dengan mengapung kontrol visual pada grid. Jadi pada prinsipnya, kontrol apa pun dapat dimasukkan ke dalam tabel. Artikel ini mengambil contoh memasukkan kotak drop-down ke dalam tabel untuk memperkenalkan langkah-langkah spesifik untuk memasukkan kontrol lain pada kisi.
1. Atur properti
Baca properti item dari daftar klien ke kotak drop-down.
2. Menyiapkan acara OnDrawcell
Acara OnDrawcell ditembakkan saat menggambar sel meja. Ketika bidang yang sesuai dengan sel yang memperoleh fokus konsisten dengan bidang yang sesuai dengan kotak drop-down, pindahkan kotak drop-down ke kisi yang memperoleh fokus dan membuat kotak drop-down terlihat, sehingga mencapai fungsi menampilkan Kotak drop-down pada kolom tabel yang ditentukan. Acara OnDrawcell untuk mengatur tabel adalah sebagai berikut:
if (gdfocused in state) kemudian
Mulai
// Jika bidang yang sesuai konsisten, jalankan
if (grid.cells [acol, 0] = 'company') lalu
Mulai
// Pindahkan kotak drop-down ke posisi yang ditentukan
ComboBox1.Left: = rect. Left + grid.Left;
ComboBox1.top: = rect.top + grid.top;
ComboBox1.width: = rect.right-rect.left;
ComboBox1.height: = rect.bottom-mrept.top;
// Jadikan kotak drop-down terlihat dan dapatkan fokus
ComboBox1.visible: = true;
ComboBox1.setFocus;
akhir;
akhir;
3. Menyiapkan acara OnClick
Jika bidang yang sesuai dengan sel yang memperoleh fokus tidak cocok dengan bidang yang sesuai dengan kotak drop-down, kotak drop-down tidak terlihat. Untuk melakukan ini, atur acara OnClick tabel sebagai berikut:
If (grid.cells [grid.col, 0] <> 'company') lalu
Mulai
ComboBox1.visible: = false;
akhir;
4. Menyiapkan acara Onchange
Dalam acara OnDrawcell, hanya karya menggambar sel dan menampilkan kotak drop-down yang diselesaikan, dan data tidak dapat dimasukkan ke dalam tabel. Untuk melakukan ini, atur acara Onchange dari kotak drop-down sebagai berikut:
Grid.cells [grid.col, grid.row]: = comboBox1.
Item [ComboBox1.ItemIndex];
Ini melengkapi pekerjaan memasukkan kotak drop-down di tabel.
Tampilkan bidang grafis di tabel
Dalam pengembangan program, kadang -kadang beberapa karakter yang tidak konvensional diperlukan untuk ditampilkan dalam laporan. Misalnya, bidang item inspeksi dalam laporan Bagian Inspeksi berisi karakter yang tidak konvensional seperti sebagian kekasaran pemesinan dan toleransi pemesinan. Gagasan umum untuk menyelesaikan masalah ini adalah dengan menyimpan karakter yang tidak konvensional ini sebagai bidang grafis, seperti bidang gambar dalam database SQL Server. Namun, apakah itu kontrol StringGrid atau kontrol DBGRID, ia hanya dapat secara langsung menampilkan string, yang menciptakan masalah cara menampilkan bidang grafis pada kontrol tabel.
Sekilas, masalah ini dapat diselesaikan dengan memasukkan kontrol dbimage ke dalam tabel menggunakan metode di atas. Namun, ini membutuhkan memasukkan kontrol dengan nomor yang sama dengan catatan. , tetapi juga jelas berkedip di bidang grafik. Solusi yang lebih baik adalah secara dinamis membuat kontrol DBIMAGE saat menghubungkan ke database, menggunakannya untuk membaca bidang gambar dari database, dan menyimpannya ke hard disk klien sebagai file sementara. Baca file sementara di acara OnDrawcell tabel dan menyelesaikan pekerjaan menggambar. Berikut adalah langkah -langkah spesifik untuk menampilkan bidang grafik dalam tabel.
1. Simpan Bidang Gambar
Baca semua bidang gambar saat menjalankan kueri dan simpan ke hard disk klien.
Mulai
... // hilangkan pernyataan kueri
Nama file: = 'D: emp'; // inisialisasi jalur file sementara
Mydbimage: = tdbimage.create (self); // buat dbimage
Mydbimage.parent: = self;
Mydbimage.datasource: = DataSource1;
Mydbimage .datafield: = 'description'; // Tentukan sebagai bidang "deskripsi"
Indeks: = 1;
Sedangkan bukan clientdata.eof do begin // baca database
s: = inttoStr (index);
FileName1: = nama file+s;
FileName1: = FileName1+'. BMP';
// Simpan file sementara
Mydbimage .picture .bitmap .Savetofile (filename1);
Grid.cells [1, index]: = '';
// Isi formulir
Grid.cells [2, index]: = clientdata.fieldbyname ('data yang diukur'). Asstring;
ClientData.next;
Indeks: = indeks+1;
akhir;
Mydbimage.destroy (); // rilis dbimage
akhir;
2. Salin grafik
Atur acara OnDrawCell, baca file sementara, dan salin grafik ke kolom tabel yang ditentukan:
if ((acol = 1) dan (arow> 0) dan (grid.colcount> 2)) lalu mulai
// Tabel membutuhkan setidaknya dua kolom
Nama file: = 'D: emp';
S: = inttoStr (arow);
Nama file: = nama file+s;
Nama file: = nama file+'. Bmp';
MyImage: = Timage.create (self); // Buat kontrol gambar
Myimage.parent: = self;
// Baca file sementara
Myimage.picture.bitmap.loadFromFile (nama file);
// Salin grafik
Grid.canvas.draw (rect.left, rect.top, myimage.
Picture.graphic);
Myimage.destroy ();
akhir;