Booleaanse velden bewerken en weergeven met een CheckBox in DBGrid van Delphi

Tip ingezonden door Rene van der Heijden

Een reeks artikelen met de titel Componenten toevoegen aan een DBGrid bespreekt het plaatsen van vrijwel elk Delphi-besturingselement (visuele component) in een cel van een DGBrid. Het idee is om visueel aantrekkelijkere gebruikersinterfaces te maken voor het bewerken van velden in een DBGrid: een ComboBox voor vervolgkeuzelijsten; een DateTimePicker (kalender) voor datumwaarden; een selectievakje voor Booleaanse velden.

CheckBox voor Booleaanse velden

CheckBox in een DBGrid

Zoals opgemerkt door Rene van der Heijden is de oplossing vrij lang, en het werkt niet, althans niet wanneer je met de muis op de selectievakjes klikt.

Rene suggereert een eenvoudigere aanpak waarbij slechts twee even handlers nodig zijn: OnCellClick en OnCustomDrawCell voor uw DBGrid-besturingselement:

 // OnCellClik-gebeurtenis van een DBGrid1 procedure TForm.DBGrid1CellClick(Kolom: TColumn); beginnen   als (Column.Field.DataType = ftBoolean) vervolgens   beginnen     schakelen waar en onwaar     Column.Grid.DataSource.DataSet.Edit; Column.Field.Value: = niet Column.Field.AsBoolean;    onmiddellijk bericht - kijk zelf of je dit wilt     Column.Grid.DataSource.DataSet.Post;     u kunt hier aanvullende functionaliteit toevoegen, die moet worden verwerkt nadat de wijziging is aangebracht   einde; einde; // OnDrawColumnCell-gebeurtenis van een DBGrid1 procedure TForm.DBGrid1DrawColumnCell (Afzender: TObject;   const Rect: TRect; DataCol: geheel getal; Kolom: TColumn; Staat: TGridDrawState); const   CtrlState: rangschikking[Boolean] van geheel getal = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK of DFCS_CHECKED); beginnen   als (Column.Field.DataType = ftBoolean) vervolgens   beginnen     DBGrid1.Canvas.FillRect (Rect);     als VarIsNull (Column.Field.Value) vervolgens       DrawFrameControl (DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONCHECK of DFCS_INACTIVE)  Grijs     anders       DrawFrameControl (DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, CtrlState [Column.Field.AsBoolean]); aangevinkt of niet aangevinkt   einde; einde; 

Delphi tips navigator:
"Verwijder dubbele items uit de TStringList van Delphi
"5 feiten die u niet wist over Delphi en klassen en de VCL en overerving en aangepaste controles en ...