powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / DBGrid в C++ Builder
5 сообщений из 5, страница 1 из 1
DBGrid в C++ Builder
    #34432338
Begem0t!k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сделать так чтобы поле отображало CheckBox !
Как ComboBox я знаю а вот CheckBox хотелось бы

Спасибо!
...
Рейтинг: 0 / 0
DBGrid в C++ Builder
    #34432394
Lexogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть код для Delphi. Вот:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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():

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
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:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
procedure TfrmMain.DBGrid1ColEnter(Sender: TObject);
begin
  with TDBGrid(Sender) do
    if SelectedField.FieldName = 'Weight' then // Модифицируйте под себя
      Options := Options - [dgEditing]
    else
      Options := Options + [dgEditing]
end;


Сперто с DelphiWorld. Портируется на Builder без проблем.
...
Рейтинг: 0 / 0
DBGrid в C++ Builder
    #34432411
Begem0t!k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пасбибо проврю !
...
Рейтинг: 0 / 0
DBGrid в C++ Builder
    #34432460
Begem0t!k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
немного не получаеться что не так ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
void TForm1::DrawGridCheckBox(TCanvas * Canvas,TRect Rect,bool Checked)
{
   int DrawFlags;
   Canvas->TextRect(Rect, Rect.Left +  1 , Rect.Top +  1 , ' ');
   DrawFrameControl(Canvas->Handle, &Rect, DFC_BUTTON, DFCS_BUTTONPUSH | DFCS_ADJUSTRECT);
   DrawFlags = DFCS_BUTTONCHECK | DFCS_ADJUSTRECT;// DFCS_BUTTONCHECK
   if (Checked)
   {
     DrawFlags = DrawFlags | DFCS_CHECKED;
   }
   DrawFrameControl(Canvas->Handle, &Rect, DFC_BUTTON, DrawFlags);


}
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
      const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{
  if (Column->FieldName == "WIDTH")
  {
    if (Column->Field->AsInteger >  10 )
    {
      DrawGridCheckBox(DBGrid1->Canvas, Rect, true);
    }
    else
    {
      DrawGridCheckBox(DBGrid1->Canvas, Rect, false);
    }
  }
}



Вылазит ошибка работы с памятью но что я делаю не так ?
...
Рейтинг: 0 / 0
DBGrid в C++ Builder
    #34432464
Begem0t!k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой ! Да нет все работает !

Спасибо!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / DBGrid в C++ Builder
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]