Тема: TPrinter
Показать сообщение отдельно
  #1  
Старый 25.02.2013, 16:56
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию TPrinter

Добрый день. Появилась неоюходимость вывода на принтер...
Поискал в нете код взыл такой:
Код:
procedure TForm1.Button2Click(Sender: TObject);
const
  TOTAL_PAGES = 4;      // Ñêîëüêî ñòðàíèö ïå÷àòàòü
 var
   printDialog    : TPrintDialog;
   page, startPage, endPage : Integer;
begin
 // Ñîçäàíèå äèàëîãà âûáîðà ïðèíòåðà
   printDialog := TPrintDialog.Create(Form1);

  // Óñòàíîâêà îïöèé äèàëîãà ïå÷àòè
  printDialog.MinPage := 1;
  printDialog.MaxPage := TOTAL_PAGES;
  printDialog.ToPage  := TOTAL_PAGES;
  printDialog.Options := [poPageNums];

  // Åñëè ïîëüçîâàòåëü âûáðàë ïðèíòåð (èëè çíà÷åíèå ïî óìîë÷àíèþ), òî ïå÷àòàåì!
   if printDialog.Execute then
   begin
    // Èñïîëüçóéòå ôóíêöèþ Printer, ÷òîáû ïîëó÷èòü äîñòóï ê ãëîáàëüíîìó îáúåêòó TPrinter.
    // Set to landscape orientation
     Printer.Orientation := poLandscape;

    // Óñòàíîâèòå çàãîëîâîê printjob - êàê îíî ïîÿâëÿåòñÿ â ìåíåäæåðå çàäàíèÿ ïî âûâîäó íà ïå÷àòü
     Printer.Title := 'Test print for Delphi';

    // Óñòàíàâëèâàåì ÷èñëî êîïèé äëÿ ïå÷àòè êàæäîé ñòðàíèöû
     Printer.Copies := printDialog.Copies;

    // Íà÷àëî ïå÷àòè
     Printer.BeginDoc;

    // Ïîëüçîâàòåëü âûáðàë äèàïàçîí ñòðàíèö?
     if printDialog.PrintRange = prPageNums then
     begin
       startPage := printDialog.FromPage;
       endPage   := printDialog.ToPage;
     end
    else // Âñå ñòðàíèöû
     begin
       startPage := 1;
       endPage   := TOTAL_PAGES;
     end;

    // Óñòàíîâêà íîìåðà íà÷àëüíîé ñòðàíèöû
     page := startPage;

    // Ïðîäîëæàåì ïå÷àòàòü ïîêà âñ¸ OK
     while (not Printer.Aborted) and Printer.Printing do
     begin
      // Ïèøåì íîìåð ñòðàíèöû
       Printer.Canvas.Font.Color := clBlue;
       Printer.Canvas.TextOut(40,  20, 'Page number = '+IntToStr(page));

      // Óâåëè÷èâàåì íîìåð ñòðàíèöû
       Inc(page);

      // Òåïåðü íà÷èíàåì íîâóþ ñòðàíèöó - åñëè îíà íå ïîñëåäíÿÿ
       if (page <= endpage) and (not printer.aborted)
       then Beep(); //Printer.NewPage;
     end;

    // Êîíåö ïå÷àòè
     Printer.EndDoc;
   end;
end;
Так он на принет после первого запуска напечатал что
, ошибка таймаут. еще пробывал - программа тупо зависает а на принтер вообще ничего не выводится...
Вопрос, что неправильного в показаном коде и как с этим бороться?
И еще небольшой вопрос: как узнать (получить) максимальную ширину окна программы?
Ответить с цитированием