O serie de articole intitulate Adăugarea de componente la o DBGrid discută despre plasarea aproape a oricărui control Delphi (component vizual) într-o celulă a unui DGBrid. Ideea este de a crea interfețe de utilizator mai atractive pentru câmpurile de editare în cadrul unui DBGrid: un ComboBox pentru liste derulante; un DateTimePicker (calendar) pentru valorile datei; o casetă de selectare pentru câmpurile booleane.
După cum a observat Rene van der Heijden, soluția este destul de lungă și nu funcționează, cel puțin nu atunci când utilizați mouse-ul pentru a face clic pe casetele de selectare..
Rene sugerează o abordare mai ușoară, necesitând doar doi manipulatori uniformi: OnCellClick și OnCustomDrawCell pentru controlul DBGrid:
// Evenimentul OnCellClik al unui DBGrid1 procedură TForm.DBGrid1CellClick(Coloana: TColumn); începe dacă (Column.Field.DataType = ftBoolean) apoi începe comută True și False Column.Grid.DataSource.DataSet.Edit; Column.Field.Value: = nu Column.Field.AsBoolean; postare imediată - vedeți singur dacă doriți acest lucru Column.Grid.DataSource.DataSet.Post; puteți adăuga aici o funcționalitate suplimentară, care va fi procesată după modificarea Sfârșit; Sfârșit; // Evenimentul OnDrawColumnCell al unui DBGrid1 procedură TForm.DBGrid1DrawColumnCell (Expeditor: TObject; const Rect: TRect; DataCol: Integer; Coloana: TColumn; Stat: TGridDrawState); const CtrlState: mulțime[Boolean] de număr întreg = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK sau DFCS_CHECKED); începe dacă (Column.Field.DataType = ftBoolean) apoi începe DBGrid1.Canvas.FillRect (Rect); dacă VarIsNull (Column.Field.Value) apoi DrawFrameControl (DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONCHECK sau DFCS_INACTIVE) Estompată altfel DrawFrameControl (DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, CtrlState [Column.Field.AsBoolean]); bifat sau bifat Sfârșit; Sfârșit;
Navigator pentru sfaturi Delphi:
"Eliminați elemente duplicate din TStringList Delphi
„5 fapte pe care nu le știați despre Delphi și clase și despre controalele VCL și de moștenire și personalizare și ...