Текущий архив: 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.5 MB
Время: 0.008 c