Страница 25 из 26

Re: Глюки rxDBGrid

СообщениеДобавлено: 21.08.2020 17:07:54
alexs
Наверное надо както приводить к общему знаменателю... Надо подумать

Re: Глюки rxDBGrid

СообщениеДобавлено: 21.08.2020 17:45:27
V@S
А можно попросить об одной реализации?
Добавить в событие OnGetCellProps параметр Highlight = boolean.
Чтобы можно было отследить,что в гриде строка подсвечивается и соответственно не менять цвет строки (строка может подсвечиваться свойством dgRowHighlight или быть выделенной при gdMultiSelect).

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

Re: Глюки rxDBGrid

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

Что-то типа этого
RxDBGrid1.SelectedRows.IndexOf(quMain.Bookmark);

Re: Глюки rxDBGrid

СообщениеДобавлено: 21.08.2020 17:56:51
V@S
В 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);

Даже если запись не в закладках? Или активная запись всегда в закладки помещается?

Re: Глюки rxDBGrid

СообщениеДобавлено: 21.08.2020 17:57:49
alexs
А ещё кажется должно так сработать
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;

Re: Глюки rxDBGrid

СообщениеДобавлено: 21.08.2020 18:03:08
V@S
alexs писал(а):А ещё кажется должно так сработать
if RxDBGrid1.SelectedRows.CurrentRowSelected then

Это нашел, но не смог заставить так срабатывать для текущей строки.

Re: Глюки rxDBGrid

СообщениеДобавлено: 25.09.2020 10:44:22
kit
Не берет название шрифта из TitleFont для об'единенних колонок "|", для простих - нормально.

Re: Глюки rxDBGrid

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

Уже берёт - ревизия 7680

Re: Глюки rxDBGrid

СообщениеДобавлено: 09.01.2021 23:45:52
YaroslavSh
Добрый день.
Код: Выделить всё
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;


Изображение

При раскрашивании таким методом, пропадают горизонтальные разделители строк, и все сливается в одну картинку, хотя вертикальные остаются. Ни как не могу их вернуть. Что для этого нужно сделать?

Re: Глюки rxDBGrid

СообщениеДобавлено: 09.01.2021 23:51:08
alexs
В Rect находится координата также и разделительной линии
Просто уменьши на единицу нижнюю кординату.

Re: Глюки rxDBGrid

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

RxDBGrid1.Canvas.FillRect(0,0,Width,Height-1);

Re: Глюки rxDBGrid

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

Чтоб понимать - FillRect - это сплошная заливка сплошного прямоугольника, где все линии, попадающие в прямоугольник заливки так же приобретают цвет заливки. (рисовался бы текст раньше заливки, то и его бы тоже не видно было).

Re: Глюки rxDBGrid

СообщениеДобавлено: 11.01.2021 10:07:33
Снег Север
YaroslavSh, а если так:
RxDBGrid1.Canvas.FillRect(0,1,Width,Height-2);

Re: Глюки rxDBGrid

СообщениеДобавлено: 11.01.2021 11:03:15
alexs
Предложений уже набросали
Вот ещё один вариант:

Код: Выделить всё
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

Re: Глюки rxDBGrid

СообщениеДобавлено: 11.01.2021 23:36:13
YaroslavSh
Спасибо за помощь.
Снег Север писал(а):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;


Это то, что нужно, спасибо ГУРУ.