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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Хотя, такой кастрированный. Даже без "Event handlers" - совсем-совсем плохо.
Впрочем, для нужд ТС должно хватить:
alekcvp...Формат вывода предполагается фиксированный, без изменения в runtime...
С другой стороны, ТС откровенно тру'сит:
alekcvp...Не хочется связываться со всякими комбайнами, типа генераторов отчётов...
...
Рейтинг: 0 / 0
Печать текстовых данных
    #39570386
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
Печать текстовых данных
    #39570387
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только одно вложение прикрепилось, вот (плохая) фотка напечатанного.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Печать текстовых данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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