Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

Снова рисование.   Найти похожие ветки 

 
Alibaba   (2004-06-24 01:05) [0]

Очень много примеров демонстрируют как разрисовывать строки TStringGrid.

У меня получается. :)

Недавно появилась задача:
Необходимо выделять строки TDBGrid различным цветом в зависимости от значения поля.

В случае с TStringGrid - используется событие OnDrawCell.
Что использовать в лучае с TDBGrid?

Пробовал OnDrawDataCell, OnDrawColumnCell.
Неполучается... :(

Подскажите, как решить задачу.

Например, есть SQL-запрос, который возвращает три поля:
Field1, Field2, Field3.

Необходимо, что-бы если Field2 = "Вася", то эта строка (где Field2 = "Вася") была закрашена желтым цветом.


 
ЮЮ ©   (2004-06-24 04:39) [1]

>Пробовал OnDrawDataCell, OnDrawColumnCell.
>Неполучается... :(

Как не получается? Должно получиться. Когда рисуется ячейка именно эта строка DataSet-а является "текущей". Анализируй значение поля Field2 и вперёд!


 
Ozone ©   (2004-06-24 05:10) [2]

>> Неполучается... :(

Как ты пробовал? Код?


 
Alibaba ©   (2004-06-24 12:01) [3]

Для TStringGrid:

var
lstCell: TStringList;

procedure TfrmMain.FillRowSg(
NumRow: Integer;       //Номер строки
cFon,                  //Цвет фона
cShrift: TColor);      //Цвет шрифта
var
ra: array of TRect;
rm: TRect;
i: byte;
begin
//Очищаю список ячеек
lstCell.Clear;
//Устанавливаю длинну массива ra равную количеству колонок таблицы
SetLength(ra,sgEtaps.ColCount);

for i:=0 to sgEtaps.ColCount-1 do
 begin
//Наполняю список ячеек (это будут все ячеек одной строки)
  lstCell.Add(sgEtaps.Cells[i,NumRow]);
//Наполняю массив ra
  ra[i]:=sgEtaps.CellRect(i,NumRow);
 end;

//Формирую область всей строки
rm.Left:=ra[0].Left;
rm.Top:=ra[0].Top;
rm.Right:=ra[sgEtaps.ColCount-1].Right;
rm.Bottom:=ra[sgEtaps.ColCount-1].Bottom;

//Закрашиваю область строки
sgEtaps.Canvas.Brush.Color:=cFon;
sgEtaps.Canvas.FillRect(rm);

//Устанавливаю цвет шрифта для каждой ячейки в строке
sgEtaps.Canvas.Font.Color:=cShrift;
for i:=0 to sgEtaps.ColCount-1 do
 sgEtaps.Canvas.TextOut(ra[i].Left+1,ra[i].Top+2,lstCell[i]);
end;

procedure TfrmMain.sgEtapsDrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
//Если ячейка содержит слово "Вася"
if sgEtaps.Cells[ACol,ARow] = "Вася" then
//Закрашиваю всю строку желтым цветом
 FillRowSg(ARow,clYellow,clBlue);
end;


 
Alibaba ©   (2004-06-24 12:06) [4]

Для TDBGrid:

procedure TfrmMain.grMainDrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
//Здесь я не знаю как обратиться к ячейке с проверкой?
FillRowSg(Col,clTeal,clYellow);
end;


 
Alibaba ©   (2004-06-24 12:09) [5]

grMain: TDBGrid


 
MetalFan ©   (2004-06-24 12:15) [6]

событие OnDrawColumnCell...Occurs when the grid needs to paint a cell.
а ты каждый раз перересовываешь всю строку...

ниче не понимаю!


 
Alibaba ©   (2004-06-24 12:22) [7]

>MetalFan ©   (24.06.04 12:15) [6]

Есть задача:
Если ячейка содержит "Вася" - зарисовать строку желтым цветом.

Как решить эту задачу для TDBGrid?


 
Amoeba ©   (2004-06-24 12:52) [8]

Смотри статьи на тему раскраски TDBGrid в "Королевстве Дельфи" http://www.delphikingdom.com


 
KSergey ©   (2004-06-24 12:53) [9]

> Alibaba ©   (24.06.04 12:22) [7]
> Есть задача:
> Если ячейка содержит "Вася" - зарисовать строку желтым цветом.
>
> Как решить эту задачу для TDBGrid?

Балин... писано про это-переписано...

http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=168
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=806
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=170
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=667


 
Alibaba ©   (2004-06-24 12:57) [10]

Спасибо.
Разобрался.



Страницы: 1 вся ветка

Текущий архив: 2004.07.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.055 c
3-1088020852
Bizon's
2004-06-24 00:00
2004.07.18
SQL запрос


14-1088194354
AlexG
2004-06-26 00:12
2004.07.18
Замедление работы программы...


9-1080827916
Poooz
2004-04-01 17:58
2004.07.18
Ваше мнение о Blitz Basic


9-1080912554
Andrey128
2004-04-02 17:29
2004.07.18
directx


1-1089029283
Popovich A.
2004-07-05 16:08
2004.07.18
Установка новых компонент