|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Отметить строки DBGrid цветом
Доброе время суток! Искала на форуме, но похожего не нашла. Есть таблица DBGrid, в ней номера системных блоков, пользователи и кабинеты, в которых эти сист.боки расположены. Также три кнопки: улучшение(зеленый), на списание(красный), проблемный(желтый). Вот в этой таблице мне нужно выделить строку с номером, пользователем и кабинетом и при нажатии на кнопку выделить соответствующим цветом строку, но при этом строка должна занестись на другую форму в соответствующую из трех таблиц.
Возможно такое осуществить??? И как? Если не трудно код пожалуйста тоже напишите, я просто новичок в Delphi...заранее спасибо!!! производственно озадачена |
#2
|
||||
|
||||
очень давно делал, когда ещё в армии служил:
Код:
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
|
||||
|
||||
Здесь мы будем использовать событие "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. |