.
Delphi. Маленькие хитрости: CheckBox в DBGrid (TDbGrid, Canvas, Cell)
Автор megabax   
30.04.2011 г.
New Page 1

Delphi. Маленькие хитрости: CheckBox в DBGrid (TDbGrid, Canvas, Cell)

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

Delphi. Маленькие хитрости: CheckBox в DBGrid (TDbGrid, Canvas, Cell)

Затем TDataSource:

Delphi. Маленькие хитрости: CheckBox в DBGrid (TDbGrid, Canvas, Cell)

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

Delphi. Маленькие хитрости: CheckBox в DBGrid (TDbGrid, Canvas, Cell)

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

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

Если уж вы взяли именно вот эту базу данных, то для наглядности давайте откорректируем заголовок столбца 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;

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

Delphi. Маленькие хитрости: CheckBox в DBGrid (TDbGrid, Canvas, Cell)


Скриншоты, опубликованные в данной статье, являются цитатами и иллюстрациями  в  программного продукта "Tubro Delphi", авторское право на который принадлежит Borland® Delphi®. 


 

 

Последнее обновление ( 16.11.2011 г. )