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