Подскажите пожалуйста , наиболее простой, автоматический способ распечатать содержимое окна , и желательно только его содержимое , в окне находиться таблица , вот её мне и надо распечатать .
Вариант вывода таблицы на печать через построение отчета с последующей печатью:
- перед построением отчета необходимо подготовить данные из таблицы либо как CSV-файл, либо как таблицу БД;
- дождаться завершения построения файла или таблицы БД и запустить построение отчета с последующей печатью.
Пример скриптов при использовании файла для печати таблицы из трех столбцов ("параметры" - текст в ячейках, "уставки" и "значения" - ячейки связаны с переменными).
После изменения параметров и нажатия кнопки "Пуск" начинается отсчет таймера, по завершении отсчета формируется отчет.
Скрипт "Изменилась переменная (control, связанная с кнопкой "Пуск")":
begin
if GetBit(control.AsInt, 0) then begin
Y7.Value := int(X7.Value); // таймер интервала X7 - уставка, Y7 - текущее значение
DTstart.Value := now; // метка времени начала
TextFileOpen('PrintTable.csv', '', fomRewrite, fcpANSI);
TextFileWriteLn(''); // файл с пустой строкой
TextFileClose;
end;
end.
Скрипт "Прошла секунда"
var i: integer;
aReport: TM_Report;
begin
if GetBit(control.AsInt, 0) then
if CompareDateTime(Y7.Value, X7.Value) = -1 then
Y7.Value := IncSecond(Y7.AsDateTime, 1) // счет таймера
else
if Table1.Tag = 0 then begin // Table1.Tag = 0 - запись файла
TextFileOpen('PrintTable.csv', '', fomRewrite, fcpANSI); // запись данных в CSV-файл
TextFileWriteLn(';;'); // заголовок (имена столбцов)
with Table1 as TM_Table do
for i := 1 to 6 do
TextFileWriteLn(UTF8ToString(GetCell(0,i).Text) + ';' + GetCell(1, i).Variable.AsStr + ';' + GetCell(2, i).Variable.AsStr);
TextFileWriteLn(' Интервал;' + TimeToStr(DTstart.AsDateTime) + ';' + TimeToStr(Now)); // время начала и конца процесса
TextFileClose;
Table1.Tag := 1;
end
else begin // Table1.Tag <> 0 - ожидание завершения записи файла и построение отчета
if TextFileOpen('PrintTable.csv', '', fomReset, fcpANSI) then
if TextFileReadLn = ';;' then begin // первая строка содержит заголовок, файл записан
aReport := ReportBuild('Print_1');
aReport.View(ClientName.AsStr); // осталось дождаться отчета для просмотра или печати (.Print)
Table1.Tag := 0; // сбросить флаг построения отчета
control.Value := 0; // завершено - отпустить кнопку и
end;
TextFileClose;
end;
end.
1. Скрипты исключительно для примера, в рабочем варианте необходимо контролировать "бесконечный" цикл ожидания записи файла (записи таблицы БД), если запись "пошла не так".
2. При использовании таблицы БД необходимо дополнительно включить в таблицу упорядочивающий столбец строк исходной таблицы (номер строки).
Проект во вложении позволяет выбрать создание и просмотр отчета для файла, таблицы или файла и таблицы.