RXDBGrid + DrawColumnCell

Вопросы программирования и использования среды Lazarus.

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

RXDBGrid + DrawColumnCell

Сообщение Xenar » 12.12.2012 11:50:09

Всем доброго дня.
Столкнулся такой проблемой. При использование с RXDBGrid обработчика DrawColumnCell у выводимых данный в гриде становится цвет шрифта белый. Причем обработчик может быть даже пустым достаточно его просто установить в свойствх комонента RXGrid и начинается такая петрушка. Без него все нормально.
В стандартном DBGrid работает все нормально.
Аватара пользователя
Xenar
постоялец
 
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Re: RXDBGrid + DrawColumnCell

Сообщение alexs » 13.12.2012 23:08:07

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

Re: RXDBGrid + DrawColumnCell

Сообщение dunin » 14.12.2012 14:16:39

Xenar писал(а):...При использование с RXDBGrid обработчика DrawColumnCell у выводимых данный в гриде становится цвет шрифта белый. Причем обработчик может быть даже пустым достаточно его просто установить в свойствх комонента RXGrid и начинается такая петрушка....

А зачем делать пустой обработчик? По мне так все логично: определили обработчик - рисуйте в нем сами. :?

Делаем так:
Код: Выделить всё
procedure TMainForm.GridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: integer; Column: TColumn; State: TGridDrawState);
begin
  if (not (gdFocused in State)) and (not (gdSelected in State)) then begin
    //if (tDBGrid(Sender).DataSource.DataSet.FieldByName('id_performer').AsInteger = UserID) then begin
    // чего-то тут красим....
    //end;
  end; // if (not (gdFocused in State))

  TRxDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol - 1, Column, State); // а что не попадает под условие красим стандартно
end;   


Добавлено спустя 45 секунд:
alexs писал(а):Пример есть?

Вот:
Код: Выделить всё
procedure TMainForm.GridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: integer; Column: TColumn; State: TGridDrawState);
begin
//
end;
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: RXDBGrid + DrawColumnCell

Сообщение alexs » 16.12.2012 13:47:45

На самом деле всё не так.
Проще показать покоду:

Код: Выделить всё
procedure TRxDBGrid.DefaultDrawCellData(aCol, aRow: integer; aRect: TRect;
  aState: TGridDrawState);
var
  S: string;
  F: TField;
  C: TRxColumn;
  j: integer;
begin
  if Assigned(OnDrawColumnCell) and not (CsDesigning in ComponentState) then
    OnDrawColumnCell(Self, aRect, aCol, TColumn(ColumnFromGridColumn(aCol)), aState)
  else
  begin
    F := GetFieldFromGridColumn(aCol);
    C := ColumnFromGridColumn(aCol) as TRxColumn;
    if Assigned(C) and Assigned(C.FOnDrawColumnCell) then
      C.OnDrawColumnCell(Self, aRect, aCol, TColumn(ColumnFromGridColumn(aCol)), aState)
    else
    begin


Если указан глобальный отрисовщик ячеек таблицы - то все заботы по отрисовке берёшь на себя.
Если хочешь только конкретный стобец- то определи отрисовщик в указанной колонке.
Иначе - грид рисует согласно правилам сам.

Т.е. если определён обработчик OnDrawColumnCell для грида - то в гриде вызывается только он и больше никаких отрисовок данных.
Ну а насчёт цвета - я его просто не трогаю в том случае. Если определели отрисовщик - то сам и цвет выставляй.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RXDBGrid + DrawColumnCell

Сообщение Xenar » 07.03.2013 10:03:10

Уважаемый alexs, честно говоря я ничего не понял в Вашем примере :oops:
Взял за основу пример из поста dunin.
Ставлю в начале процедуры
Код: Выделить всё
TRxDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol - 1, Column, State);

а потом высталяю свои закраски, так более менее работает.
Но не могу победить следующую проблему, если я использую заливку типа
Код: Выделить всё
RxDBGrid1.Canvas.FillRect(Rect);

то у указанных ячейках исчезают разделительные линии между другими ячейками, как будто заливка и их "задевает"

Код: Выделить всё
TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol - 1, Column, State);
if SQLQSuperSBt1.FieldByName('lastv').AsString = '05.03.2013' then 
  begin
   RxDBGrid1.Canvas.Brush.Color:=$0079F88D;
   RxDBGrid1.Canvas.Font.Color:=clBlack;
   RxDBGrid1.Canvas.FillRect(Rect);
   RxDBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+2,Column.Field.Text);
  end;


Изображение
Такая вот беда идет только в RxDBGrid, до сего момента использовал стандартный DBGrid, там срабатывает штатно
Аватара пользователя
Xenar
постоялец
 
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Re: RXDBGrid + DrawColumnCell

Сообщение Xenar » 16.04.2013 13:00:43

:cry:
Есть ли у кого Рабочий пример работы DrawColumnCell с RxDBGrid
Ну абсолютно ничего общего со стандартным DBGrid :(
Аватара пользователя
Xenar
постоялец
 
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Re: RXDBGrid + DrawColumnCell

Сообщение alexs » 16.04.2013 19:24:39

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

Re: RXDBGrid + DrawColumnCell

Сообщение Xenar » 17.04.2013 10:46:40

Ну собственно говоря на два поста выше http://www.freepascal.ru/forum/viewtopic.php?t=8701&view=unread#p70340 я расписал в чем есть затруднение. А вообще в Demos пакета хотелось бы конечно видеть рабочий пример.
Аватара пользователя
Xenar
постоялец
 
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Re: RXDBGrid + DrawColumnCell

Сообщение alexs » 17.04.2013 11:06:36

По существу вопроса:
Скорее всего ты переопределяешь в своём обработчике текстшрифта и не востанавливаешь его обратно.
Я не делал контроль этого. Надо будет добавить принудительное востановление параметров канвы.

А теперь советы:
Тебе просто заливку фона сделать?
Воспользуйся обработчиком OnGetCellProps. Он именно для этого и нужен.
А ещё отрисовку конкретной ячеки можно сделать через назначение обработчика у события отрисовки у колонки грида.

Добавлено спустя 1 минуту 5 секунд:
PS
Где тут админы форума - перенесите тему в раздел по RX. Ей там самое место.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru