Проблема с принтер диалогом

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Проблема с принтер диалогом

Сообщение VirtUX » 06.01.2009 10:04:21

Attid писал(а):на других виджетах пробывал ?

В смысле другое GUI (пытался под GTK2) или чтот вместо TPrinterDlg пользовать (и без использования его тотже результат)? MSE чтот не прижился у меня...
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Проблема с принтер диалогом

Сообщение Attid » 06.01.2009 13:26:27

MSE это не виджет =)
у мну дома принтера нет. так что не проверю. после праздников попробую глянуть.
если раньше ошибки не было поптом появилась, то можешь сразу в трекер, если только пробуешь тогда надо будет смотреть.


пока писал вспомнил что у меня виртуальный есть.

1, пример кода ужасный как я должен догадаться что такое LBText TabS
также можно было бы указать что надо добавить юниты PrintersDlgs, Printers
и не ужеле трудно было добавить кусок кода с переменными
var PDLG : TPrintDialog;
var X,Y,iFor : integer;

2, у меня гтк2 сразу падает с ошибкой и даже не отрабатывает PDLG.Execute
в гтк отработало 10 раз подряд. значит делай пример и в трекер или смотри что накосячили в TPrintDialog
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Проблема с принтер диалогом

Сообщение VirtUX » 06.01.2009 13:45:38

и в GTK, и в GTK2 одинаковый результат: один раз печатает и баста. Без использования TPrinterDialog (только TPrinter) тоже самое. Мот чтот не отрабатывается (а должно) после Printer.EndDoc?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Проблема с принтер диалогом

Сообщение VirtUX » 11.01.2009 17:46:02

Вот пример:
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, PrintersDlgs, Printers;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    PrintDialog1: TPrintDialog;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  pdlg: PrintersDlgs.TPrintDialog;
  x, y, i: integer;
begin
  //pdlg := PrintersDlgs.TPrintDialog.Create(nil);
  //if pdlg.Execute then
  if PrintDialog1.Execute then
    begin
      x := 0;
      y := 0;
      Printer.BeginDoc;
      for i := 0 to pred(ListBox1.Items.Count) do
        begin
          printer.Canvas.TextOut(x, y, ListBox1.Items[i]);
          inc(y, printer.Canvas.GetTextHeight(ListBox1.Items[i]));
        end;
      Printer.EndDoc;
    end;
  //pdlg.Free;
end;

initialization
  {$I unit1.lrs}

end.   


Результат: первый раз печатает; остальные разы прогоняет чистую страницу.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Проблема с принтер диалогом

Сообщение Attid » 13.01.2009 13:16:50

переходи на МСЕ там печать вылизанна. по примеру повторяю на моей убунте работает нормально.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Проблема с принтер диалогом

Сообщение alexs » 13.01.2009 22:46:17

Лазрепорт тоже уже ничего работает.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Проблема с принтер диалогом

Сообщение Attid » 14.01.2009 10:11:56

alexs писал(а):Лазрепорт тоже уже ничего работает.

и в любом последнем линукс дистре из коробки не будет проблем с кодировками\шрифтами ?
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Проблема с принтер диалогом

Сообщение VirtUX » 14.01.2009 15:36:14

Облазил, по моему, весь сайт fastreport-а и ненашел демо-примеров, про которые говорится в документации по freereport. Помогите разобраться - как вывести через LazReport на печать простой TStrings или array of string используя TfrUserDataSet?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Проблема с принтер диалогом

Сообщение Attid » 14.01.2009 18:11:24

VirtUX писал(а):весь сайт fastreport-а и ненашел демо-примеров

и не найдешь максимум можешь посмотреть доку на freereport а его уже портировали на лазарус
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Проблема с принтер диалогом

Сообщение GrayEddy » 14.01.2009 18:24:40

Есть примеры, однако :)
%Lazarus\Components\LazReport\samples

Хороший пример для иллюстрации - это папка stringgrid.
Если и надо переделать, то это делается легко.
GrayEddy
постоялец
 
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56

Re: Проблема с принтер диалогом

Сообщение alexs » 14.01.2009 20:24:51

Attid писал(а):и в любом последнем линукс дистре из коробки не будет проблем с кодировками\шрифтами ?

На QT виджете - вобще всё в шолоаде печатается. На GTK2 - надо немного допилить - вот патчик:
Код: Выделить всё
Index: lr_class.pas
===================================================================
--- lr_class.pas   (revision 16634)
+++ lr_class.pas   (working copy)
@@ -2559,13 +2559,13 @@
         {$IFDEF DebugLR}
         DebugLn('2 Canvas.Font.Size=%d TextWidth=%d',[Canvas.Font.Size,Canvas.TextWidth(St)]);
         {$ENDIF}
-        while (Canvas.TextWidth(St) > nw) and (Canvas.Font.Size>1) do
+(*        while (Canvas.TextWidth(St) > nw) and (Canvas.Font.Size>1) do
         begin
           Canvas.Font.Size := Canvas.Font.Size-1;
           {$IFDEF DebugLR}
           DebugLn('Rescal font %d',[Canvas.Font.Size]);
           {$ENDIF}
-        end;
+        end;  *)
         th := -Canvas.Font.Height+Round(LineSpacing * ScaleY);
         {$IFDEF DebugLR}
         DebugLn('Th=%d Canvas.TextHeight(H)=%d',[Th,Canvas.TextHeight('H')]);


Может его кто закомитит? правдо это не кардинальное решение - там всёж надо PostScriptCanvas править насчёт расчёта ширины русских символов при печати. Но с этим патчем - всё работает.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Проблема с принтер диалогом

Сообщение Павел Ишенин » 16.01.2009 22:43:02

Jesus попросил написать ему лично.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Проблема с принтер диалогом

Сообщение Linus » 01.06.2013 20:18:11

Просьба модератору, удалите это сообщение.
Linus
новенький
 
Сообщения: 47
Зарегистрирован: 11.01.2013 22:01:28

Re: Проблема с принтер диалогом

Сообщение waydm » 11.06.2013 08:31:21

Сообщение было написано по ошибке, извиняюсь
waydm
незнакомец
 
Сообщения: 3
Зарегистрирован: 27.04.2013 14:03:18
Откуда: Саратов

Re: Проблема с принтер диалогом

Сообщение Лекс Айрин » 07.10.2013 17:21:26

Не знаю, в ту ли тему спросил...

при печати повторяет крайнюю строчку, превращая ее первый символ в непечатный.
Код: Выделить всё
procedure TForm1.prnButtonClick(Sender: TObject);
  Var
      PRNLine, i:integer;

  Begin
    PRNLine:=200;  // 200 это величина поля
    if PrintDialog1.Execute then
      Begin



           Printer.BeginDoc;
           Printer.Canvas.Font:= Form1.MainEditor.Font;
           For i:=0 to Form1.MainEditor.Lines.Count do
               Begin
                    PRNLine:= PRNLine+Printer.Canvas.Font.Size*10;
                    if  PRNLine+200 >= Printer.PageHeight - Printer.Canvas.Font.Size*10 then 
                      Begin
                           Printer.NewPage;
                           PRNLine:=200;
                      end
                    else begin end;
                    Printer.Canvas.TextOut( 200, PRNLine, Form1.MainEditor.Lines[i]);   
               end;
      end;
      Printer.EndDoc;

  end;               

Конечно, пример сыроват...

Печатаю на один из двух виртуальных pdf-принтеров. (foxit / doPDF). От языка не зависит.

windows XP SP2
Lazarus 1.3
FPC 2.6.2
SVN 42995

______________

Вопрос решен. Просто неверно задано условие. Непонятно, правда, почему программа не вываливалась в ошибку...

Надо For i:=0 to Form1.MainEditor.Lines.Count-1 do
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 222

Рейтинг@Mail.ru