Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.01.16;
Скачать: [xml.tar.bz2];

Вниз

Цвет ячейки в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.023 c
1-49507
Quit
2004-01-03 13:49
2004.01.16
Сохранить и загрузить цвет в ini


3-49420
alex-xx
2003-12-18 20:32
2004.01.16
Хранимые процедуры IB


4-49806
Johnson
2003-11-10 18:45
2004.01.16
Как наити нужную программу???


6-49678
hawkins
2003-11-16 08:45
2004.01.16
где можно взять заголовочные файлы для Winsock2?


3-49466
GIL
2003-12-17 16:32
2004.01.16
БД в OEM





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский