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.
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 ...