![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Цвет ячейки в DBGrid или RxDBGrid [D7, MSSQL]
samalex © (2003-12-11 13:06:00)
Уважаемые знатоки!!!
Как можно устанавливать программно цвет фона и шрифта для заданной ячейки DBGrid или RxDBGrid?
samalex (2003-12-19 11:39:00) [1]
Sandman25 ©
Какое - подробнее можно?
Плохиш_ (2003-12-19 11:36:00) [2]
>samalex (19.12.03 11:02) [20]
Если работает, то "да"
Sandman25 (2003-12-19 11:35:00) [3]
[26] samalex (19.12.03 11:29)
Вы правы. Я и забыл, что использую дургое событие :(
samalex (2003-12-19 11:29:00) [4]
Sandman25 ©
Нет, если использовать событие DBDrawColumnCell, для DBGridEh тоже самое, не работает ...
Sandman25 (2003-12-19 11:19:00) [5]
[24] samalex (19.12.03 11:16)
Странно. Может, rxDbgrid как-то некорректно работает.
Только что проверил для DBGridEh - после изменения все корректно, грид перерисовался (и строка изменила свой цвет), даже если часть грида была закрыта.
samalex (2003-12-19 11:16:00) [6]
Sandman25 ©
Я не хотел никого обидеть, сейчас попробовал Post вместо UpdateRecord - тоже самое...
Sandman25 (2003-12-19 11:11:00) [7]
[22] samalex (19.12.03 11:09)
Я никогда не использовал UpdateRecord вместо Post...
И никогда не имел проблемы с перерисовкой грида...
Если не хотите даже попробовать совет, зачем спрашиваете?
samalex (2003-12-19 11:09:00) [8]
Sandman25 ©
А UpdateRecord чем не устраивает. Тем более, что данные пишутся. Проблема в другом ...
Sandman25 (2003-12-19 11:05:00) [9]
[20] samalex (19.12.03 11:02)
Нужен Post для записи данных.
samalex (2003-12-19 11:02:00) [10]
Плохиш_
У меня есть функция, которая записывает данные во временную таблицу RxMemoryData, к которой через DataSourse подцеплен DBGid.
Я поставил
with RxMemoryData do
begin
append;
FieldByName("NumPP").AsInteger:=i;
FieldByName("Description").AsString:=PrPoint[i-1].Description;
UpdateRecord;
DBGrid1.Invalidate;
end;
Уж не знаю, правильно?
Плохиш_ (2003-12-19 10:51:00) [11]
> samalex (18.12.03 16:09) [17]
> Плохиш_
> TDBGrid.Invalidate - как его применять, в таймере?
Там, где тебе надо грид обновлять
samalex (2003-12-19 10:46:00) [12]
MV
Спасибо, установил библиотеку EhLib. Сразу двойные заголовки сделал.
Но ... не понял, как цвет ячейки ставится, в примерах что-то не понятно.
samalex (2003-12-18 16:09:00) [13]
Плохиш_
TDBGrid.Invalidate - как его применять, в таймере?
MV (2003-12-18 16:09:00) [14]
Библиотека EhLib от Дмитрия Большакова. Просто используешь - и иногда вспоминаешь, как раньше мучался.
Бесплатная. Дакументация. Масса примеров.
http://ehlib.com/RUS/default.htm
samalex (2003-12-18 16:07:00) [15]
MV
А что это зверь DBGridEh и где его брать?
Плохиш_ (2003-12-18 16:04:00) [16]
TDBGrid.Invalidate
samalex (2003-12-18 16:03:00) [17]
Ну, в принципе, да - Close/Open.
MV (2003-12-18 16:01:00) [18]
Переходи на DBGridEh! Там все проблемы решены!
Sandman25 (2003-12-18 15:59:00) [19]
[10] samalex (18.12.03 15:49)
Приходит сообщение от таймера. Что дальше? Вы делаете Close/Open набору данных для грида?
samalex (2003-12-18 15:49:00) [20]
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("