Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2012, 15:32   #1
undead92
Пользователь
 
Регистрация: 26.12.2009
Сообщений: 95
По умолчанию цвет строки dbgrid из combobox

Здравствуйте,проблема такова есть dbgrid есть combobox,в нем 3 строки красный желтый серый ,мне нужно чтобы выбрав строчку в dbgrid и выбрав желтый,строчка окрашивалась и причем после перезахода в программу тоже оставалась желтой.

мой код ошибок не вызывает но и не работает



Цитата:
procedure TForm4.dbgrd1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (gdfocu
sed in State) then begin
if cbb1.ItemIndex=0 then dbgrd1.canvas.Brush.Color := clRed;
end;
if cbb1.ItemIndex=1 then dbgrd1.Canvas.Brush.Color := clYellow;
if cbb1.ItemIndex=2 then dbgrd1.Canvas.Brush.Color := clGray;
end;
undead92 вне форума Ответить с цитированием
Старый 24.02.2012, 15:54   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

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

Код:
procedure TForm.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
var
color_:integer;
begin
  color_:=Column.Field.DataSet.FieldByName('color').AsInteger;
  if color_>0 then
                  with (sender  as TDBGrid).Canvas do
                         begin
                           Brush.Color:= color_;
                           Font.Color:= clBlack;
                           end;
  (sender  as TDBGrid).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
цвет хранится в поле 'color' в виде числа (integer)
vovk вне форума Ответить с цитированием
Старый 24.02.2012, 16:08   #3
undead92
Пользователь
 
Регистрация: 26.12.2009
Сообщений: 95
По умолчанию

Цитата:
Сообщение от vovk Посмотреть сообщение
Для того чтоб выделить конкретную запись, и всегда закрашивать её выбранным цветом, можно хранить выбранный цвет в отдельном поле это записи, а при изменении цвета менять значение поля в таблице.
обрабатывать можно так

Код:
procedure TForm.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
var
color_:integer;
begin
  color_:=Column.Field.DataSet.FieldByName('color').AsInteger;
  if color_>0 then
                  with (sender  as TDBGrid).Canvas do
                         begin
                           Brush.Color:= color_;
                           Font.Color:= clBlack;
                           end;
  (sender  as TDBGrid).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
цвет хранится в поле 'color' в виде числа (integer)


а как связать combobox с нужными цветами?
undead92 вне форума Ответить с цитированием
Старый 24.02.2012, 16:15   #4
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

На ocloseup комбобокса перезаписывать поле 'color' в текущей записи числовым значением цвета из комбобокса, если конечно значения отличаются.
vovk вне форума Ответить с цитированием
Старый 24.02.2012, 16:21   #5
undead92
Пользователь
 
Регистрация: 26.12.2009
Сообщений: 95
По умолчанию

Цитата:
Сообщение от vovk Посмотреть сообщение
На ocloseup комбобокса перезаписывать поле 'color' в текущей записи числовым значением цвета из комбобокса, если конечно значения отличаются.
совсем не понятно,можно пожалуйста подробней,комбобокс имеет три цвета
undead92 вне форума Ответить с цитированием
Старый 24.02.2012, 16:46   #6
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

В каком формате он имеет три цвета?
$000000FB, clRed, FF0000 или просто item покрашен в красный цвет?
И это обычный Combobox, или ColorCombobox?
Телепаты отдыхают до 8 марта...

Последний раз редактировалось _SERGEYX_; 24.02.2012 в 21:05.
_SERGEYX_ вне форума Ответить с цитированием
Старый 24.02.2012, 16:47   #7
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

ocloseup это событие которое происходит после закрытия.

Как вы храните цвет в комбобокс?
vovk вне форума Ответить с цитированием
Старый 24.02.2012, 19:11   #8
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

кстати, кое-где встречается и DBColorComboBox, так что выбор цвета можно будет упростить)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 27.02.2012, 11:51   #9
undead92
Пользователь
 
Регистрация: 26.12.2009
Сообщений: 95
По умолчанию

исходя из кода в первом посте, в comboboxe цветов вообще нет,, они потом в процедуре должны менять канвас на цвет clRed если в комбо выбран красный
undead92 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цвет dbgrid aank10 C/C++ Базы данных 1 14.11.2011 00:07
Цвет ячейка и DBGrid M@riy@ Компоненты Delphi 3 14.11.2010 20:35
Цвет шрифта таблицы DBGrid doniyor Помощь студентам 5 24.03.2010 19:01
Цвет текущей строки в DBGrid reiftd C++ Builder 1 29.10.2009 11:10
Цвет полоски выделения DBGrid Хитрец БД в Delphi 12 19.04.2009 22:58