![]() |
|
|
|
|
#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
|
|||
|
|||
|
Реьята! Пожалуйста - давайте примеры кода..
|