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!