Форум: "Базы";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
ВнизСнова рисование. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.034 c