Тема: DBGrid (CheckBox)
Показать сообщение отдельно
  #2  
Старый 15.03.2014, 12:25
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

А в чём собсно вопрос-то хоть, как всунуть птису в таблицу что-ли? Заведите в ней логическое поле, а дальше смотрим в DRKB (00388):

CheckBox в DBGrid
Код:
procedure DrawGridCheckBox(Canvas: TCanvas; Rect: TRect; Checked: boolean);
var
DrawFlags: Integer;
begin
Canvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, ' ');
DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONPUSH or DFCS_ADJUSTRECT);
DrawFlags := DFCS_BUTTONCHECK or DFCS_ADJUSTRECT;// DFCS_BUTTONCHECK
if Checked then
   DrawFlags := DrawFlags or DFCS_CHECKED;
DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DrawFlags);
end; 
На событие OnDrawColumnCell повесьте вызов процедуры DrawGridCheckBox():
Код:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Column.FieldName = 'WEIGHT' then // Модифицируйте под себя
   if Column.Field.AsInteger > 10 then
     DrawGridCheckBox(DBGrid1.Canvas, Rect, true)
   else
     DrawGridCheckBox(DBGrid1.Canvas, Rect, false)
end;
Кроме этого, для скрытия текста в ячейках с CheckBox-ом от отображения значения при вводе с клавиатуры определите реакцию на событие OnColumnEnter:
Код:
procedure TfrmMain.DBGrid1ColEnter(Sender: TObject);
begin
with TDBGrid(Sender) do
   if SelectedField.FieldName = 'Weight' then // Модифицируйте под себя
     Options := Options - [dgEditing]
   else
     Options := Options + [dgEditing]
end;
Действительно, "Это не сложный dbgrid"
Ответить с цитированием