Последняя версия DataExpress 3 beta от 15 ноября 2020 года.

Изображение Скачать | Изображение Что нового?



Объявление:

Если вам понравилась программа и вы ее интенсивно используете - замолвите словечко о ней на вашем сайте (блоге, форуме, твитере, краской на подъезде, ютуб-канале и т.д.) с активной (по-возможности) ссылкой на сайт программы/форум. Тем самым вы можете внести небольшой вклад в seo-карму проекта в виде входящих ссылок.
Спасибо! Администрация :)


>> Обсудить <<


Внимание! Кража данных


TdxPivotGrid

Вопросы о применении того или иного класса или функции.
jurist23rus
Эксперт
Сообщения: 2708
Зарегистрирован: 30 сен 2016, 09:42
Откуда: Майкоп
Благодарил (а): 3 раза
Поблагодарили: 29 раз

TdxPivotGrid

Сообщение jurist23rus » 23 янв 2018, 16:37

Есть у TdxPivotGrid свойство Colors: TKGridColors . У TKGridColors своя куча свойств, но как я понимаю все это имеет отношение ко всей таблице. Можно ли раскрасить только одну строку или ячейку?
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
admin
Разработчик
Сообщения: 5265
Зарегистрирован: 14 мар 2016, 11:32
Откуда: Ленинградская
Благодарил (а): 43 раза
Поблагодарили: 358 раз

Re: TdxPivotGrid

Сообщение admin » 23 янв 2018, 17:36

В TdxPivotGrid только часть свойств TKGrid. Вот все, что Вы видите в дереве классов, то и есть. Добавлять свойства сейчас нет ни времени, ни желания.

jurist23rus
Эксперт
Сообщения: 2708
Зарегистрирован: 30 сен 2016, 09:42
Откуда: Майкоп
Благодарил (а): 3 раза
Поблагодарили: 29 раз

Re: TdxPivotGrid

Сообщение jurist23rus » 23 янв 2018, 19:07

Я просто спрашиваю не знаете ли вы как раскрасить отдельную строку? Компонент TKGrid достаточно мудрёный, у него много всяких наворотов да только не понятно как ими пользоваться. Я думаю может новых свойств и не надо, можно раскрасить теми что есть, да я не знаю как.
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
admin
Разработчик
Сообщения: 5265
Зарегистрирован: 14 мар 2016, 11:32
Откуда: Ленинградская
Благодарил (а): 43 раза
Поблагодарили: 358 раз

Re: TdxPivotGrid

Сообщение admin » 23 янв 2018, 19:21

Есть событие OnDrawCell.

Аватара пользователя
Иван
Интересующийся
Сообщения: 215
Зарегистрирован: 22 дек 2018, 14:16
Откуда: Kiev
Благодарил (а): 33 раза
Поблагодарили: 51 раз

TdxPivotGrid

Сообщение Иван » 10 май 2020, 16:23

admin писал(а):Есть событие OnDrawCell.


Добрый день. Вопрос к Admin. Не работает прорисовка OnDrawCell если ее сохранять в свой обработчик. Прикрепил пример.

Код: Выделить всё

var OnMD: TKGridDrawCellEvent;

procedure MD (Sender: TObject; ACol, ARow: Integer; R: TRect; State: TKGridDrawState);
begin
      if OnMD<>nil then OnMD (Sender, ACol, ARow, R, State);
end;

procedure Form_Create;
begin
       OnMD:= dxPivotGrid1.OnDrawCell;
       dxPivotGrid1.OnDrawCell:= @MD;
end; 


Что бы пошла отрисовка как минимум нужно вручную прописать ряд параметров, добавил внизу. Это так и должно быть?

Код: Выделить всё

TKGrid(Sender).Canvas.FillRect(R);
    TKGrid(Sender).Canvas.TextOut(R.Left, R.Top, TKGrid(Sender).Cells[ACol, ARow]);
                                                                                   
Вложения
TKGRID_DRAW.rar
Demo не работает OnDrawCell TKGrid
(41.91 КБ) 43 скачивания

Vofka18
Знаток
Сообщения: 471
Зарегистрирован: 04 мар 2018, 16:54
Благодарил (а): 46 раз
Поблагодарили: 53 раза

TdxPivotGrid

Сообщение Vofka18 » 10 май 2020, 16:47

jurist23rus писал(а):Есть у TdxPivotGrid свойство Colors: TKGridColors . У TKGridColors своя куча свойств, но как я понимаю все это имеет отношение ко всей таблице. Можно ли раскрасить только одну строку или ячейку?

Кусочек кода из моей программы, чисто для примера

Код: Выделить всё

procedure drawcell(Sender: TObject; ACol, ARow: Integer; R: TRect; State: TKGridDrawState);
var
  FontColor : TColor;
  FontStyle : TFontStyles;
  BrColor : TColor;
  ts:TtextStyleRec;
  i,clr:integer;
begin
  i:=getIndexXls(tEditWindow(tPanel(tdxPivotGrid(sender).parent).parent).form.parentForm);

  with tdxPivotGrid(Sender).Canvas do
  begin
    //Запоминаем параметры шрифта и кисти.
    FontColor := Font.Color;
    FontStyle := Font.Style;
    BrColor := Brush.Color;

    //Устанавливаем новые парметры.
    // xlsLD[i].clrMap это массив шаблон для раскраски каждой ячейки в строке(он заполняется в другой процедуре.
    // чтоб не сбивал с толку)
    try
      if (ACol > 0) and (ARow > 0) then
      begin
        if (Length(xlsLD[i].clrMap)>=Arow+1)then
        begin
          for clr := 0 to High(xlsLD[i].clrMap[Arow].color) do
          begin
            if(xlsLD[i].clrMap[Arow].color[clr]<>'') and (aCol=clr+1)then
            begin
              brush.Color := StringToColor(xlsLD[i].clrMap[Arow].color[clr]);
            end;
          end;
        end;
      end;
    except
      debug('Ошибка при раскраске, в строке: '+intToStr(Arow));
    end;

    if (kgdSelected in State) then
    begin
      Brush.Color := clBlue;
      Font.Color := clWhite;
      Font.Style := Font.Style + [fsBold];
    end;
    //Прорисовываем ячейку.

    //Заливаем квадрат ячейки цветом кисти.
    FillRect(R);
    rectangle(R.Left,R.Top,R.Right,R.Bottom);
    //Прорисовываем в ячейке текст. Здесь +2 - так мы задаём ширину полей в ячейке.
    //TextOut(R.Left + 2, R.Top + 2, tdxPivotGrid(Sender).Cells[ACol, ARow]);
    TextRect(R,R.Left+3, R.Top+2, tdxPivotGrid(Sender).Cells[ACol, ARow],ts);
    //rectangle(R.Left,R.Top,R.Right,R.Bottom);

    //Восстанавливаем прежние параметры.
    Font.Color := FontColor;
    Font.Style := FontStyle;
    Brush.Color := BrColor;
  end;

end;                     

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

Vofka18
Знаток
Сообщения: 471
Зарегистрирован: 04 мар 2018, 16:54
Благодарил (а): 46 раз
Поблагодарили: 53 раза

TdxPivotGrid

Сообщение Vofka18 » 10 май 2020, 17:01

Иван писал(а):
admin писал(а):Есть событие OnDrawCell.


Добрый день. Вопрос к Admin. Не работает прорисовка OnDrawCell если ее сохранять в свой обработчик. Прикрепил пример.

Код: Выделить всё

var OnMD: TKGridDrawCellEvent;

procedure MD (Sender: TObject; ACol, ARow: Integer; R: TRect; State: TKGridDrawState);
begin
      if OnMD<>nil then OnMD (Sender, ACol, ARow, R, State);
end;

procedure Form_Create;
begin
       OnMD:= dxPivotGrid1.OnDrawCell;
       dxPivotGrid1.OnDrawCell:= @MD;
end; 

Разрешите вставить свои 5коп. Вы вызываете старый обработчик рисования. Зачем? если хотите рисовать сами? там единственное, что надо вернуть (после своей отрисовки) стандартные значения отрисовки таблицы, чтоб она дорисовала то, что вам не надо.
Например если вы не раскрашиваете шапку таблицы.

Аватара пользователя
Иван
Интересующийся
Сообщения: 215
Зарегистрирован: 22 дек 2018, 14:16
Откуда: Kiev
Благодарил (а): 33 раза
Поблагодарили: 51 раз

TdxPivotGrid

Сообщение Иван » 10 май 2020, 17:05

Vofka18 писал(а):...


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

По общей логике сохранив и снова вызвав обработчик все должно быть как будто этой процедуры и не прописано. Но отрисовка просто не происходит.

Vofka18
Знаток
Сообщения: 471
Зарегистрирован: 04 мар 2018, 16:54
Благодарил (а): 46 раз
Поблагодарили: 53 раза

TdxPivotGrid

Сообщение Vofka18 » 10 май 2020, 17:11

Иван писал(а):
Vofka18 писал(а):...


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

По общей логике сохранив и снова вызвав обработчик все должно быть как будто этой процедуры и не прописано. Но отрисовка просто не происходит.

Просто разукрасить выделение нужно также как в примере, запомнить текущие параметры вписать следующее условие

Код: Выделить всё

if (kgdSelected in State) then
    begin
      Brush.Color := clBlue;
      Font.Color := clWhite;
      Font.Style := Font.Style + [fsBold];
    end;

И вернуть исходные параметры. По другому пробовал, не получается. Грамотно обьеснить почему, я к сожелению не могу :)

Аватара пользователя
admin
Разработчик
Сообщения: 5265
Зарегистрирован: 14 мар 2016, 11:32
Откуда: Ленинградская
Благодарил (а): 43 раза
Поблагодарили: 358 раз

TdxPivotGrid

Сообщение admin » 10 май 2020, 20:50

Иван писал(а):Добрый день. Вопрос к Admin. Не работает прорисовка OnDrawCell если ее сохранять в свой обработчик. Прикрепил пример.

В программе событие OnDrawCell не используется. Если определен обработчик, то вы сами должны рисовать содержимое ячейки.


Вернуться в «Вопросы по API DataExpress.»