Маленькие Хитрости: Checkbox В Dbgrid

  • Автор темы Автор темы Sascha
  • Дата начала Дата начала

Sascha

Команда форума
Администратор
Ofline
Сегодня мы научимся отображаться CheckBox-ы в компоненте DBGrid. И так, кладем на форму компоненты TTable:

faq8h1jpg_8877767_25173419.jpg


Затем TDataSource:

faq8h2jpg_8069550_25173420.jpg


И, наконец, саму TDBGrid:

faq8h3jpg_4062980_25173421.jpg


Соединяем компоненты между собой. В этом же уроке описано, как создавать Alias-ы. Дело в том, что для реализации тестового примера этого урока нам потребуется база данных docs.db из Алиаса StorePrj. Собственно говоря, вы можете взять любую другую базу данных, а можете и вот эту(docs.db).

А теперь займемся программированием.

Если уж вы взяли именно вот эту базу данных, то для наглядности давайте откорректируем заголовок столбца DocType, замени его на "Это приход". Для этого напишем вот такой обработчик создания формы

Код:
procedure TfrmCheckBoxGridTest.FormCreate(Sender: TObject);

begin

   dbgTest.Columns[3].Title.Caption:='Это приход';

end;

Теперь опишем процедуру отрисовки CheckBox-а:

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;

Теперь пишем обработчики событий OnColEnter и OnDrawColumnCell нашего компонента TDbGrid:

Код:
procedure TfrmCheckBoxGridTest.dbgTestColEnter(Sender: TObject);

begin

with TDBGrid(Sender) do

    if UpperCase(SelectedField.FieldName) = 'TYPEDOC' then // Модифицируйте под себя

      Options := Options - [dgEditing]

    else

      Options := Options + [dgEditing]

end;


procedure TfrmCheckBoxGridTest.dbgTestDrawColumnCell(Sender: TObject;

  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin

  if UpperCase(Column.FieldName) = 'TYPEDOC' then // Модифицируйте под себя

    if Column.Field.AsInteger = 1 then

      DrawGridCheckBox((Sender as TDBGrid).Canvas, Rect, true)

    else

      DrawGridCheckBox((Sender as TDBGrid).Canvas, Rect, false)

end;
Все, запускаем программу и видим результат:

faq8h7jpg_6241669_25173422.jpg
 
Назад
Сверху Снизу