Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как в DBGrid закрасить строку


Автор: stron 21.7.2003, 00:19
if (условие) then begin
with Form1.DBGrid1.Canvas do
begin
Brush.Color:=clMenu;
Font.Color:=clBlack;
end;
end;

Этот код закрашивает и текст в строке!
А как сделать так, чтобы пользователь его увидел??
Буду очень признателен

Автор: Vex 21.7.2003, 00:57
Можно узнать текст а потом вывести его поверх.

Автор: stron 21.7.2003, 02:13

Не, не прокатит, т.к. при любом изменении таблицы вызывается такая процедура

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
.....
end;

которая перекрашивает таблицу по defaultу( т.е. закрашивает всё нарисованное добро).

Автор: stron 21.7.2003, 02:14
Да, кстати, текст в строке остаётся, только его пользователю не видно....

Автор: Vex 21.7.2003, 02:23
ИМХО, надо написать процедуру перекраски и вставлять ее во все события, которые ведут к изменению таблицы, геморно, конечно, но как еще это сделать я не знаю. Может поищите компоненты на торри.нет. Если вы собираетесь делать это всего один раз и в обозримом будущем вам это не понадобится, то можно сделать см. чуть выше. А если вы будете сталкиваться с этой проблемой регулярно, то напишите свой компонент, наследник от TDBGrid.

Автор: <Spawn> 21.7.2003, 05:43
Попробуй так:
Код

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if  then
with DBGrid1.Canvas do
begin
Brush.Color:=clMenu;
Font.Color:=clBlack;
FillRect(Rect);
TextOut(Rect.Right-TextWidth(Column.Field.Text)-2,Rect.Top+2,Column.Field.Text)
end
end
else DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end.


Только поставь DefaultDrawing в False

Автор: stron 21.7.2003, 09:18
Спасибо, очень помогли

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)