|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Посоветуйте генератор отчетов
Задача программы: вывести на печать отчет состоящий из нескольких таблиц расположенных на листе определенным образом. Примерно так:
http://www.delphisources.ru/forum/at...d=134957638 5 Пробовал RaveReport и QuickReport. Quick подходит лучше т.к. нужно что-бы отчет находился в главном окне, а данные вводились из дополнительных окон. Но в Quick не нашел как можно добавлять элементы, кроме как полосами (Bands). Есть еще вопрос: данных в программе немного, но разные и должны сохраняться в одном файле, один день - один файл. Приспособил под это дело TIniFile, понимаю - реализация, мягко говоря, кривинькая, может посоветуете какой-нибудь вариант баз данных, самый простой. |
#2
|
||||
|
||||
То что вы нарисовали можно делать в WebBrowsere, Word, Excel. Генератор отчетов вам для такого вообще не нужен.
Что касается БД, то можно тогда и Акцесс под это дело приспособить. Сам Акцес для работы с БД из под Дельфи вам не потребуется. Кстати в Акцесе тоже есть встроеный генератор отчетов и неплохой надо вам сказать. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 08.10.2012 в 20:22. |
#3
|
||||
|
||||
Спасибо за ответ. Но негодится. На данный момент задача как раз и реализована в Excel, но в силу ряда обстоятельств это не особо удобно. Даже если использовать VBA это не решает всех проблемм, например, надо формировать еще один отчет для которого, наверное, подошла бы печать наклеек в Word. Все бы хорошо, если бы я был единственным пользователем, а для человека, который не знает как скопировать файл экспорт из Excel в Word задача неподьемная, даже если максимально автоматизировать процесс. Access то же не подходит - при той же степени удобсва, что и в Excel реализация на порядок сложнее - игра не стоит свеч. В общем - кроме как писать программу заточенную под данную задачу, другими вариантами замарачиваться не стоит.
|
#4
|
|||
|
|||
В принципе, все можно сделать и в QuickReport/FastReport.
Хотя, если данные гарантированно умещаются на одном листе, то можно все сделать и руками прямой отрисовкой на канве принтера. |
#5
|
||||
|
||||
Цитата:
Последний раз редактировалось Помидоркин, 08.10.2012 в 22:08. |
#6
|
|||
|
|||
Смотри в сторонц Printers.Printer.Canvas.
Под рукой примера нет, если тема не уползет, вечером дома помиотрю примерчик. |
#7
|
||||
|
||||
Цитата:
-------------------- На следующий день Пока ждал ответа попробовал разобраться сам. Пользавал Rectangle, TextRect и два цикла - один в другом. Для начала на канве формы. Таблицу рисует без проблем, а при попытке вывести текст получил жестокий вывих мозга. В итоге: TextOut выводит текст, TextRect - нет. В конце создал пустой проект - то же самое. Код:
procedure TForm1.FormDblClick(Sender: TObject); begin with Canvas do begin Brush.Color:= clWhite; Pen.Color:= clBlack; Font.Name:= 'Arial'; Font.Size:= 12; Font.Color:= clBlack; TextRect(Rect(50, 50, 200, 90), 5, 5, 'Проба'); TextOut(50, 150,'Проба'); end; Последний раз редактировалось Помидоркин, 10.10.2012 в 10:17. |
#8
|
||||
|
||||
Цитата:
Пробуй так: Код:
TextRect(Rect(50, 50, 200, 90), 50, 50, 'Проба'); |
#9
|
||||
|
||||
Код:
TextRect(Rect(50, 50, 200, 90), 50, 50, 'Проба'); Только логику разработчиков Дельфи понять не могу. TextRect(Rect, x, y, [Текст]) Если мы выводим текст ограниченный прямоугольником - Rect, то координаты x, y логичнее было бы задавать относительно Rect.LeftTop, а так получается: Код:
MyRect:= Rect(50, 50, 200, 90); TextRect(MyRect, MyRect.Left+6, MyRect.Top+6, 'Проба'); |
#10
|
||||
|
||||
Цитата:
API-функция ExtTextOut выводит на канву указанный текст в указанную позицию, при этом эта функция может опционально принимать в качестве параметра прямоугольник (RECT) которым при указании опции ETO_CLIPPED будет ограничиваться область вывода текста, если же эта опция не указана, то область вывода текста ничем не ограничивается. Правда к методу TCanvas.TextRect это не относится, так как он всегда указывает опцию ETO_CLIPPED (т.е. всегда с обрезкой). Вот и вся логика. И по моему даже наоборот было бы странно, если бы при включении опции ETO_CLIPPED нужно было бы подгонять координаты X и Y под прямоугольник. |