Vericalband и выравниваение

отредактировано 22:23 Раздел: FastReport 4.0
Здравствуйте!

Необходимо сделать отчет следующей формы:

<N ячеек >|<мемо 1>|<мемо2>|<M ячеек>

где "N ячеек" и "M ячеек" поля переменной ширины, то есть туда выводятся данные из подчиненного датасета, разворачиваясь по горизинтали. Положил вертикальный бенд, положил на его пересечение с бендом горизонтальным мемо и настроил его на поле. Таким образом сделал поле "N ячеек". Ширину его рассчитываю в скрипте и соответсвенно смещаю мемо1 и мемо2. То есть получается что поле "N ячеек" растет слева на право. Та же задача стоит и для поля "M ячеек". Только расти оно должно с права на лево. Но вот как это сделать ума не приложу. Мне виделось что должно быть некое свойство что "выравнивание", но оно почему то работает не так, как я предполагаю. Выставляю у мемо которое должно формировать "M ячеек" align = baRight, но все равно выводимые данные приклеиваются к левому краю.

Комментарии

  • отредактировано 22:23
    Я тоже раньше думал, как это сделать при помощи отчёта, но чем заморачиваться, решил оставить это на код.
    Перед вызовом создаю то, что нужно:
              frxHeader := frxReport1.FindObject('PageHeader1');
              for i := 0 to 11 do
              begin
                frxMemo := TfrxMemoView.Create(frxHeader);
                frxMemo.CreateUniqueName;
                frxMemo.Left := float2;
                frxMemo.Width := float;
                float2 := float2 + float;
                frxMemo.Frame.Typ := [ftLeft, ftTop, ftBottom, ftRight];
                frxMemo.Height := 13 * fr01cm;
                frxMemo.Text := 'ТЕКСТ';
              end;
    

    Где float и float2 - соответственно ширина и левая граница. Ширина постоянна, левая граница постоянно увеличивается на ширину.
    Ширину можно взять из другого MemoView или высчитать (надо при этом умножать на fr01cm (если ширина в мм) или на fr1cm (если ширина в см) )
  • отредактировано 22:23
    Спасибо! Отличная идея! Я не догадался создавать просто мемо с текстом. Я так понимаю код вставляется в обработчик BeforePrint для нужного горизонтального бенда?
    Nightmareterrible написал: »
    Я тоже раньше думал, как это сделать при помощи отчёта, но чем заморачиваться, решил оставить это на код.
    Перед вызовом создаю то, что нужно:
              frxHeader := frxReport1.FindObject('PageHeader1');
              for i := 0 to 11 do
              begin
                frxMemo := TfrxMemoView.Create(frxHeader);
                frxMemo.CreateUniqueName;
                frxMemo.Left := float2;
                frxMemo.Width := float;
                float2 := float2 + float;
                frxMemo.Frame.Typ := [ftLeft, ftTop, ftBottom, ftRight];
                frxMemo.Height := 13 * fr01cm;
                frxMemo.Text := 'ТЕКСТ';
              end;
    

    Где float и float2 - соответственно ширина и левая граница. Ширина постоянна, левая граница постоянно увеличивается на ширину.
    Ширину можно взять из другого MemoView или высчитать (надо при этом умножать на fr01cm (если ширина в мм) или на fr1cm (если ширина в см) )
  • отредактировано 22:23
    Нет, вставляется он в Delphi:
    procedure Button1Click(Sender:TObject);
    begin
        frxReport1 := TfrxReport.Create(Form1);
        //... далее тот код
        frxReport1.ShowReport;
    end;
    
  • отредактировано 22:23
    Всем добрый день!

    Nightmareterrible, к сожалению в дельфу у меня вставить код лишний нельзя. Отчет делается на универсальном генераторе отчетов, для которого входным файлом является fr3 а выходным уже готовый сформированный отчет. Так что какой то код в дельфе который обслуживает конкрентный отчет не доступен.

    Я сделал немного по другому:

    В запросе, который получет данные бэнда, в котором должна быть развертка по горизонтали, вычислил ко-во необходимых ячеек в этой развертке.
    В скрипте сделал цикл по всем записям и получал максимально необходимое число ячеек слева и справа. Потом создавал там же TfrxMemo на это максимальное кол-во и размещал их в отведеном для них месте (рассчет координат размещения сделал нарисовав 2 вертикальные линии на каждую половину отчета и использовал их координаты - это для того что бы потом пользователь мог сам подкорректировать размеры ячеек в отчете).
    Потом на BeforePrint бэнда смотрел, сколько, в конкретной отображаемой записи, необходимо полей слева и справа и соответственное кол-во мемо оставлял видимым, остальные праятал (Visible := false), задавал значения видимым, и задавал им размеры, что бы они были вписаны в необходимый размер. Все.
    Если есть вопросы или хочется посмотреть код, мне не жалко, я поделюсь.

  • Irina1978Irina1978 Москва
    отредактировано 22:23
    Огромное спасибо за эту тему!!!
  • отредактировано 22:23
    Irina1978 написал: »
    Огромное спасибо за эту тему!!!
    Собственно тему должна называться - как у меня ничего не получилось с VerticalBand :)

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

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