Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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;
Так он на принет после первого запуска напечатал что
, ошибка таймаут. еще пробывал - программа тупо зависает а на принтер вообще ничего не выводится...
Вопрос, что неправильного в показаном коде и как с этим бороться?
И еще небольшой вопрос: как узнать (получить) максимальную ширину окна программы?
Ответить с цитированием
  #2  
Старый 26.02.2013, 09:08
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию

Всем спасибо за поддержку. Оба вопроса решил сам, но возник новый вопрос: на форме мне надо показать таблицу с разным фоном ячеек и потом эту таблицу надо будет отправить на принтер. Как это сделать?
Ответить с цитированием
  #3  
Старый 26.02.2013, 09:15
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

вариантов много...
1. написать процедуру:
Код:
DrawTable(ACanvas: TCanvas);
в ней рисовать таблицу с разным фоном ячеек.
при выводе на форму передавать Canvas формы, при выводе на принтер передавать Canvas принтера.
2. использовать TDrawGrid. в нем раскришивать ячейки вручную. использовать метод Print формы для вывода на принтер.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
lostbananan (26.02.2013)
  #4  
Старый 26.02.2013, 09:48
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию

И еще вопрос все объекты мне нужно создавать на лету (не в режиме редактирования). Никогода раньше я такого не делал. Как это делается?
Ответить с цитированием
  #5  
Старый 26.02.2013, 10:27
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

можно и в desing-time их создать. в run-time только задать нужные размер/позицию\видимость и др. свойства.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 26.02.2013, 23:13
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию

Реьята! Пожалуйста - давайте примеры кода..
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:05.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025