Ну, не надеюсь на ответ, собственно

отредактировано 08:48 Раздел: FastReport 4.0
Србственно четвёртый день безуспешно пытаюсь в OnBeforePrint после стандартного заполнения данными TfrxCrossView (тут все ОК) заменить номера колонок, которые выводятся в CrossHeader по умолчанию, на названия этих колонок. Оба руководства перечитал, примеры пересмотрел, поиск на форуме сделал. Увы!
Но если, вдруг - спасибо.

Комментарии

  • gpigpi
    отредактировано 08:48
    Используйте событие TfrxCrossView OnPrintColumnHeader
    procedure Cross1OnPrintColumnHeader(Memo: TfrxMemoView; HeaderIndexes, HeaderValues, Value: Variant);
    begin
         if HeaderIndexes[0] <> null then Memo.Text := VarToStr(Value)+'_';
    end;
    
  • отредактировано 08:48
    gpi написал: »
    Используйте событие TfrxCrossView OnPrintColumnHeader

    спасибо!

    вот то же самое мне посоветовали в техподдержке на сайте фастрепорт
    тока, увы, в версии FR Basic, которую я прикупил, нету поддержки скриптов в дизайнере

    попробовал объявить такую процедуру в секции private формы и в OnBeforePrint, после заполнения кросса данными, присвоить событию ссылку на эту процедуру

    procedure MyOnPrintColumnHeader(Memo: TfrxCustomMemoView; HeaderIndexes, HeaderValues, Value: Variant);
    begin
         if HeaderIndexes[0] <> null then Memo.Text := VarToStr(Value)+'proba';
    end;
    .......
    .......
    begin
      .....
      MyCross.OnBeforePrintColumnHeader:=MyOnPrintColumnHeader;
    end;
    

    CodeGear ругается:
    [DCC Error] UnitMain.pas(517): E2009 Incompatible types: 'Parameter lists differ'
    

    мот кто-нить знает, как мона достучаться до хидера без скриптов, непосредственно из тела программы?

  • отредактировано 08:48
    ну, точно, получил ответ на сайте компании, что скромный "базик" не поддерживает скриптов
    хм, дело даже не тока в том, чтобы купить стандарт... но и так деньги добирались от нас в Россию неделю, а начальство уже щемит
    а получу - ещё со скриптами разбираться, основываясь на отнюдь не потрясающем мануале...
    да и фиг его знает: оплатит потом расходы - или нет
    тридцать долларов - лана, переживу, но сотню как-то жалковато ради такого пустяка тратить


    резонно предположив, что просвещать меня по поводу иного варианта доступа к хидерам никто не станет, махнул рукой и пошёл детским обходным путём
    создаю буферную таблицу и копирую в неё данные из исходной, вставляя в нужные места заголовки
    типа вот так:
    procedure TForm1.frxReport1BeforePrint(c: TfrxReportComponent);
    var
      Cross: TfrxCrossView;
      iii, jjj: Integer;
    
      NumRowNewPageHeader:integer;
      BufSG:TStringGrid;
    begin
      if c is TfrxCrossView then
      begin
    
        BufSG:=TStringGrid.Create(self);
        NumRowNewPageHeader:=SENumRowNewPageHeader.Value;
    
        BufSG.ColCount:=StringGrid1.ColCount;
        BufSG.RowCount:=1;
    
        for iii := 0 to StringGrid1.RowCount - 1 do
          begin
             //добавление заголовка, если требуется
            if BufSG.RowCount=NumRowNewPageHeader then
              begin
                 BufSG.RowCount:=BufSG.RowCount+1;
                 for jjj := 0 to StringGrid1.ColCount - 1 do
                   BufSG.Cells[jjj,BufSG.RowCount-1]:=StringGrid1.Cells[jjj,0];
                 NumRowNewPageHeader:=NumRowNewPageHeader+SENumRowNewPageHeader.Value+SEaddRC.Value;
              end;//if BufSG.RowCount=NumColNewPageHeader then
            //собственно данные таблицы
            if iii>0 then BufSG.RowCount:=BufSG.RowCount+1;
              for jjj := 0 to StringGrid1.ColCount - 1 do
                BufSG.Cells[jjj,BufSG.RowCount-1]:=StringGrid1.Cells[jjj,iii];
          end;//for iii := 0 to StringGrid1.RowCount - 1 do
    
        Cross := TfrxCrossView(c);
        for iii := 1 to BufSG.ColCount do
          for jjj := 1 to BufSG.RowCount do
            Cross.AddValue([jjj], [iii], [BufSG.Cells[iii - 1, jjj - 1]]);
    
        BufSG.Free;
      end;//if c is TfrxCrossView then
    end;
    

    мона, конечно, было бы обойтись без буферной BufSG, но первая мысль была такой, а теперь лениво переделывать

    если кому интересно подробнее - прикладываю архивчик

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

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.