Originariamente inviato da zephyr
mi dispiace ma è come una coperta corta: quando riesco a centrare la casella poi displayo male la cella selezionata ed in più la tecnica su cui si basa il tip fa in modo che quando l'utente va a amodificare il contenuto della cella la checkbox si rimpicciolisce in quanto utilizza quella del dbcheckbox che è di fatto più piccola di quella del rettangolo.
quindi ci rinuncio.
Basta semplicemente cercare di comprendere il modo in cui il codice lavora e correggerlo per ottenere l'effetto desiderato; ad esempio, questa è il codice che ho prodotto io modificando l'esempio:
codice:
procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const IsChecked : array [Boolean] of Integer =
 (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
var
  DrawState: Integer;
  DrawRect: TRect;
begin
  if (gdFocused in State) then
  begin
    if (Column.Field.FieldName = DBCheckBox1.DataField) then
    begin
      DrawRect:=Rect;
      InflateRect(DrawRect,-1,-1);
      DBGrid1.Canvas.FillRect(Rect);
      DBCheckBox1.Left := DBGrid1.Left + Rect.Left
       + ((Rect.Right - Rect.Left - 12) div 2);
      DBCheckBox1.Top := DBGrid1.Top + Rect.Top + 2;
      DBCheckBox1.Visible := True;
    end
  end
  else begin
    if (Column.Field.FieldName = DBCheckBox1.DataField) then
    begin
      DrawRect:=Rect;
      InflateRect(DrawRect,-1,-1);
      DrawState := IsChecked[Column.Field.AsBoolean];
      DBGrid1.Canvas.FillRect(Rect);
      DrawFrameControl(DBGrid1.Canvas.Handle, DrawRect,
       DFC_BUTTON, DrawState);
    end;
  end;
end;
In sostanza, nella prima parte del codice si omette la definizione della Caption del controllo DBCheckBox lasciandola vuota e viene quindi effettuata la "centratura" del controllo nell'area della cella, riempiendo però questa per evitare la visualizzazione del testo contenuto nel campo.

Originariamente inviato da zephyr
ma come posso fare a sapere il contenuto che l'utente digita direttamente nella cella di una griglia?
almeno così gli forzo il valore SI/NO dall'attivazione.
Questa domanda non l'ho capita...

Ciao!