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

Вниз

Цвет ячейки в DBGrid или RxDBGrid   Найти похожие ветки 

 
samalex   (2003-12-11 13:06) [0]

Уважаемые знатоки!!!

Как можно устанавливать программно цвет фона и шрифта для заданной ячейки DBGrid или RxDBGrid?


 
Stas ©   (2003-12-11 13:12) [1]

описать в событии
DBGrid1DrawColumnCell

begin

if columns.field.isnull then TDBGrideh(Sender).Canvas.Brush.color:=clBlue else (Sender).Canvas.Brush.color:=clBlack
TDBGrideh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
Пример закраски ячеек со значением Null


 
Vlad ©   (2003-12-11 13:15) [2]

http://www.delphikingdom.ru/helloworld/nogrid.htm


 
Vlad ©   (2003-12-11 13:16) [3]

http://www.delphikingdom.ru/helloworld/dbgridcolor.htm


 
b0bi   (2003-12-11 13:52) [4]

событие грида OnGetCellParams
procedure TFInvoiceNew.GridGetCellParams(Sender: TObject;
Field: TField; AFont: TFont; var Background: TColor; Highlight: Boolean);
begin
GridGetCellParams(Sender, Field, AFont, Background, Highlight);
if Field.FieldName="KodPr" then
if not Highlight then
Background:=clRed;
end;


 
Sandman25 ©   (2003-12-11 13:57) [5]

[4] b0bi (11.12.03 13:52)

Это есть только у DBGridEh.


 
b0bi   (2003-12-11 14:00) [6]

не, это RX


 
Sandman25 ©   (2003-12-11 14:01) [7]

[6] b0bi (11.12.03 14:00)

Виноват, был не прав.


 
samalex   (2003-12-18 15:31) [8]

Всем спасибо, при помощи события DBGrid1DrawColumnCell раскрасил
DBGrid.
Но возникла проблема. Программа обновляет таблицу по таймеру раз в 10 сек. Если поверх окна программы висит что-то другое, хоть краем, то событие DBGrid1DrawColumnCell не работает. Все мои цветные полосы пропадают. Кто-нибудь решал эту проблему?


 
Sandman25 ©   (2003-12-18 15:35) [9]

[8] samalex (18.12.03 15:31)

Перерисовываете как? Grid.Update?


 
samalex   (2003-12-18 15:49) [10]

Sandman25 ©
Я не понял вопрос, если интересна обработка события, но это техническая сторона, когда окно активно, все нормально, когда не активно ... событие не работает :

procedure TF_Menu00.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
PrData : Double;
PrNoWork : Boolean;
PrMin, PrMax : Double;
BufInt1 : integer;
begin
with TDBGrid(Sender) do
begin
If active then
begin
PrData:=DataSource.DataSet.FieldByName("Data").AsFloat;
PrNoWork:=DataSource.DataSet.FieldByName("NoWork").AsBoolean;

If PrDayNight=1 Then
begin
PrMax:=DataSource.DataSet.FieldByName("HiHi_Day").AsFloat;
PrMin:=DataSource.DataSet.FieldByName("LoLo_Day").AsFloat;
end
else
begin
PrMax:=DataSource.DataSet.FieldByName("HiHi_Night").AsFloat;
PrMin:=DataSource.DataSet.FieldByName("LoLo_Night").AsFloat;
end;

If not PrNoWork Then
begin
If (PrData<=PrMin) Then
begin
Canvas.Brush.color:=clYellow;
Canvas.Font.color:=clBlack;
end
else
If (PrData>PrMin) and (PrData<PrMax) Then
begin
Canvas.Brush.color:=clWhite;
Canvas.Font.color:=clBlack;
end
else
If (PrData>=PrMax) Then
begin
Canvas.Brush.color:=clRed;
Canvas.Font.color:=clYellow;
end
else
begin
Canvas.Brush.color:=clBlack;
end;
DefaultDrawColumnCell(Rect,DataCol,Column,State);
end
else
begin
Canvas.Brush.color:=clBlue;
Canvas.Font.color:=clWhite;
DefaultDrawColumnCell(Rect,DataCol,Column,State);
If Column.FieldName="Data" Then
begin
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left+Round((Rect.Right-Rect.Left-Canvas.TextWidth("


 
Sandman25 ©   (2003-12-18 15:59) [11]

[10] samalex (18.12.03 15:49)

Приходит сообщение от таймера. Что дальше? Вы делаете Close/Open набору данных для грида?


 
MV   (2003-12-18 16:01) [12]

Переходи на DBGridEh! Там все проблемы решены!


 
samalex   (2003-12-18 16:03) [13]

Ну, в принципе, да - Close/Open.


 
Плохиш_   (2003-12-18 16:04) [14]

TDBGrid.Invalidate


 
samalex   (2003-12-18 16:07) [15]

MV
А что это зверь DBGridEh и где его брать?


 
MV   (2003-12-18 16:09) [16]

Библиотека EhLib от Дмитрия Большакова. Просто используешь - и иногда вспоминаешь, как раньше мучался.
Бесплатная. Дакументация. Масса примеров.

http://ehlib.com/RUS/default.htm


 
samalex   (2003-12-18 16:09) [17]

Плохиш_
TDBGrid.Invalidate - как его применять, в таймере?


 
samalex   (2003-12-19 10:46) [18]

MV
Спасибо, установил библиотеку EhLib. Сразу двойные заголовки сделал.
Но ... не понял, как цвет ячейки ставится, в примерах что-то не понятно.


 
Плохиш_   (2003-12-19 10:51) [19]


> samalex (18.12.03 16:09) [17]
> Плохиш_
> TDBGrid.Invalidate - как его применять, в таймере?

Там, где тебе надо грид обновлять


 
samalex   (2003-12-19 11:02) [20]

Плохиш_
У меня есть функция, которая записывает данные во временную таблицу RxMemoryData, к которой через DataSourse подцеплен DBGid.
Я поставил
with RxMemoryData do
begin
append;
FieldByName("NumPP").AsInteger:=i;
FieldByName("Description").AsString:=PrPoint[i-1].Description;
UpdateRecord;
DBGrid1.Invalidate;
end;
Уж не знаю, правильно?


 
Sandman25 ©   (2003-12-19 11:05) [21]

[20] samalex (19.12.03 11:02)

Нужен Post для записи данных.


 
samalex   (2003-12-19 11:09) [22]

Sandman25 ©
А UpdateRecord чем не устраивает. Тем более, что данные пишутся. Проблема в другом ...


 
Sandman25 ©   (2003-12-19 11:11) [23]

[22] samalex (19.12.03 11:09)

Я никогда не использовал UpdateRecord вместо Post...
И никогда не имел проблемы с перерисовкой грида...
Если не хотите даже попробовать совет, зачем спрашиваете?


 
samalex   (2003-12-19 11:16) [24]

Sandman25 ©
Я не хотел никого обидеть, сейчас попробовал Post вместо UpdateRecord - тоже самое...


 
Sandman25 ©   (2003-12-19 11:19) [25]

[24] samalex (19.12.03 11:16)

Странно. Может, rxDbgrid как-то некорректно работает.
Только что проверил для DBGridEh - после изменения все корректно, грид перерисовался (и строка изменила свой цвет), даже если часть грида была закрыта.


 
samalex   (2003-12-19 11:29) [26]

Sandman25 ©
Нет, если использовать событие DBDrawColumnCell, для DBGridEh тоже самое, не работает ...


 
Sandman25 ©   (2003-12-19 11:35) [27]

[26] samalex (19.12.03 11:29)

Вы правы. Я и забыл, что использую дургое событие :(


 
Плохиш_   (2003-12-19 11:36) [28]

>samalex (19.12.03 11:02) [20]

Если работает, то "да"


 
samalex   (2003-12-19 11:39) [29]

Sandman25 ©
Какое - подробнее можно?



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

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

Наверх




Память: 0.53 MB
Время: 0.026 c
1-49589
sVic
2004-01-05 14:05
2004.01.16
Не выгонять лист после печати


1-49510
Zilog_
2004-01-03 12:22
2004.01.16
Нестандартное разрешение!


3-49465
Dimmu
2003-12-17 17:06
2004.01.16
Поле типа data/time в Access


1-49634
lipskiy
2004-01-02 18:38
2004.01.16
Не могу сохранить ветку реестра в файл.


3-49439
Жук
2003-12-18 13:53
2004.01.16
Передача параметра в TIBSQL