Topic: Печать изображения

Здравствуйте. Есть, к примеру, данные на форме - собранные из нескольких таблиц и с возможностью редактирования (текст и изображения). Хотелось бы создать скриншот формы и отправить на печать. Есть ли такая возможность?
Фаст репорт не очень удобно использовать, разве что, помещать туда снимок формы.

Re: Печать изображения

Приветствую.



К сожалению такой возможности нет, разве что нажать на PrintScreen+Alt, чтобы скопировать в буфер обмена изображение формы и вставить его например в PaintBrush с последующей печатью.

Dmitry.

Re: Печать изображения

Ок, вполне работоспособно)

Re: Печать изображения

К сожалению, скриншот оказался непригоден к использованию - мелкие детали изображения теряются при печати. При использовании Фаст репорта столкнулся с некоторыми сложностями. Во первых - компонент Мемо (если он непривязан к базе данных) при включении в список компонентов участвующих в поиске при попытке создания отчета вызывает ошибку. Во вторых - не получается включить в компоненты участвующие в поиске компонент Image. Возможно ли скриптом очищать отображаемое изображение в компоненте Image? Благодарю за ответ.

Re: Печать изображения

collagen wrote:

Во первых - компонент Мемо (если он непривязан к базе данных) при включении в список компонентов участвующих в поиске при попытке создания отчета вызывает ошибку.

С какой целью компонент Memo включен в список, если он не привязан к БД?

collagen wrote:

Во вторых - не получается включить в компоненты участвующие в поиске компонент Image. Возможно ли скриптом очищать отображаемое изображение в компоненте Image? Благодарю за ответ.

Зачем компонент Image включать в список для поиска?


Очистить можно так

Form1.DBImage.Clear;
Dmitry.

Re: Печать изображения

Компоненты включаются в список поиска для отображения в Фастрепорте среди Variables.
В компонент Мемо скриптом отбираются данные из базы, чтобы иметь возможность их измененения (не внося изменения в базу). С компонентом Image та же ситуация - поиск файла на компьютере, вывод в компонент для превью и, хотелось бы, последующую передачу изображения в Фастрепорт.

frmTexZavd.Image1.Clear;

Ругается - Undeclared identifier: 'Clear'

Re: Печать изображения

Спасибо за найденную ошибку, поправил, теперь компонент Memo должен работать.
Также добавил метод Clear для Image.


Компонент Image не может быть предназначен для поиска файлов, также нет возможности передать его изображение в отчет, только непосредственно из базы данных.


Скачайте пожалуйста последнюю бета версию
https://www.dropbox.com/s/wutj7mnux7f3a … a.zip?dl=0

Dmitry.

8 (edited by collagen 2018-07-29 19:05:57)

Re: Печать изображения

1. Если добавить компонент в список компонентов участвующих в поиске, а потом открыть дизайнер Фастрепорта, в чистом отчете новый компонент появится среди Variables, а вот в сохраненном - нет.
2. Если изображение невозможно передать, тогда передадим путь к нему)  Не найдется ли пример скрипта для Фастрепорта по такому случаю?
UPD 1. Все передается если выбирать сразу шаблон отчета в MVD.
UPD 2. Для отображения изображения в обьекте Picture Фастрепорта достаточно вписать в параметр FileLink имя компонента из списка Variables содержащий путь к файлу и заключить его в квадратные скобки [Edit1]
Все прекрасно работает smile

Re: Печать изображения

В отчет Фастрепорта из Мемо не передается символ новой строки.

Re: Печать изображения

К сожалению переменные отчета не поддерживают перенос строк.

Dmitry.

Re: Печать изображения

Очень жаль. Все очень хорошо складывалось, и только из-за одного символа...  Возник вопрос, если добавить в список компонентов участвующих в поиске Грид - он работает только если в нем выделена строка, если выбор не сделан Грид никак себя не проявляет. Не лучше ли когда в Фастрепорт будут передаваться только те результаты, которые отсортированы и отображаются в Гриде?

Re: Печать изображения

collagen wrote:

Очень жаль. Все очень хорошо складывалось, и только из-за одного символа...

В принципе можно решить эту проблему скриптом
создаем переменную для скрипта, заменяя переводы строк символом /cr/lf

    s := Employees.Memo1.Text;
    s := ReplaceStr(s, #13#10, '/cr/lf');
    Employees.frxReport.Variables['My Variable 4'] := ''''+s+'''';

в отчете создаем событие для поля с данной переменной OnAfterData
заменяя символы /cr/lf обратно на переводы строк

procedure MyVariable4OnAfterData(Sender: TfrxComponent);
begin
       MyVariable4.Text := ReplaceStr(MyVariable4.Text, '/cr/lf', #13#10);  
end;

collagen wrote:

Возник вопрос, если добавить в список компонентов участвующих в поиске Грид - он работает только если в нем выделена строка, если выбор не сделан Грид никак себя не проявляет. Не лучше ли когда в Фастрепорт будут передаваться только те результаты, которые отсортированы и отображаются в Гриде?

Вы можете выделить все записи в гриде (нажав Ctrl+A), тогда все они попадут в отчет. Чтобы иметь возможность выделять несколько записей в гриде, установите свойство грида Additional > Options > goMultiSelect

Dmitry.

Re: Печать изображения

Если создавать переменные и присваивать значение скриптом - в отчете переменная Мемо получает символ переноса строки))) То есть, через скрипт есть строки, а почему через список компонентов участвующих в поиске строк нету? И еще момент - при присвоении значения сриптом переменной Мемо

Employees.frxReport.Variables['Memo1'] := ''''+s+'''';

в отчете в начале и в конце ее текста появляются апострофы

Re: Печать изображения

collagen wrote:

Если создавать переменные и присваивать значение скриптом - в отчете переменная Мемо получает символ переноса строки))) То есть, через скрипт есть строки, а почему через список компонентов участвующих в поиске строк нету? И еще момент - при присвоении значения сриптом переменной Мемо

Employees.frxReport.Variables['Memo1'] := ''''+s+'''';

в отчете в начале и в конце ее текста появляются апострофы

У себя я такого не наблюдал, приложите пожалуйста ваш проект, проверю  чем дело.

Dmitry.

Re: Печать изображения

collagen wrote:

И еще момент - при присвоении значения сриптом переменной Мемо

Employees.frxReport.Variables['Memo1'] := ''''+s+'''';

в отчете в начале и в конце ее текста появляются апострофы

ну так вам же и нужна строковая переменная, не? иначе FastReport не будет принимать значение передаваемой переменной как строку, а будет еще пытаться исчислять его

Re: Печать изображения

DriveSoft wrote:

У себя я такого не наблюдал, приложите пожалуйста ваш проект, проверю  чем дело.

В коде нету ничего такого...

//Заносим в Мемо нужные значения
var
    zzid, zzri, zzrc: integer;  //id заказа, индекс и количество утвержденных заказов
begin
    zzrc := SQLExecute ('SELECT COUNT (zamovlinfo) FROM Zamovlennya WHERE id_Klient = '+ Form1.ComboBox1.sqlValue+' AND zamovlvroboty = 1 AND zamovlvudano = 0'); 
    if zzrc > 0 then
    begin
        zzid := -1;
        for zzri := 1 to zzrc do 
        begin
            frmTexZavd.Memo2.Text := frmTexZavd.Memo2.Text + SQLExecute ('SELECT zamovlinfo FROM Zamovlennya WHERE id_Klient = '+ Form1.ComboBox1.sqlValue+' AND zamovlvroboty = 1 AND zamovlvudano = 0 AND id >' +inttostr (zzid)) + #13#10;
            zzid := SQLExecute ('SELECT id FROM Zamovlennya WHERE id_Klient = '+ Form1.ComboBox1.sqlValue+' AND zamovlvroboty = 1 AND zamovlvudano = 0 AND id >' +inttostr (zzid));
        end;
    end;
//Создаем переменные в Фастрепорте
procedure VariableToReport ();
var
    vrbl: string;  
begin
    Form1.frxReport.Variables.Clear;
    Form1.frxReport.Variables[' ' + 'Components'] := Null;
    vrbl := frmTexZavd.Memo1.Text;
    Form1.frxReport.Variables['Memo1'] := ''''+vrbl+'''';
    vrbl := frmTexZavd.Memo2.Text;
    Form1.frxReport.Variables['Memo2'] := ''''+vrbl+'''';
    vrbl := frmTexZavd.Memo3.Text;
    Form1.frxReport.Variables['Memo3'] := ''''+vrbl+'''';
end;

И в Фастрепорте получаем апострофы в полях Мемо. Причем если строка одна - их нету, а если несколько строк - они есть.
И еще тот же вопрос - символ переноса строки через список компонентов участвующих в поиске?

Post's attachments

Attachment icon report.jpg 41.83 kb, 181 downloads since 2018-08-09 

Re: Печать изображения

Мне необходим ваш проект, чтобы протестировать.

И еще тот же вопрос - символ переноса строки через список компонентов участвующих в поиске?

К сожалению не понял вопрос.
В принципе можно воспользоваться таким же методом. Заменять переносы строк в компоненте на событии OnClick и возвращать их обратно на событии OnAfterClick

Dmitry.

Re: Печать изображения

Приложил пример.

DriveSoft wrote:

К сожалению не понял вопрос.
В принципе можно воспользоваться таким же методом. Заменять переносы строк в компоненте на событии OnClick и возвращать их обратно на событии OnAfterClick

Символ переноса строки передается скриптом в очет (как в примере - без замен и возвращения), но не переносится через список компонентов участвующих в поиске! Почему?

Post's attachments

Attachment icon Тест.7z 3.35 kb, 335 downloads since 2018-08-10 

Re: Печать изображения

Программа автоматически удаляет переносы строк при использовании кнопки с действием "Отчет"

Dmitry.

Re: Печать изображения

DriveSoft wrote:

Программа автоматически удаляет переносы строк при использовании кнопки с действием "Отчет"

Так должно быть и по-другому не планируется?
И возможно ли убрать появляющиеся в отчете апострофы?

Re: Печать изображения

collagen wrote:
DriveSoft wrote:

Программа автоматически удаляет переносы строк при использовании кнопки с действием "Отчет"

Так должно быть и по-другому не планируется?
И возможно ли убрать появляющиеся в отчете апострофы?

К сожалению я не могу изменить это, так реализовано в отчетной системе FastReport


но можно скриптом убрать, пример

procedure Memo1OnAfterData(Sender: TfrxComponent);
var
       s: string;                                
begin
       s := Memo1.Text;                         
       if s <> '' then
       begin
               if s[1]=#39 then Delete(s, 1, 1);
               if s[Length(s)-2] = #39 then Delete(s, Length(s)-2, 1);
                Memo1.Text := s;                                  
       end;                 
end;
Dmitry.

Re: Печать изображения

Прописал скрипт - апострофы остались.

Post's attachments

Attachment icon Тест 2.7z 3.83 kb, 326 downloads since 2018-08-15 

23 (edited by m.prokhachev 2018-08-15 17:35:30)

Re: Печать изображения

collagen wrote:

Прописал скрипт - апострофы остались.

А скинь скриншот сформированного отчета, где эти апострофы имеются...

Если я правильно понимаю, то тебе тогда надо изменить процедуру передачи переменных в отчет, вместо:

procedure VariableToReport ();
var
    vrbl: string;  
begin
    Form1.frxReport.Variables.Clear;
    Form1.frxReport.Variables[' ' + 'Components'] := Null;
    vrbl := frmTexZavd.Memo1.Text;
    Form1.frxReport.Variables['Memo1'] := ''''+vrbl+'''';
    vrbl := frmTexZavd.Memo2.Text;
    Form1.frxReport.Variables['Memo2'] := ''''+vrbl+'''';
    vrbl := frmTexZavd.Memo3.Text;
    Form1.frxReport.Variables['Memo3'] := ''''+vrbl+'''';
end;

прописать так:

procedure VariableToReport ();
begin
    Form1.frxReport.Variables.Clear;
    Form1.frxReport.Variables[' ' + 'Components'] := Null;
    Form1.frxReport.Variables['Memo1'] := frmTexZavd.Memo1.Text;
    Form1.frxReport.Variables['Memo2'] := frmTexZavd.Memo2.Text;
    Form1.frxReport.Variables['Memo3'] := frmTexZavd.Memo3.Text;
end;

потому что по моему маленькому еще опыту конструкция вида

Form1.frxReport.Variables['Memo1'] := ''''+vrbl+'''';

нужна лишь в том случае, если переменная vrbl имеет символы, которые FastReport может принять как математические операции, например, - или / или * или +. Ну и я позволил себе избавиться от переменной vrbl, оптимизировав код, ибо она реально лишняя)

Re: Печать изображения

collagen wrote:

Прописал скрипт - апострофы остались.

Данный скрипт был предназначен для скриптов в отчете. Поправил ваш проект:

Post's attachments

Attachment icon Тест 2_fixed.zip 5.02 kb, 341 downloads since 2018-08-16 

Dmitry.

Re: Печать изображения

DriveSoft wrote:

Данный скрипт был предназначен для скриптов в отчете.

Извините, недогадался smile

m.prokhachev wrote:

Form1.frxReport.Variables['Memo1'] := frmTexZavd.Memo1.Text;

Если Мемо содержит одну строчку с буквами - появится сообщение об ошибке. С Edit-ами не работает - тоже сообщение об ошибке. С несколькими строками работает как надо smile
Всем спасибо за оказанную помощь.