Таблица с автоматическими выравниванием и переносами

отредактировано May 2011 Раздел: FastReport 4.0
Здравствуйте, Уважаемые!

Встала передо мною задачка перенести <strike>быдл</strike>собственноручно писаный класс текстовых таблиц в классы графических таблиц FastReport.
Имеется функция, на вход которой поступают 6 2d-массивов текстовых данных, размеры области в символах и текущее смещение по вертикали от верхней границы листа.
По этим данным функция выводит в текстовый поток таблицу, представляющую объединение этих 6 массивов (m[2][3]), в кт. m[0][0|1|2] - это заголовки таблицы, требующие автоматического повторения при переносах. m[1][1] - таблица, которую требуется разбивать программно (автоматически) по столбцам, дабы уместить её на экране так, чтобы при фиксированных числе колонок и их ширине не оставалось лишнего места на листе. m[1][0] и m[1][2] - таблицы, повторение которых требуется при каждом разбиении m[1][1].

Привожу скриншот в качестве примера такой таблицы. (на стороннем ресурсе, на www.fast-report.com загрузить не удалось)

rrwrgpzjexplkstscwbodmpcdqxbtn.png
Скриншот через раз отображается почему-то, вот ссылка на него.
Скриншот
блин, короче вот: www.imagepost.ru/images/r/rw/rrwrgpzjexplkstscwbodmpcdqxbtn.png :)

Подразумевается, что данная таблица в общем случае может быть размещена в любой части листа, т.к. на листе часто располагаются другие элементы отчёта. В режиме "текста" задача решаема. Но т.к. такой подход является не современным, требуется выполнить то же самое, но с графическими таблицами.

Собственно, требуется не конкретное решение, а опытный взгляд, как это лучше сделать. Может кто уже делал такое или для кого-то эта задача окажется совсем тривиальной, буду рад почерпнуть здравого смысла. :)

Комментарии

  • xlaalaaxlaalaa Минск
    отредактировано 01:18
    Из вашего пояснения сложно понять в чем именно состоит постановка задачи.

    Отмечу, что с помощью события OnManualBuild и стандартных компонент в скрипте отчета вы можете нарисовать практически любой отчет самой экзотической формы.

    Используйте свойства Engine.CurX Engine.CurY чтобы задать координаты вывода. Функцию Engine.ShowBand чтобы вывести порцию данных в отчет. Engine.PageHeight Engine.PageWidth Engine.FreeSpace чтобы подогнать координаты под размер станиц. И т.д. поиском по форуму найдете примеры и обсуждения OnManualBuild.

  • отредактировано May 2011
    xlaalaa написал: »
    Из вашего пояснения сложно понять в чем именно состоит постановка задачи.

    Отмечу, что с помощью события OnManualBuild и стандартных компонент в скрипте отчета вы можете нарисовать практически любой отчет самой экзотической формы.

    Используйте свойства Engine.CurX Engine.CurY чтобы задать координаты вывода. Функцию Engine.ShowBand чтобы вывести порцию данных в отчет. Engine.PageHeight Engine.PageWidth Engine.FreeSpace чтобы подогнать координаты под размер станиц. И т.д. поиском по форуму найдете примеры и обсуждения OnManualBuild.
    Прежде всего, большое спасибо за ответ и внимание к моей проблеме.

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

    Прочёл документацию по OnManualBuild, которую сумел найти, но в ней нет ничего отностельно автоматического разбиения таблиц. Основная проблема заключается именно в этом.

    Дело в том, что сами шаблоны протоколов редактируются пользователем программы и у заказчика появляются всё новые требования к ним. И количество таких протоколов со временем только увеличивается, программировать каждую таблицу по-отдельности не представляется возможным, требуется готовый класс, для которого в шаблоне можно задавать стили форматирования.

    Пришло в голову одно решение через LaTeX-овый макрос longtable, он очень хорошо задокументирован. В качестве шаблонов возникла идея использовать TeX с возможностью предварительного редактирования в каком-нибудь LyX в режиме WYSIWYG и последующего редактирования в режиме общепринятых стандартов синтаксиса LaTeX по необходимости и в случае появления более жёстких требований по форматированию без необходимости переработки программы. Для форматирования появилась мысль использовать TeX-скую преамбулу подобно CSS для HTML.
    С одной стороны, TeX - это соответствие ГОСТ-ам, кроссплатформенность(планируется плавный переход на Linux) и возможность задавать абсолютно всё, что придёт в голову заказчику, с другой стороны, мне придётся сейчас проделывать огромную работу по переделке программы, т.к. в данный момент она в большинстве своём использует для печати графиков и таблиц именно FastReport.

    Дилемма...

    Ещё раз спасибо за ответ!

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

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