Глюки rxDBGrid

Модераторы: alexs, Модераторы

Re: Глюки rxDBGrid

Сообщение alexs » 21.08.2020 17:07:54

Наверное надо както приводить к общему знаменателю... Надо подумать
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение V@S » 21.08.2020 17:45:27

А можно попросить об одной реализации?
Добавить в событие OnGetCellProps параметр Highlight = boolean.
Чтобы можно было отследить,что в гриде строка подсвечивается и соответственно не менять цвет строки (строка может подсвечиваться свойством dgRowHighlight или быть выделенной при gdMultiSelect).

Или подскажите как еще можно определить, что данная строка является выделенной/выбранной? Может просто не нахожу нужного свойства или метода :?
Аватара пользователя
V@S
новенький
 
Сообщения: 19
Зарегистрирован: 31.03.2008 10:23:20

Re: Глюки rxDBGrid

Сообщение alexs » 21.08.2020 17:54:04

V@S писал(а):Или подскажите как еще можно определить, что данная строка является выделенной/выбранной? Может просто не нахожу нужного свойства или метода

Что-то типа этого
RxDBGrid1.SelectedRows.IndexOf(quMain.Bookmark);
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение V@S » 21.08.2020 17:56:51

В DrawCell модуля rxdbgrid даже учитывается, что строка выделена, но не учитывается что она подсвечена
Код: Выделить всё
    if Assigned(FOnGetCellProps) and not (gdSelected in aState) then
    begin
      FBackground := Canvas.Brush.Color;
      FOnGetCellProps(Self, GetFieldFromGridColumn(aCol), Canvas.Font, FBackground);
      Canvas.Brush.Color := FBackground;
    end;                                                       

Но тут проверять еще на активную подсветку всей строки неправильно, вдруг надо перекрашивать все равно.
Даже можно aState передать, как в других событиях.

Добавлено спустя 52 секунды:
alexs писал(а):RxDBGrid1.SelectedRows.IndexOf(quMain.Bookmark);

Даже если запись не в закладках? Или активная запись всегда в закладки помещается?
Аватара пользователя
V@S
новенький
 
Сообщения: 19
Зарегистрирован: 31.03.2008 10:23:20

Re: Глюки rxDBGrid

Сообщение alexs » 21.08.2020 17:57:49

А ещё кажется должно так сработать
if RxDBGrid1.SelectedRows.CurrentRowSelected then

Хотя в реализации CurrentRowSelected тоже самое и есть:
Код: Выделить всё
function TBookmarkList.GetCurrentRowSelected: boolean;
var
  Bookmark: TBookmark;
begin
  CheckActive;
  Bookmark := FDataset.GetBookmark;
  Result := IndexOf(Bookmark)>=0;
  FDataset.FreeBookmark(Bookmark);
end;
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение V@S » 21.08.2020 18:03:08

alexs писал(а):А ещё кажется должно так сработать
if RxDBGrid1.SelectedRows.CurrentRowSelected then

Это нашел, но не смог заставить так срабатывать для текущей строки.
Аватара пользователя
V@S
новенький
 
Сообщения: 19
Зарегистрирован: 31.03.2008 10:23:20

Re: Глюки rxDBGrid

Сообщение kit » 25.09.2020 10:44:22

Не берет название шрифта из TitleFont для об'единенних колонок "|", для простих - нормально.
kit
постоялец
 
Сообщения: 156
Зарегистрирован: 29.09.2016 09:39:07

Re: Глюки rxDBGrid

Сообщение alexs » 28.09.2020 14:48:34

kit писал(а):Не берет название шрифта из TitleFont для об'единенних колонок "|", для простих - нормально.

Уже берёт - ревизия 7680
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение YaroslavSh » 09.01.2021 23:45:52

Добрый день.
Код: Выделить всё
procedure TForm3.RxDBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if RxDBGrid1.DataSource.DataSet.FieldByName('kolvo').AsFloat<=0 then begin
with  RxDBGrid1.Canvas do begin
Brush.Color:=$00605BF4;
if gdSelected in State then begin
Brush.Color:= $00FFBF80;
Font.Color := clblack;
end;
FillRect(Rect);
end;
end;

RxDBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;


Изображение

При раскрашивании таким методом, пропадают горизонтальные разделители строк, и все сливается в одну картинку, хотя вертикальные остаются. Ни как не могу их вернуть. Что для этого нужно сделать?
YaroslavSh
новенький
 
Сообщения: 26
Зарегистрирован: 21.07.2010 08:09:41

Re: Глюки rxDBGrid

Сообщение alexs » 09.01.2021 23:51:08

В Rect находится координата также и разделительной линии
Просто уменьши на единицу нижнюю кординату.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение YaroslavSh » 10.01.2021 02:43:08

Я много вариантов пробовал, но либо не рисует совсем, либо просто без изменений
По идеи, должно быть:
fillRect(X1,Y1,X2,Y2: Integer)

RxDBGrid1.Canvas.FillRect(0,0,Width,Height-1);
YaroslavSh
новенький
 
Сообщения: 26
Зарегистрирован: 21.07.2010 08:09:41

Re: Глюки rxDBGrid

Сообщение Seenkao » 10.01.2021 23:18:09

Варианты решения:
1 - Выставить прозрачность при сплошной заливке?
2 - заливать частями, чтоб не затереть линии.
3 - делать заливку, а потом делать таблицу сверху? (странный вариант...)

Чтоб понимать - FillRect - это сплошная заливка сплошного прямоугольника, где все линии, попадающие в прямоугольник заливки так же приобретают цвет заливки. (рисовался бы текст раньше заливки, то и его бы тоже не видно было).
Seenkao
энтузиаст
 
Сообщения: 502
Зарегистрирован: 01.04.2020 03:37:12

Re: Глюки rxDBGrid

Сообщение Снег Север » 11.01.2021 10:07:33

YaroslavSh, а если так:
RxDBGrid1.Canvas.FillRect(0,1,Width,Height-2);
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Глюки rxDBGrid

Сообщение alexs » 11.01.2021 11:03:15

Предложений уже набросали
Вот ещё один вариант:

Код: Выделить всё
procedure TForm1.RxDBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  P: TSize;
begin
  P:=Rect.Size;
  P.cy:=P.cy - 1;
  P.cx:=P.cx - 1;
  Rect.Size:=P;
  if FBDataSet1SPR_UNITS_CODE.AsInteger<=2 then
  begin
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение YaroslavSh » 11.01.2021 23:36:13

Спасибо за помощь.
Снег Север писал(а):YaroslavSh, а если так:
RxDBGrid1.Canvas.FillRect(0,1,Width,Height-2);
- это неверно.

Код: Выделить всё
var
  P: TSize;
begin
P:=Rect.Size;
  P.cy:=P.cy - 1;
  P.cx:=P.cx - 1;
  Rect.Size:=P;

if RxDBGrid1.DataSource.DataSet.FieldByName('kolvo').AsFloat<=0 then
begin
with  RxDBGrid1.Canvas do begin
Brush.Color:=$00605BF4;
if gdSelected in State then begin
Brush.Color:= $00FFBF80;
Font.Color := clblack;
end;
RxDBGrid1.Canvas.FillRect(rect);
end;
end;


Это то, что нужно, спасибо ГУРУ.
YaroslavSh
новенький
 
Сообщения: 26
Зарегистрирован: 21.07.2010 08:09:41

Пред.След.

Вернуться в RxLib

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

Рейтинг@Mail.ru