Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.02.2010, 20:08
Аватар для Kati
Kati Kati вне форума
Прохожий
 
Регистрация: 16.02.2010
Сообщения: 1
Репутация: 10
По умолчанию Отметить строки DBGrid цветом

Доброе время суток! Искала на форуме, но похожего не нашла. Есть таблица DBGrid, в ней номера системных блоков, пользователи и кабинеты, в которых эти сист.боки расположены. Также три кнопки: улучшение(зеленый), на списание(красный), проблемный(желтый). Вот в этой таблице мне нужно выделить строку с номером, пользователем и кабинетом и при нажатии на кнопку выделить соответствующим цветом строку, но при этом строка должна занестись на другую форму в соответствующую из трех таблиц.
Возможно такое осуществить??? И как? Если не трудно код пожалуйста тоже напишите, я просто новичок в Delphi...заранее спасибо!!!
__________________
производственно озадачена
Ответить с цитированием
  #2  
Старый 16.02.2010, 22:19
Аватар для Ultras
Ultras Ultras вне форума
Начинающий
 
Регистрация: 09.02.2010
Адрес: Россия / Ставрополь
Сообщения: 138
Репутация: 475
По умолчанию

очень давно делал, когда ещё в армии служил:

Код:
procedure TWorkForm.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var
  y,m,d: Word;
begin
  DecodeDate(Date,y,m,d);

  if DBGrid1.DataSource.DataSet.FieldByName('zap_cat').AsInteger = 1 then
  begin
    DBGrid1.Canvas.Brush.Color := clMoneyGreen;
    DBGrid1.Canvas.Font.Style := [];
    DBGrid1.Canvas.Font.Color := clBlack;
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;

  // START: Цвета по годам, кроме ОФИЦЕРОВ
  if (ZMySqlQuery1.FieldByName('base_type').AsInteger<>5) And (DBGrid1.DataSource.DataSet.FieldByName('birth').AsInteger < y-50) And Not (DBGrid1.DataSource.DataSet.FieldByName('birth').AsInteger = 0) then
  begin
    DBGrid1.Canvas.Brush.Color := clRed;
    DBGrid1.Canvas.Font.Style := [fsBold];
    DBGrid1.Canvas.Font.Color := clWhite;
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;
  if (ZMySqlQuery1.FieldByName('base_type').AsInteger<>5) And (DBGrid1.DataSource.DataSet.FieldByName('birth').AsInteger = y-50) then
  begin
    DBGrid1.Canvas.Brush.Color := clGreen;
    DBGrid1.Canvas.Font.Style := [fsBold];
    DBGrid1.Canvas.Font.Color := clWhite;
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;
  // END: Цвета по годам, кроме ОФИЦЕРОВ

  if State = [gdFocused] then
  begin
    DBGrid1.Canvas.Brush.Color := clSilver;
    DBGrid1.Canvas.Font.Style := [fsBold];
    DBGrid1.Canvas.Font.Color := clBlack;
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;

  //if State = [gdFocused,gdSelected] then
  if gdSelected in State then
  begin
    DBGrid1.Canvas.Brush.Color := clSilver;
    DBGrid1.Canvas.Font.Style := [fsBold];
    DBGrid1.Canvas.Font.Color := clBlack;
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;
end;
Ответить с цитированием
  #3  
Старый 17.02.2010, 11:38
Аватар для movnet
movnet movnet вне форума
Начинающий
 
Регистрация: 24.07.2008
Сообщения: 127
Версия Delphi: Delphi 7
Репутация: 23
Сообщение

Здесь мы будем использовать событие "OnDrawColumnCell". Следующий пример разукрашивает ячейки колонки "Status" когда значение НЕ равно "a". Если Вы хотите закрасить целую линию, то достаточно удалить условие "If..."

Код:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
clPaleGreen = TColor($CCFFCC);
clPaleRed = TColor($CCCCFF);
begin

if Column.FieldName = 'Status' then //Удалите эту линию, если хотете закрасить целую линию
   if Column.Field.Dataset.FieldByName('Status').AsString <> 'a' then
     if (gdFocused in State) then //имеет ли ячейка фокус?
       DBGrid1.Canvas.Brush.Color := clBlack //имеет фокус
     else
       DBGrid1.Canvas.Brush.Color := clPaleGreen; //не имеет фокуса

//Теперь давайте закрасим ячейку используя стандартный метод:
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State)

end;

Последний раз редактировалось movnet, 17.02.2010 в 11:43.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter