Рамка вокруг букв

отредактировано 05:38 Раздел: FastReport 4.0
При формировании очередного отчёта возникла необходимость впечатывать данные в "бланк", где каждая буква находится в определённой ячейке с рамкой. Конечно я накидал в отчёт около 2000 мемок и написал обработчики событий, но как-то это всё топорно. Возникла идея переписать метод TfrxMemoView.Draw, но сразу же столкнулся с главной проблемой фаста - нулевой виртуализацией: или пиши всё с нуля или пользуйся тем что есть. Мысль, что всё уже давно сделано, не покидает меня, поскольку с заполнением бланков сталкивается практически любой программист

Комментарии

  • gpigpi
    отредактировано 05:38
    Самый простой вариант - использовать массив TfrxMemoView.
    Переписывать метод TfrxMemoView.Draw не рекомендую
    Объект CelluarText будет добавлен в шестой версии и будет основан на объекте Таблица (как и в FR.Net)
  • отредактировано 05:38
    Что значит "использовать массив" ???
  • gpigpi
    отредактировано 05:38
    Несколько TfrxMemoView, т.е. то, что Вы используете сейчас
  • отредактировано 05:38
    То есть выхода нет ? Или ждать ещё пятилетку до выхода FR6 или закидывать в отчёт по 2000 мемок и пусть он весит 1мБ и не открывается на слабых машинах
  • gpigpi
    отредактировано 05:38
    написал:
    То есть выхода нет ?
    В общем случае (при использовании слабых машин и 2000 TfrxMemoView) - да, выхода нет
    Можно использовать TfrxCrossView как в PrintTable, но для этого нужно знать, отчёт какого вида Вам нужен, т.е. подойдёт ли TfrxCrossView для Вашего отчёта
  • отредактировано 05:38
    Вот, например, начало первой страницы
    tqnjx.jpg
  • gpigpi
    отредактировано 05:38
    Если расстояние между ячейками не обязательно, то можно использовать и TfrxCrossView
  • отредактировано 05:38
    Расстояние обязательно, так как это стандартный бланк отчётности, который обрабатывется впоследствии программой для считывания (об этом можно судить по чёрным квадратиками с краю листа).
    Было бы неважно расстояние между буквами сделал бы сетку из гораздо меньшего количества мемок
    4689073.jpg
  • gpigpi
    отредактировано 05:38
    Тогда попробуйте расположить в ячейке кросса вложенный TfrxMemoView
  • Stalker4Stalker4 123
    отредактировано 05:38
    gpi написал: »
    Объект CelluarText будет добавлен в шестой версии и будет основан на объекте Таблица (как и в FR.Net)
    Кстати говоря, этот объект был обещан именно в FR5, еще несколько лет назад.
  • отредактировано January 2015
    gpi написал: »
    Тогда попробуйте расположить в ячейке кросса вложенный TfrxMemoView
    Спасибо за идею, весьма огигинально, но опять же новые глюки. На волшебной цифре 25 ширина второй колонки Кросса не изменяется :)
    6783416.png
  • gpigpi
    отредактировано 05:38
    написал:
    Спасибо за идею, весьма огигинально, но опять же новые глюки. На волшебной цифре 25 ширина второй колонки Кросса не изменяется sad.gif
    FR 5.1.12 - не воспроизводится
    Цифра 25 выводится не в кроссе, а в TfrxMemoView на дочернем бэнде
  • отредактировано 05:38
    gpi написал: »
    Цифра 25 выводится не в кроссе, а в TfrxMemoView на дочернем бэнде
    Дочерний бенд с Мемкой был сделан для видимости соразмерности колонок Кросса и Мемки под кросом. До волшебной цифры 25, размеры второй колонки и Мемки под ней совпадают, ниже 25, вотрая колонка меньше не делается (хотя размер первой колонки изменяется)
  • gpigpi
    отредактировано 05:38
    FR 5.1.12 - не воспроизводится
    68f1f4a16aae.jpg
    В аттаче сохранённые страницы превью
  • gpigpi
    отредактировано 05:38
    Проверил на 4.15.13 - тоже формируется корректно
  • отредактировано January 2015
    Что то, уж все очень сложно. Я написал функцию и заношу в ячейку нужный по порядку символ.
    Например в 1 квадратик [GetCharFromVar(<Фирма_ИНН>,1,true)] - 1 символ слева, во 2 квадратик [GetCharFromVar(<Фирма_ИНН>,2,true)] - 2 символ слева и т.д.
  • отредактировано 05:38
    Bali написал: »
    Что то, уж все очень сложно. Я написал функцию и заношу в ячейку нужный по порядку символ.
    Например в 1 квадратик [GetCharFromVar(<Фирма_ИНН>,1,true)] - 1 символ слева, во 2 квадратик [GetCharFromVar(<Фирма_ИНН>,2,true)] - 2 символ слева и т.д.
    Дело не в функции, а в количестве Мемок в отчёте. Писать функцию в каждой Мемке - тоже извращение. Я, например, обозвал каждую Мемку вида DS_NameField_NumberChar и в событии OnBeforePrint написал единственный обработчик для всех, который находит нужный Датасет (DS) из него берёд нужное поле (NameField) и вырезает нужную букву
  • отредактировано 05:38
    DimaBr написал: »
    Дело не в функции, а в количестве Мемок в отчёте. Писать функцию в каждой Мемке - тоже извращение. Я, например, обозвал каждую Мемку вида DS_NameField_NumberChar и в событии OnBeforePrint написал единственный обработчик для всех, который находит нужный Датасет (DS) из него берёд нужное поле (NameField) и вырезает нужную букву
    Никаких извращений, все просто и прозрачно. А если таких форм несколько десятков. ВЫ наверное не делали форм налоговой отчетности, в квадратиках в основном реквизиты паредприятия и тянуть их для каждого поля из Dataseta- вот это извращение. Ну если хочется позаковырестей, то ради бога. Удачи.
  • отредактировано 05:38
    Повторяю ещё раз. Дело не в том откуда что тянуть, из переменных или из датасета, дело в количестве мемок и их расположении

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

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