Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

CheckBox в DBGrid

Delphi , Компоненты и Классы , TDBGrid

CheckBox в DBGrid


Bpaч дeлaeт oбхoд, гpaдycники y бoльных coбиpaeт, пpoпиcывaeт лeчeниe, пoдхoдит к кoйкe oднoгo бoльнoгo и cпpaшивaeт сecтpy:
- Фaмилия бoльнoгo?
- Bиндoвc, тoлькo ceйчac пocтyпил.
- Имя oтчecтвo?
- Дeвянocтo восемь.
- Бoлeзнь?
- Хpoничecкиe зaвиcaния и cлaбocть yмa. Чeм бyдeм лeчить?
- Mopгoм.


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;

Привет! Я переведу текст на русский язык:

Это фрагмент кода Delphi, демонстрирующий добавление столбца с чек-боксом в контроль DBGrid. Код включает несколько процедур:

  1. DrawGridCheckBox: эта процедура рисует чек-бокс на канвасе в указанном прямоугольнике и устанавливает его состояние.
  2. DBGrid1DrawColumnCell: это обработчик события, вызываемый при необходимости отрисовки ячейки. Он проверяет, если поле столбца имеет имя 'WEIGHT', и если значение в этом столбце больше 10. Если это так, он рисует чек-бокс с значением true; иначе, он устанавливает значение false.
  3. DBGrid1ColEnter: это обработчик события, вызываемый при входе пользователя в ячейку. Он проверяет, если выбранное поле имеет имя 'Weight', и переключает опцию редактирования соответственно.

Обзор работы кода:

  • В процедуре DrawGridCheckBox рисуется чек-бокс на канвасе с помощью метода DrawFrameControl. Переменная DrawFlags используется для установки стиля чек-бокса (например, является ли он выбран или нет).
  • В обработчике события DBGrid1DrawColumnCell проверяется, если поле столбца имеет имя 'WEIGHT', и если значение в этом столбце больше 10. Если это так, рисуется чек-бокс с значением true; иначе, устанавливается значение false.
  • В обработчике события DBGrid1ColEnter проверяется, если выбранное поле имеет имя 'Weight', и переключает опцию редактирования соответственно. Это предотвращает пользователя от редактирования ячейки, когда столбец содержит чек-бокс.

В целом, этот код-snippet предоставляет основной пример добавления столбца с чек-боксом в контроль DBGrid в Delphi. Однако вам может потребоваться модификация его для соответствия вашим конкретным требованиям.

Некоторые предложения по улучшению:

  • Вместо жесткого кодирования имени поля 'WEIGHT' рассмотрите более гибкий подход, например, хранение имен столбцов в массиве или конфигурационном файле.
  • Рассмотрите добавление дополнительной логики для обработки случаев, когда пользователь кликает по чек-боксу (например, переключение значения, обновление базы данных).
  • Вам может также потребоваться добавление обработки ошибок и валидации для обеспечения корректного поведения кода в различных сценариях.

Представлен пример реализации чекбокса в DBGrid, позволяющего пользователю выбрать значение ячейки с помощью чекбокса вместо ввода текста.


Комментарии и вопросы


:: 2009-11-17 16:24:00 :: re:CheckBox в DBGrid

пользователь: Виталий.

//http://www.planet-source-code.com/

// Must declare a a global variable for this form
private

FOriginalOptions : TDBGridOptions;

//************************************************
// FORM CELL CLICK
procedure TFrmFile.DBGridCellClick(Column: TColumn);
begin
if Self.DBGrid.SelectedField.DataType = ftBoolean then
SaveBoolean();
end;

//************************************************
// FORM SAVE BOOLEAN
procedure TFrmFile.SaveBoolean;
begin
Self.DBGrid.SelectedField.Dataset.Edit;
Self.DBGrid.SelectedField.AsBoolean := not Self.DBGrid.SelectedField.AsBoolean;
Self.DBGrid.SelectedField.Dataset.Post;
end;

//************************************************
// (FORM) DRAW CHECKBOX IF FIELD TYPE IS BOOLEAN
procedure TFrmFile.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
Const
CtrlState : array[Boolean] of Integer = (DFCS_BUTTONCHECK,
DFCS_BUTTONCHECK or DFCS_CHECKED);
var
CheckBoxRectangle : TRect;
begin
if Column.Field.DataType = ftBoolean then
begin
Self.DBGrid.Canvas.FillRect(Rect);
CheckBoxRectangle.Left := Rect.Left + 2;
CheckBoxRectangle.Right := Rect.Right - 2;
CheckBoxRectangle.Top := Rect.Top + 2;
CheckBoxRectangle.Bottom := Rect.Bottom - 2;
DrawFrameControl(Self.DBGrid.Canvas.Handle,
CheckBoxRectangle,
DFC_BUTTON,
CtrlState[Column.Field.AsBoolean]);
end;
end;

//************************************************
// (FORM) DBGRID COL ENTER
procedure TFrmFile.DBGridColEnter(Sender: TObject);
begin
if Self.DBGrid.SelectedField.DataType = ftBoolean then
begin
Self.FOriginalOptions := Self.DBGrid.Options;
Self.DBGrid.Options := Self.DBGrid.Options - [dgEditing];
end;
end;
//************************************************
// (FORM) DBGRID COL EXIT
procedure TFrmFile.DBGridColExit(Sender: TObject);
begin
if Self.DBGrid.SelectedField.DataType = ftBoolean then
Self.DBGrid.Options := Self.FOriginalOptions;
end;


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: TDBGrid ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-06-02 10:20:12
2024-06-16 03:32:14/0.0076000690460205/2