Existuje veľa spôsobov a dôvodov, ako prispôsobiť výstup a DBGrid v Delphi. Jedným zo spôsobov je pridať začiarkavacie políčka, aby bol výsledok vizuálne atraktívnejší.
V predvolenom nastavení, ak máte v súbore údajov boolovské pole, DBGrid zobrazí ich ako „True“ alebo „False“ v závislosti od hodnoty dátového poľa. Vyzerá to však omnoho lepšie, ak sa rozhodnete použiť na začiarknutie políčka „true“, ktorý umožní úpravu polí.
Vytvorenie vzorovej aplikácie
Začnite nový formulár v Delphi a umiestnite TDBGrid, TADOTable a TADOConnection, TDataSource.
Ponechajte všetky názvy komponentov tak, ako sú, keď boli prvýkrát vložené do formulára (DBGrid1, ADOQuery1, AdoTable1 atď.). Pomocou inšpektora objektov nastavte vlastnosť ConnectionString komponentu ADOConnection1 (TADOConnection) tak, aby ukazovala na ukážkovú databázu QuickiesContest.mdb MS Access.
Pripojte DBGrid1 k DataSource1, DataSource1 k ADOTable1 a nakoniec ADOTable1 k ADOConnection1. Vlastnosť ADOTable1 TableName by mala ukazovať na tabuľku článkov (aby DBGrid zobrazoval záznamy tabuľky článkov).
Ak ste správne nastavili všetky vlastnosti, pri spustení aplikácie (za predpokladu, že je aktívna vlastnosť komponentu ADOTable1) Pravda), mali by ste predvolene vidieť, že hodnota DBGrid zobrazuje hodnotu logického poľa ako „True“ alebo „False“ v závislosti od hodnoty údajov. lúka.
Zaškrtávacie políčko v DBGrid
Ak chcete v bunke DBGrid zobraziť začiarkavacie políčko, musíme ho v čase spustenia sprístupniť.
Vyberte stránku "Ovládanie údajov" na stránke Paleta komponentov a vyberte a TDBCheckbox. Drop jeden kdekoľvek vo formulári - nezáleží na tom, kde, pretože väčšinu času to bude neviditeľné alebo plávajúce nad mriežkou.
Tip: TDBCheckBox je dátový ovládací prvok, ktorý umožňuje užívateľovi vybrať alebo zrušiť výber jednej hodnoty, ktorá je vhodná pre logické polia.
Potom nastavte vlastnosť Visible na False. Zmeňte vlastnosť Color of DBCheckBox1 na rovnakú farbu ako DBGrid (takže sa zmieša s DBGrid) a odstráňte titulok.
Najdôležitejšie je skontrolovať, či je DBCheckBox1 pripojený k DataSource1 a do správneho poľa.
Všimnite si, že všetky vyššie uvedené hodnoty vlastnosti DBCheckBox1 sa dajú nastaviť v udalosti OnCreate formulára takto:
procedúra TForm1.FormCreate (Sender: TObject);
začať
DBCheckBox1.DataSource: = DataSource1;
DBCheckBox1.DataField: = 'Víťaz';
DBCheckBox1.Visible: = False;
DBCheckBox1.Color: = DBGrid1.Color;
DBCheckBox1.Caption: = '';
// vysvetlené ďalej v článku
DBCheckBox1.ValueChecked: = 'Áno, víťaz!';
DBCheckBox1.ValueUnChecked: = 'Tentoraz.';
koniec;
Najbližšia časť bude nasledovať. Pri úprave logického poľa v DBGrid sa musíme uistiť, že je DBCheckBox1 umiestnený nad bunkou v DBGrid zobrazujúcou logické pole nad („plávajúcou“).
Pre zvyšné (neostrené) bunky nesúce booleovské polia (v stĺpci „Víťaz“) musíme poskytnúť nejaké grafické znázornenie booleovskej hodnoty (True / False). To znamená, že na kreslenie potrebujete najmenej dva obrázky: jeden pre skontrolovaný stav (True value) a jeden pre nekontrolovaný stav (False value).
Najjednoduchší spôsob, ako to dosiahnuť, je použiť funkciu DrawFrameControl rozhrania Windows API na priame kreslenie na plátne DBGrid.
Tu je kód v obslužnom programe udalostí OnDrawColumnCell OnDrawColumnCell, ktorý sa vyskytuje, keď mriežka potrebuje maľovať bunku.
procedúra TForm1.DBGrid1DrawColumnCell (
Odosielateľ: TObject; const Rect: TRect; DataCol:
integer; Stĺpec: TColumn; Štát: TGridDrawState);
const IsChecked: rad[Logická] z Celé číslo =
(DFCS_BUTTONCHECK, DFCS_BUTTONCHECK alebo DFCS_CHECKED);
var
DrawState: Celé číslo;
DrawRect: TRect;
beginif (gdFocused v Štát) thenbeginif (Stĺpec. Lúka. FieldName = DBCheckBox1.DataField) thenbegin
DBCheckBox1.Left: = Rect. Doľava + DBGrid1.Left + 2;
DBCheckBox1.Top: = Rect. Horná + DBGrid1.top + 2;
DBCheckBox1.Width: = Rect. Pravý - pravý. vľavo;
DBCheckBox1.Height: = Rect. Spodok - rekt. Najlepším hráčom;
DBCheckBox1.Visible: = True;
endendelsebeginif (Stĺpec. Lúka. FieldName = DBCheckBox1.DataField) thenbegin
DrawRect: = Rect;
InflateRect (DrawRect, -1, -1);
DrawState: = ISChecked [Stĺpec. Lúka. AsBoolean];
DBGrid1.Canvas. FillRect (Rect);
DrawFrameControl (DBGrid1.Canvas. Rukoväť, DrawRect,
DFC_BUTTON, DrawState);
koniec;
koniec;
koniec;
Na dokončenie tohto kroku musíme skontrolovať, či je DBCheckBox1 neviditeľný, keď opustíme bunku:
procedúra TForm1.DBGrid1ColExit (Sender: TObject);
beginif DBGrid1.SelectedField. FieldName = DBCheckBox1.DataField potom
DBCheckBox1.Visible: = False
koniec;
Na zvládnutie potrebujeme iba dve ďalšie udalosti.
Všimnite si, že keď v editovacom režime idú všetky stlačenia klávesov do bunky DBGrid, musíme sa uistiť, že sú odoslané do CheckBoxu. V prípade checkboxu nás zaujíma predovšetkým kláves [Tab] a [Space]. [Tab] by malo presunúť zameranie vstupu do ďalšej bunky a [medzera] by mala prepínať stav CheckBoxu.
procedúra TForm1.DBGrid1KeyPress (Odosielateľ: TObject; Var key: Char);
beginif (kľúč = Chr (9)) potom Ukonči;
ak (DBGrid1.SelectedField. FieldName = DBCheckBox1.DataField) thenbegin
DBCheckBox1.SetFocus;
SendMessage (DBCheckBox1.Handle, WM_Char, slovo (Key), 0);
koniec;
koniec;
Bolo by vhodné, aby sa začiarkavacie políčko Titulok zmenilo, keď používateľ políčko zaškrtne alebo zruší. Všimnite si, že DBCheckBox má dve vlastnosti (ValueChecked a ValueUnChecked), ktoré sa používajú na určenie hodnoty poľa reprezentovanej začiarkavacím políčkom, keď je začiarknuté alebo nezaškrtnuté.
Táto vlastnosť ValueChecked obsahuje „Áno, víťaz!“ A hodnota ValueUnChecked sa rovná „Teraz nie“.
procedúra TForm1.DBCheckBox1Click (Sender: TObject);
beginif DBCheckBox1.Checked potom
DBCheckBox1.Caption: = DBCheckBox1.ValueChecked
inak
DBCheckBox1.Caption: = DBCheckBox1.ValueUnChecked;
koniec;
Spustite projekt a začiarknite políčka v celom stĺpci Víťaz.