Redigera och visa booleska fält med en CheckBox i Delphis DBGrid

Tips lämnat av Rene van der Heijden

En serie artiklar med titeln Lägga till komponenter till en DBGrid diskuterar att placera nästan alla Delphi-kontroller (visuell komponent) i en DGBrid-cell. Tanken är att skapa visuellt mer attraktiva användargränssnitt för redigering av fält i en DBGrid: en ComboBox för rullgardinslistor; en DateTimePicker (kalender) för datumvärden; en kryssruta för booleska fält.

CheckBox för booleska fält

CheckBox inuti en DBGrid

Som märkt av Rene van der Heijden är lösningen ganska lång, och den fungerar inte, åtminstone inte när du använder musen för att klicka på kryssrutorna.

Rene föreslår en enklare strategi som bara behöver två jämna hanterare: OnCellClick och OnCustomDrawCell för din DBGrid-kontroll:

 // OnCellClik-händelse för en DBGrid1 procedur TForm.DBGrid1CellClick(Kolumn: TColumn); Börja   om (Column.Field.DataType = ftBoolean) sedan   Börja     växla sant och falskt     Column.Grid.DataSource.DataSet.Edit; Column.Field.Value: = inte Column.Field.AsBoolean;    omedelbart inlägg - se själv om du vill ha det här     Column.Grid.DataSource.DataSet.Post;     du kan lägga till ytterligare funktioner här, som ska behandlas efter att ändringen gjordes   slutet; slutet; // OnDrawColumnCell-händelse för en DBGrid1 procedur TForm.DBGrid1DrawColumnCell (avsändare: TObject;   const Rekt: TRECT; DataCol: heltal; Kolumn: TColumn; Tillstånd: TGridDrawState); const   CtrlState: array[Boolesk] av heltal = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK eller DFCS_CHECKED); Börja   om (Column.Field.DataType = ftBoolean) sedan   Börja     DBGrid1.Canvas.FillRect (Rect);     om VarIsNull (Column.Field.Value) sedan       DrawFrameControl (DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONCHECK eller DFCS_INACTIVE) Nedtonade     annan       DrawFrameControl (DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, CtrlState [Column.Field.AsBoolean]); markerad eller avmarkerad   slutet; slutet; 

Delphi tipsnavigator:
"Ta bort duplicerade objekt i Delphis TStringList
"5 fakta som du inte visste om Delphi och klasser och VCL och arv och anpassade kontroller och ...