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

Спасибо!
...
Рейтинг: 0 / 0
02.04.2007, 19:04
    #34432394
Lexogen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid в C++ Builder
Есть код для 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
02.04.2007, 19:09
    #34432411
Begem0t!k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid в C++ Builder
Пасбибо проврю !
...
Рейтинг: 0 / 0
02.04.2007, 19:43
    #34432460
Begem0t!k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid в C++ Builder
немного не получаеться что не так ?

Код: 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
02.04.2007, 19:44
    #34432464
Begem0t!k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid в C++ Builder
Ой ! Да нет все работает !

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


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