![]() |
|
#1
|
|||
|
|||
![]() Добрый день. Появилась неоюходимость вывода на принтер...
Поискал в нете код взыл такой: Код:
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
|
|||
|
|||
![]() Всем спасибо за поддержку. Оба вопроса решил сам, но возник новый вопрос: на форме мне надо показать таблицу с разным фоном ячеек и потом эту таблицу надо будет отправить на принтер. Как это сделать?
|
#3
|
||||
|
||||
![]() вариантов много...
1. написать процедуру: Код:
DrawTable(ACanvas: TCanvas); при выводе на форму передавать Canvas формы, при выводе на принтер передавать Canvas принтера. 2. использовать TDrawGrid. в нем раскришивать ячейки вручную. использовать метод Print формы для вывода на принтер. Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
lostbananan (26.02.2013)
|
#4
|
|||
|
|||
![]() И еще вопрос все объекты мне нужно создавать на лету (не в режиме редактирования). Никогода раньше я такого не делал. Как это делается?
|
#5
|
||||
|
||||
![]() можно и в desing-time их создать. в run-time только задать нужные размер/позицию\видимость и др. свойства.
Пишу программы за еду. __________________ |
#6
|
|||
|
|||
![]() Реьята! Пожалуйста - давайте примеры кода..
|
#7
|
||||
|
||||
![]() Я бы на твоем месте не стал использовать TPrinter по причине того, что у тебя не хватит знаний для обеспечения работы приложения с этим объектом под Win7. Поищи что-нить другое.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#8
|
|||
|
|||
![]() Доброе утро! Давненько я тут не был (решал другие задачи). Так вот, по текущей задаче:
Надо реализовать ччто-то типа: Есть 17 ячеек, в них текстовое значение от 0 до 100, в зависимости от значения - цвет "ячейки" меняется, плюс то что осталось до 100 всегда одним цветом (например, светло серым). Эти "ячейки" должны быть на форме и, к тому же, при нажатии на кнопку - все это надо напечатать на принтере... Я пытался это сделать с помощью StringGrid1 - что-то пока у меня ничего не выходит.... |
#9
|
|||
|
|||
![]() Цитата:
И, к стати, не только Win7 а и WinХР Последний раз редактировалось lostbananan, 02.03.2013 в 10:51. |