Fastreport 4.x и Fastreport 2.x не отправляют задания на принтер в среде Linux+wine
FastReport 2.X и FastReport 4.X не отправляют задания на принтер (CUPS) в среде Linux+Wine.
Сам Delphi7 IDE, запущенный в той же среде, печатает нормально (вот как пришлось изгаляться что бы протестировать .
Но если в метод onbtnClick кнопки "Печать"
формы fr_View.pas добавить вызов метода "Execute" стандартного (для Delphi7) компонента TPrintDialog
(Printdialog1.Execute), то FastReport начинает работать нормально.
Думаю что он будет работать если вызвать этот метод откуда угодно, не обязательно из этой формы
Заставить печатать FastReport можно еще и вызывая метод TPrinterSetupDialog.Execute
Если нажимаешь в этом диалоге OK FastReport печатает нормально.
Я протрасировал и пересмотрел все связанные с этим переменные и данные, пришел к выводу что все дело в
в функции TDialogFunc = function(var DialogData): Bool stdcall;
Что то в ней присходит после нажатия на кнопку OK
Проблема кроется где то в классе TPrinter.
Пример кода, который не работает:
Printer.Index := 0;
Printer.Title := 'Test';
Printer.BeginDoc;
Printer.NewPage;
Printer.Canvas.TexOut(200,200,'Бла-Бла-Бла');
Printer.EndDoc;
Если в него добавить вызов диалога будет работать.
PrinterSetupDialog := TPrinterSetupDialog.Create(nil);
if PrinterSetupDialog.Execute then
begin
Printer.Index := 0;
Printer.Title := 'Test';
Printer.BeginDoc;
Printer.NewPage;
Printer.Canvas.TexOut(200,200,'Бла-Бла-Бла');
Printer.EndDoc;
end
else
begin
ShowMessage('Если нажали "Отмена" не печатает')
end;
Что и где исправить что бы FastReport печатал?
Простая замена диалога печати на TPrintDialog не поможет, так как часто используется функция PrintPreparedReport, без участия пользователя
Сам Delphi7 IDE, запущенный в той же среде, печатает нормально (вот как пришлось изгаляться что бы протестировать .
Но если в метод onbtnClick кнопки "Печать"
формы fr_View.pas добавить вызов метода "Execute" стандартного (для Delphi7) компонента TPrintDialog
(Printdialog1.Execute), то FastReport начинает работать нормально.
Думаю что он будет работать если вызвать этот метод откуда угодно, не обязательно из этой формы
Заставить печатать FastReport можно еще и вызывая метод TPrinterSetupDialog.Execute
Если нажимаешь в этом диалоге OK FastReport печатает нормально.
Я протрасировал и пересмотрел все связанные с этим переменные и данные, пришел к выводу что все дело в
в функции TDialogFunc = function(var DialogData): Bool stdcall;
Что то в ней присходит после нажатия на кнопку OK
Проблема кроется где то в классе TPrinter.
Пример кода, который не работает:
Printer.Index := 0;
Printer.Title := 'Test';
Printer.BeginDoc;
Printer.NewPage;
Printer.Canvas.TexOut(200,200,'Бла-Бла-Бла');
Printer.EndDoc;
Если в него добавить вызов диалога будет работать.
PrinterSetupDialog := TPrinterSetupDialog.Create(nil);
if PrinterSetupDialog.Execute then
begin
Printer.Index := 0;
Printer.Title := 'Test';
Printer.BeginDoc;
Printer.NewPage;
Printer.Canvas.TexOut(200,200,'Бла-Бла-Бла');
Printer.EndDoc;
end
else
begin
ShowMessage('Если нажали "Отмена" не печатает')
end;
Что и где исправить что бы FastReport печатал?
Простая замена диалога печати на TPrintDialog не поможет, так как часто используется функция PrintPreparedReport, без участия пользователя