Таблица с автоматическими выравниванием и переносами
Здравствуйте, Уважаемые!
Встала передо мною задачка перенести <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 загрузить не удалось)
Скриншот через раз отображается почему-то, вот ссылка на него.
Скриншот
блин, короче вот: www.imagepost.ru/images/r/rw/rrwrgpzjexplkstscwbodmpcdqxbtn.png
Подразумевается, что данная таблица в общем случае может быть размещена в любой части листа, т.к. на листе часто располагаются другие элементы отчёта. В режиме "текста" задача решаема. Но т.к. такой подход является не современным, требуется выполнить то же самое, но с графическими таблицами.
Собственно, требуется не конкретное решение, а опытный взгляд, как это лучше сделать. Может кто уже делал такое или для кого-то эта задача окажется совсем тривиальной, буду рад почерпнуть здравого смысла.
Встала передо мною задачка перенести <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 загрузить не удалось)
Скриншот через раз отображается почему-то, вот ссылка на него.
Скриншот
блин, короче вот: www.imagepost.ru/images/r/rw/rrwrgpzjexplkstscwbodmpcdqxbtn.png
Подразумевается, что данная таблица в общем случае может быть размещена в любой части листа, т.к. на листе часто располагаются другие элементы отчёта. В режиме "текста" задача решаема. Но т.к. такой подход является не современным, требуется выполнить то же самое, но с графическими таблицами.
Собственно, требуется не конкретное решение, а опытный взгляд, как это лучше сделать. Может кто уже делал такое или для кого-то эта задача окажется совсем тривиальной, буду рад почерпнуть здравого смысла.
Комментарии
Отмечу, что с помощью события 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.
Дилемма...
Ещё раз спасибо за ответ!