Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.10.2012, 06:43
Аватар для Помидоркин
Помидоркин Помидоркин вне форума
Начинающий
 
Регистрация: 07.10.2012
Адрес: Дедовск
Сообщения: 110
Версия Delphi: Rio 10.3
Репутация: 10
По умолчанию Посоветуйте генератор отчетов

Задача программы: вывести на печать отчет состоящий из нескольких таблиц расположенных на листе определенным образом. Примерно так:
http://www.delphisources.ru/forum/at...d=134957638 5
Пробовал RaveReport и QuickReport. Quick подходит лучше т.к. нужно что-бы отчет находился в главном окне, а данные вводились из дополнительных окон. Но в Quick не нашел как можно добавлять элементы, кроме как полосами (Bands).
Есть еще вопрос: данных в программе немного, но разные и должны сохраняться в одном файле, один день - один файл. Приспособил под это дело TIniFile, понимаю - реализация, мягко говоря, кривинькая, может посоветуете какой-нибудь вариант баз данных, самый простой.
Изображения
Тип файла: gif Безымянный.gif (4.7 Кбайт, 29 просмотров)
Ответить с цитированием
  #2  
Старый 08.10.2012, 20:17
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

То что вы нарисовали можно делать в WebBrowsere, Word, Excel. Генератор отчетов вам для такого вообще не нужен.
Что касается БД, то можно тогда и Акцесс под это дело приспособить. Сам Акцес для работы с БД из под Дельфи вам не потребуется.
Кстати в Акцесе тоже есть встроеный генератор отчетов и неплохой надо вам сказать.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 08.10.2012 в 20:22.
Ответить с цитированием
  #3  
Старый 08.10.2012, 20:59
Аватар для Помидоркин
Помидоркин Помидоркин вне форума
Начинающий
 
Регистрация: 07.10.2012
Адрес: Дедовск
Сообщения: 110
Версия Delphi: Rio 10.3
Репутация: 10
По умолчанию

Спасибо за ответ. Но негодится. На данный момент задача как раз и реализована в Excel, но в силу ряда обстоятельств это не особо удобно. Даже если использовать VBA это не решает всех проблемм, например, надо формировать еще один отчет для которого, наверное, подошла бы печать наклеек в Word. Все бы хорошо, если бы я был единственным пользователем, а для человека, который не знает как скопировать файл экспорт из Excel в Word задача неподьемная, даже если максимально автоматизировать процесс. Access то же не подходит - при той же степени удобсва, что и в Excel реализация на порядок сложнее - игра не стоит свеч. В общем - кроме как писать программу заточенную под данную задачу, другими вариантами замарачиваться не стоит.
Ответить с цитированием
  #4  
Старый 08.10.2012, 21:22
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

В принципе, все можно сделать и в QuickReport/FastReport.
Хотя, если данные гарантированно умещаются на одном листе, то можно все сделать и руками прямой отрисовкой на канве принтера.
Ответить с цитированием
  #5  
Старый 08.10.2012, 22:05
Аватар для Помидоркин
Помидоркин Помидоркин вне форума
Начинающий
 
Регистрация: 07.10.2012
Адрес: Дедовск
Сообщения: 110
Версия Delphi: Rio 10.3
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
В принципе, все можно сделать и в QuickReport/FastReport.
Хотя, если данные гарантированно умещаются на одном листе, то можно все сделать и руками прямой отрисовкой на канве принтера.
Можно подробней? Может быть какой то пример? У меня смутное ощущение, что это то что надо.

Последний раз редактировалось Помидоркин, 08.10.2012 в 22:08.
Ответить с цитированием
  #6  
Старый 09.10.2012, 00:02
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Смотри в сторонц Printers.Printer.Canvas.
Под рукой примера нет, если тема не уползет, вечером дома помиотрю примерчик.
Ответить с цитированием
  #7  
Старый 09.10.2012, 09:17
Аватар для Помидоркин
Помидоркин Помидоркин вне форума
Начинающий
 
Регистрация: 07.10.2012
Адрес: Дедовск
Сообщения: 110
Версия Delphi: Rio 10.3
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
если тема не уползет, вечером дома помиотрю примерчик.
Спасибо, подожду
--------------------
На следующий день
Пока ждал ответа попробовал разобраться сам. Пользавал 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;
TextRect выводит только белый прямоугольник, TextOut все делает как должен - черный текст в белом прямоугольнике.

Последний раз редактировалось Помидоркин, 10.10.2012 в 10:17.
Ответить с цитированием
  #8  
Старый 10.10.2012, 10:25
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Помидоркин
В итоге: 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;
TextRect выводит только белый прямоугольник, TextOut все делает как должен - черный текст в белом прямоугольнике.
TextRect выводит текст в ограничивающем прямоугольнике, а ты указал координаты вывода текста вне этого прямоугольника.
Пробуй так:
Код:
TextRect(Rect(50, 50, 200, 90), 50, 50, 'Проба');
Ответить с цитированием
  #9  
Старый 10.10.2012, 12:18
Аватар для Помидоркин
Помидоркин Помидоркин вне форума
Начинающий
 
Регистрация: 07.10.2012
Адрес: Дедовск
Сообщения: 110
Версия Delphi: Rio 10.3
Репутация: 10
По умолчанию

Код:
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  
Старый 10.10.2012, 14:19
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Помидоркин
[code]Только логику разработчиков Дельфи понять не могу.
TextRect(Rect, x, y, [Текст])
Если мы выводим текст ограниченный прямоугольником - Rect, то координаты x, y логичнее было бы задавать относительно Rect.LeftTop, а так получается:
Код:
  MyRect:= Rect(50, 50, 200, 90);
  TextRect(MyRect, MyRect.Left+6, MyRect.Top+6, 'Проба');
Тут скорее логика не разработчиков Дельфи, а разработчиков Windows, так метод TCanvas.TextRect использует API-функцию ExtTextOut.
API-функция ExtTextOut выводит на канву указанный текст в указанную позицию, при этом эта функция может опционально принимать в качестве параметра прямоугольник (RECT) которым при указании опции ETO_CLIPPED будет ограничиваться область вывода текста, если же эта опция не указана, то область вывода текста ничем не ограничивается. Правда к методу TCanvas.TextRect это не относится, так как он всегда указывает опцию ETO_CLIPPED (т.е. всегда с обрезкой).
Вот и вся логика.

И по моему даже наоборот было бы странно, если бы при включении опции ETO_CLIPPED нужно было бы подгонять координаты X и Y под прямоугольник.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter