Bir çıktıyı özelleştirmek için çeşitli yollar ve nedenler vardır DBGrid içinde Delphi. Bunun bir yolu, sonucun görsel olarak daha çekici olması için onay kutuları eklemektir.
Varsayılan olarak, veri kümenizde bir boole alanınız varsa, DBGrid onları görüntüler veri alanının değerine bağlı olarak "True" veya "False" olarak ayarlayın. Ancak, alanları düzenlemeyi etkinleştirmek için "gerçek" bir onay kutusu denetimi kullanmayı seçerseniz çok daha iyi görünür.
Örnek Uygulama Oluşturma
Delphi'de yeni bir form başlatın ve bir TDBGrid, TADOTable ve TADOConnection, TDataSource yerleştirin.
Tüm bileşen adlarını, forma ilk düştükleri gibi bırakın (DBGrid1, ADOQuery1, AdoTable1 vb.). Örnek QuickiesContest.mdb MS Access veritabanına işaret etmek üzere ADOConnection1 bileşeninin (TADOConnection) ConnectionString özelliğini ayarlamak için Nesne Denetçisi'ni kullanın.
DBGrid1'i DataSource1'e, DataSource1'i ADOTable1'e ve son olarak ADOTable1'i ADOConnection1'e bağlayın. ADOTable1 TableName özelliği, Makaleler tablosunu göstermelidir (DBGrid'in Makaleler tablosunun kayıtlarını görüntülemesini sağlamak için).
Tüm özellikleri doğru ayarladıysanız, uygulamayı çalıştırdığınızda (ADOTable1 bileşeninin Active özelliğinin Doğru), varsayılan olarak, DBGrid'in, boole alanının değerini, verilerin değerine bağlı olarak "True" veya "False" olarak görüntülediğini görmelisiniz. alan.
DBGrid'de CheckBox
Bir DBGrid hücresinin içindeki onay kutusunu göstermek için, çalışma zamanında bir tanesinin kullanılabilir olmasını sağlamamız gerekir.
Ekranda "Veri kontrolleri" sayfasını seçin Bileşen Paleti ve bir TDBCheckbox. Form üzerinde herhangi bir yere bırakın - çoğu zaman görünmez olacak veya ızgara üzerinde yüzen olacağı için nerede olduğu önemli değildir.
İpucu: TDBCheckBox, kullanıcının boole alanları için uygun olan tek bir değeri seçmesine veya seçimini kaldırmasına izin veren, veri tanıyan bir kontroldür.
Ardından, Visible özelliğini False olarak ayarlayın. DBCheckBox1'in Color özelliğini DBGrid ile aynı renk olarak değiştirin (DBGrid ile karışır) ve Altyazıyı kaldırın.
En önemlisi, DBCheckBox1'in DataSource1'e ve doğru alana bağlı olduğundan emin olun.
Yukarıdaki tüm DBCheckBox1 özellik değerlerinin, formun OnCreate olayında aşağıdaki gibi ayarlanabileceğini unutmayın:
prosedür TForm1.FormCreate (Gönderen: TObject);
başla
DBCheckBox1.DataSource: = DataSource1;
DBCheckBox1.DataField: = 'Kazanan';
DBCheckBox1.Visible: = Yanlış;
DBCheckBox1.Color: = DBGrid1.Color;
DBCheckBox1.Caption: = '';
// makalenin ilerleyen bölümlerinde açıklanmıştır
DBCheckBox1.ValueChecked: = 'Evet bir Kazanan!';
DBCheckBox1.ValueUnChecked: = 'Bu sefer değil.';
son;
Bundan sonraki en ilginç kısım. DBGrid'deki boolean alanını düzenlerken, DBCheckBox1'nin boolean alanını gösteren DBGrid'deki hücrenin üstüne ("kayan") yerleştirildiğinden emin olmamız gerekir.
Boole alanlarını taşıyan (odaklanmayan) hücrelerin geri kalanı için ("Kazanan" sütununda), boolean değerinin (True / False) bazı grafik gösterimlerini sağlamalıyız. Bu, çizim için en az iki görüntüye ihtiyacınız olduğu anlamına gelir: biri kontrol edilen durum için (Doğru değer) ve diğeri kontrolsüz durum için (Yanlış değer).
Bunu yapmanın en kolay yolu, doğrudan DBGrid tuvalinde çizim yapmak için Windows API DrawFrameControl işlevini kullanmaktır.
DBGrid'in OnDrawColumnCell olay işleyicisinde, ızgaranın bir hücreyi boyaması gerektiğinde oluşan kod aşağıdadır.
prosedür TForm1.DBGrid1DrawColumnCell (
Gönderen: TObject; const Rekt: TRect; DataCol:
Tamsayı; Sütun: TColumn; Durum: TGridDrawState);
const isChecked: dizi[Boole] nın-nin Tamsayı =
(DFCS_BUTTONCHECK, DFCS_BUTTONCHECK veya DFCS_CHECKED);
var
DrawState: Tamsayı;
DrawRect: TRect;
beginif (gdFocused içinde Durum) thenbeginif (Sütun. Alan. FieldName = DBCheckBox1.DataField) thenbegin
DBCheckBox1.Left: = Doğrultun. Sol + DBGrid1.Left + 2;
DBCheckBox1.Top: = Doğrult. Üst + DBGrid1.top + 2;
DBCheckBox1.Width: = Doğrult. Sağ - Yön. Ayrıldı;
DBCheckBox1.Height: = Doğr. Alt - Doğr. Üst;
DBCheckBox1.Visible: = Doğru;
endendelsebeginif (Sütun. Alan. FieldName = DBCheckBox1.DataField) thenbegin
DrawRect: = Rect;
InflateRect (DrawRect, -1, -1);
DrawState: = ISChecked [Sütun. Alan. AsBoolean];
DBGrid1.Canvas. FillRect (Rect);
DrawFrameControl (DBGrid1.Canvas. Kulp, DrawRect,
DFC_BUTTON, DrawState);
son;
son;
son;
Bu adımı tamamlamak için, hücreden ayrıldığımızda DBCheckBox1'in görünmez olduğundan emin olmamız gerekir:
prosedür TForm1.DBGrid1ColExit (Gönderen: TObject);
beginif DBGrid1.SelectedField. FieldName = DBCheckBox1.DataField sonra
DBCheckBox1.Visible: = Yanlış
son;
İşlem yapmak için sadece iki etkinliğe daha ihtiyacımız var.
Düzenleme modunda, tüm tuş vuruşlarının DBGrid hücresine gideceğini, bunların CheckBox'a gönderildiğinden emin olmamız gerektiğini unutmayın. Bir CheckBox durumunda öncelikle [Sekme] ve [Boşluk] tuşu ile ilgileniriz. [Tab] giriş odağını bir sonraki hücreye taşımalı ve [Boşluk] CheckBox'ın durumunu değiştirmelidir.
prosedür TForm1.DBGrid1KeyPress (Gönderen: TObject; var Key: Char);
beginif (anahtar = Chr (9)) sonra Çıkış;
Eğer (DBGrid1.SelectedField. FieldName = DBCheckBox1.DataField) thenbegin
DBCheckBox1.SetFocus;
SendMessage (DBCheckBox1.Handle, WM_Char, word (Anahtar), 0);
son;
son;
Kullanıcı kutuyu işaretledikçe veya işaretini kaldırdıkça onay kutusunun Başlığı'nın değiştirilmesi uygun olabilir. DBCheckBox öğesinin, işaretlendiğinde veya işaretlenmediğinde onay kutusunun temsil ettiği alan değerini belirtmek için kullanılan iki özelliğe (ValueChecked ve ValueUnChecked) sahip olduğunu unutmayın.
Bu ValueChecked özelliği "Evet, bir Kazanan!" İçerir ve ValueUnChecked "Bu sefer değil" e eşittir.
prosedür TForm1.DBCheckBox1Click (Gönderen: TObject);
beginif DBCheckBox1.Checked sonra
DBCheckBox1.Caption: = DBCheckBox1.ValueChecked
Başka
DBCheckBox1.Caption: = DBCheckBox1.ValueUnChecked;
son;
Projeyi çalıştırın ve kazanan alanın sütununda onay kutularını göreceksiniz.