![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Снова рисование. [D6, Win2k]
Alibaba © (2004-06-24 01:05:00)Очень много примеров демонстрируют как разрисовывать строки TStringGrid.
У меня получается. :)
Недавно появилась задача:
Необходимо выделять строки TDBGrid различным цветом в зависимости от значения поля.
В случае с TStringGrid - используется событие OnDrawCell.
Что использовать в лучае с TDBGrid?
Пробовал OnDrawDataCell, OnDrawColumnCell.
Неполучается... :(
Подскажите, как решить задачу.
Например, есть SQL-запрос, который возвращает три поля:
Field1, Field2, Field3.
Необходимо, что-бы если Field2 = 'Вася', то эта строка (где Field2 = 'Вася') была закрашена желтым цветом.
Alibaba (2004-06-24 12:57:00) [1]Спасибо.
Разобрался.
KSergey (2004-06-24 12:53:00) [2]> 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
Amoeba (2004-06-24 12:52:00) [3]Смотри статьи на тему раскраски TDBGrid в "Королевстве Дельфи" http://www.delphikingdom.com
Alibaba (2004-06-24 12:22:00) [4]>MetalFan © (24.06.04 12:15) [6]
Есть задача:
Если ячейка содержит 'Вася' - зарисовать строку желтым цветом.
Как решить эту задачу для TDBGrid?
MetalFan (2004-06-24 12:15:00) [5]событие OnDrawColumnCell...Occurs when the grid needs to paint a cell.
а ты каждый раз перересовываешь всю строку...
ниче не понимаю!
Alibaba (2004-06-24 12:09:00) [6]grMain: TDBGrid
Alibaba (2004-06-24 12:06:00) [7]Для 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:01:00) [8]Для 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;
Ozone (2004-06-24 05:10:00) [9]>> Неполучается... :(
Как ты пробовал? Код?
ЮЮ (2004-06-24 04:39:00) [10]>Пробовал OnDrawDataCell, OnDrawColumnCell.
>Неполучается... :(
Как не получается? Должно получиться. Когда рисуется ячейка именно эта строка DataSet-а является "текущей". Анализируй значение поля Field2 и вперёд!