Barcode Object

отредактировано 16:31 Раздел: FastReport 4.0
Вопрос по barcode object:
Печать штрих-кода происходит на цветной картинке. Для лучшей считываемости нужно сделать белую рамку возле штрих-кода (особенно слева и справа). Если делать frame'ом который в barcode (белый цвет + вокруг всего компонента), то слева и справа "съедается" часть штрих-кода. Итог: штрих-код не читается. Проблему решил "подкладыванием" под barcode обычного текстового объекта. Но количество цифр в штрих-коде может быть разной. В скрипт встроил такой код:
Memo1.width := BarCode1.width + 7;
Текстовое поле остается прежним. Пробовал на разные события вешать.
Может что-то не то делаю? Или можно этот вопрос решить без текстового объекта (чтобы штрих-код не "съедался" по краям)?

Комментарии

  • gpigpi
    отредактировано 16:31
    Memo1 должен выводиться после BarCode1 (находиться ниже BarCode1 в дереве отчёта)
    Код
    Memo1.width := BarCode1.width + 7;
    поместите в Memo1.OnBeforePrint
  • отредактировано 16:31
    Спасибо, но так не работает.
    memo1 находится ниже в Report Tree.

    Значение в barcode присваиваю так:
    procedure Page2OnBeforePrint(Sender: TfrxComponent);
    begin
    barcode1.text := cards_counter1; //значение передаю из delphi
    end;

    Может есть способ без memo1 обойтись? Может в barcode можно еще как то рамку сделать?

    4.8.27 версия FR.
  • gpigpi
    отредактировано 16:31
    написал:
    Memo1 должен выводиться после BarCode1 (находиться ниже BarCode1 в дереве отчёта)
    Да, этот совет, как оказалось, работать не будет
    Рабочий пример в аттаче
  • отредактировано 16:31
    Да, так работает, но только с EAN штрих-кодами (если ввести например 3 цифры, то остальные заполняться нулями, сам штрих-код будет всегда одинаковой длинны). К сожалению мне не подходят EAN штрих-коды, а остальные так не работают.
  • gpigpi
    отредактировано 16:31
    Тогда вычисляйте размеры штрихкода в коде Delphi
    procedure TForm1.frxReport1BeforePrint(Sender: TfrxReportComponent);
    begin
         if Sender.Name = 'Memo2' then
           Sender.Width := TfrxBarCodeView(frxReport1.FindObject('Barcode1')).GetRealBounds.Right -
                           TfrxBarCodeView(frxReport1.FindObject('Barcode1')).GetRealBounds.Left;
    end;
    
    Или попробуйте написать пользовательскую функцию
  • отредактировано 16:31
    Ясно, спасибо.

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

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