Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Печать текстовых данных / 25 сообщений из 26, страница 1 из 2
14.12.2017, 13:23
    #39569584
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
Есть некий набор текстовых данных, типа (поля записи, не БД):

Код: plaintext
1.
2.
3.
4.
5.
6.
Название
Автор
Дата
Короткий текст
Короткий текст
Длинный текст

Вопрос №1: как быстрее и проще всего организовать вывод этого дела на печать в формате:

Код: plaintext
1.
2.
3.
 Название Автор Дата  (слева - в центре - справа)
Короткий текст : Короткий текст
Длинный текст (с переносом по словам)

Не хочется связываться со всякими комбайнами, типа генераторов отчётов. Формат вывода предполагается фиксированный, без изменения в runtime.

Логика подсказывает загнать всё в TRichEdit и печатать его содержимое.
Вопрос №1 а : правильная ли мысль?
Вопрос №1 б : как сделать позиционирование "название автор дата" и чтобы "длинный текст" переносился по ширине листа в принтере?
...
Рейтинг: 0 / 0
14.12.2017, 13:27
    #39569586
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
авторВопрос №1: как быстрее и проще всего организовать вывод этого дела на печать в формате:
WriteLn
...
Рейтинг: 0 / 0
14.12.2017, 13:28
    #39569588
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
Самое простое решение - использовать генератор отчётов, он для этого и придуман
...
Рейтинг: 0 / 0
14.12.2017, 13:39
    #39569599
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
DimaBrСамое простое решение - использовать генератор отчётов, он для этого и придуман
1. Данные идут не из базы.
2. Приложение уровня "заметки на рабочем столе".
3. А какие у нас есть бесплатные генераторы отчётов?
...
Рейтинг: 0 / 0
14.12.2017, 13:52
    #39569610
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
alekcvp3. А какие у нас есть бесплатные генераторы отчётов?
В новых - FastReport. Правда у него в этой версии нет скриптов.
...
Рейтинг: 0 / 0
14.12.2017, 14:02
    #39569618
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
goldmi45alekcvp3. А какие у нас есть бесплатные генераторы отчётов?
В новых - FastReport. Правда у него в этой версии нет скриптов.
Скрипты мне нафиг не нужны, но в каком месте он бесплатный? Для XE2?
...
Рейтинг: 0 / 0
14.12.2017, 14:14
    #39569629
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
alekcvp,

Выкинь свой текст в формат HTML и показывай/печатай через браузер. Дешево и сердито + куча возможностей по форматированию текта - обычный текстовый шаблон для куска HTML документа (с подстановкой/заменой) + начало/конец документа.
...
Рейтинг: 0 / 0
14.12.2017, 15:24
    #39569676
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
DarkMasteralekcvp,
Выкинь свой текст в формат HTML и показывай/печатай через браузер. Дешево и сердито + куча возможностей по форматированию текта - обычный текстовый шаблон для куска HTML документа (с подстановкой/заменой) + начало/конец документа.
Мне надо чтобы по нажатию на кнопку это дело отправлялось на печать и никаких временных файлов не оставалось, это важно.
...
Рейтинг: 0 / 0
14.12.2017, 15:56
    #39569711
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
alekcvpDarkMasteralekcvp,
Выкинь свой текст в формат HTML и показывай/печатай через браузер. Дешево и сердито + куча возможностей по форматированию текта - обычный текстовый шаблон для куска HTML документа (с подстановкой/заменой) + начало/конец документа.
Мне надо чтобы по нажатию на кнопку это дело отправлялось на печать и никаких временных файлов не оставалось, это важно.

Убрать за собой сформированный файл (кстати в браузер текст можно и напрямую засунуть, без временного файла), вывести в WebBrowser на скрытой форме и дать ему команду Print религия не позволяет?
...
Рейтинг: 0 / 0
14.12.2017, 16:04
    #39569723
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
alekcvpDarkMasteralekcvp,
Выкинь свой текст в формат HTML и показывай/печатай через браузер. Дешево и сердито + куча возможностей по форматированию текта - обычный текстовый шаблон для куска HTML документа (с подстановкой/заменой) + начало/конец документа.
Мне надо чтобы по нажатию на кнопку это дело отправлялось на печать и никаких временных файлов не оставалось, это важно.
Поставь (при создании) файлу флажок "автоматически удалять, когда не нужен", и все.
...
Рейтинг: 0 / 0
14.12.2017, 17:09
    #39569796
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
В итоге выяснилось что RichEdit умеет сам нормально врапить текст, так что проблема была только в формировании первой строчки. Хотел засунуть в таблицу, но он не умеет в таблицы с % шириной (или я не нашел как). Буду искать WorkAround.
Временные файлы не устраивают никак, категорически, даже с DeleteOnClose.
...
Рейтинг: 0 / 0
14.12.2017, 17:14
    #39569804
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
alekcvpВ итоге выяснилось что RichEdit умеет сам нормально врапить текст, так что проблема была только в формировании первой строчки. Хотел засунуть в таблицу, но он не умеет в таблицы с % шириной (или я не нашел как). Буду искать WorkAround.
Временные файлы не устраивают никак, категорически, даже с DeleteOnClose.Используй THTMLViewer
Он умеет в HTML и печать, бесплатен

https://sourceforge.net/projects/htmlviewer/
...
Рейтинг: 0 / 0
14.12.2017, 17:30
    #39569827
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
alekcvpВременные файлы не устраивают никак, категорически, даже с DeleteOnClose.WebBrowser + PersistStream
...
Рейтинг: 0 / 0
14.12.2017, 17:37
    #39569844
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
alekcvp,

а TPrinter, TPrinter.Canvas не сгодится? Вроде задача довольно простая - строка из 3 элементов и несколько кусков текста, не так много кода нужно написать
...
Рейтинг: 0 / 0
14.12.2017, 17:37
    #39569845
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
s62,

не так много кода нужно написать - наверное. )
...
Рейтинг: 0 / 0
14.12.2017, 18:16
    #39569873
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
s62, нет, наверное не лучший вариант по трудоемкости. )
...
Рейтинг: 0 / 0
14.12.2017, 23:46
    #39570023
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
alekcvp,

вот такой лисапед давно был
...
Рейтинг: 0 / 0
15.12.2017, 03:52
    #39570069
fraks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
alekcvpgoldmi45пропущено...

В новых - FastReport. Правда у него в этой версии нет скриптов.
Скрипты мне нафиг не нужны, но в каком месте он бесплатный? Для XE2?

Бесплатный называется FreeReport, если я правильно помню. И представляет собой FasetReport какой-то лохматой версии.
Но работает.
...
Рейтинг: 0 / 0
15.12.2017, 09:59
    #39570135
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
Да THTMLViewer вариант, спасибо.
FreeReport и RyPrintService - они древние как мамонты, про юникод не знают ничего.
...
Рейтинг: 0 / 0
15.12.2017, 10:33
    #39570156
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
alekcvpgoldmi45пропущено...

В новых - FastReport. Правда у него в этой версии нет скриптов.
Скрипты мне нафиг не нужны, но в каком месте он бесплатный? Для XE2?

https://www.embarcadero.com/docs/Delphi-Feature-Matrix.pdf . 20 страница. Или поиск по "FastReport VCL"
...
Рейтинг: 0 / 0
15.12.2017, 10:34
    #39570157
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
goldmi45,

насчёт XE2 не знаю.
...
Рейтинг: 0 / 0
15.12.2017, 12:52
    #39570267
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
goldmi45goldmi45,

насчёт XE2 не знаю.
Судя по справке, FastReport добавили в Delphi XE.
...
Рейтинг: 0 / 0
15.12.2017, 13:16
    #39570282
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
goldmi45goldmi45,

насчёт XE2 не знаю.
http://edn.embarcadero.com/article/41616

Хотя, такой кастрированный. Даже без "Event handlers" - совсем-совсем плохо.
Впрочем, для нужд ТС должно хватить:
alekcvp...Формат вывода предполагается фиксированный, без изменения в runtime...
С другой стороны, ТС откровенно тру'сит:
alekcvp...Не хочется связываться со всякими комбайнами, типа генераторов отчётов...
...
Рейтинг: 0 / 0
15.12.2017, 15:31
    #39570386
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
Попробовал из интереса через TPrinter. )

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Printers;

type
  TForm1 = class(TForm)
    PrinterSetupDialog: TPrinterSetupDialog;
    Button1: TButton;
    PrintDialog: TPrintDialog;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FPrinter: TPrinter;
    procedure PrintData(const aTitle, anAuthor, aDate: string;
      const ShortText: string; const LongText: string);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  if PrintDialog.Execute() then
  PrintData(Edit1.Text, Edit2.Text, Edit3.Text, Memo1.Text, Memo2.Text);
end;

procedure TForm1.PrintData(const aTitle, anAuthor, aDate: string;
  const ShortText, LongText: string);
var Width, Height: integer;
    aRect: TRect;
begin
  FPrinter := Printer();
  Width := FPrinter.PageWidth;
  Height := FPrinter.PageHeight;
  FPrinter.BeginDoc;
  try
    //слева, справа поля 20, сверху 40
    FPrinter.Canvas.TextOut(20, 40, aTitle);
    FPrinter.Canvas.TextOut(Width div 2 - (FPrinter.Canvas.TextWidth(anAuthor) div 2), 40, anAuthor);
    FPrinter.Canvas.TextOut(Width - FPrinter.Canvas.TextWidth(aDate) - 20, 40, aDate);
    aRect := Rect(20, 200, Width - 20, 260);
    DrawText(FPrinter.Canvas.Handle, PChar(ShortText), -1, aRect, DT_LEFT or DT_TOP or DT_WORDBREAK or DT_CALCRECT);  //вычисляет нижнюю границу прямоугольника для заданного текста и изменяет aRect.Bottom
    DrawText(FPrinter.Canvas.Handle, PChar(ShortText), -1, aRect, DT_LEFT or DT_TOP or DT_WORDBREAK);
    aRect := Rect(20, aRect.Bottom + 100, Width - 20, aRect.Bottom + 300);
    DrawText(FPrinter.Canvas.Handle, PChar(LongText), -1, aRect, DT_LEFT or DT_TOP or DT_WORDBREAK or DT_CALCRECT);
    DrawText(FPrinter.Canvas.Handle, PChar(LongText), -1, aRect, DT_LEFT or DT_TOP or DT_WORDBREAK);
  finally
    FPrinter.EndDoc;
  end;
end;



Результат (плохо телефоном снял):
Видно, что нужно подрегулировать размеры, видимо как-то связать физические размеры листа и пиксели. Но логика задачи в общем выполнена - три атрибута напечатаны в одной строке слева, посередине и справа, потом короткий текст, потом - длинный. Если только всё это не уместится на одной странице, тогда сложнее.
Заодно, исходные данные в окошке программы:
...
Рейтинг: 0 / 0
15.12.2017, 15:32
    #39570387
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать текстовых данных
только одно вложение прикрепилось, вот (плохая) фотка напечатанного.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Печать текстовых данных / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]