Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 364

/ вопрос открыт /

У меня появилась таая проблема: есть текст неважно где, в Memo, StringGrid, label, или Edit, мне нужно вывести ево на печать, как ето сделать? Пробовал через PrintDialog так же как и OpenDialog или SaveDialog, диалог принтера роботает, а што делать незнаю, ПОМОГИТЕ ПОЖАЛУСТА! Если знаете помогите розпичатать и диаграму из компонента Cart!!!

Шарайчук Сергей Олександрович Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Шарайчук Сергей Олександрович (статус: 2-ой класс)
Вопрос отправлен: 1 марта 2007, 12:30
Состояние вопроса: открыт, ответов: 3.

Ответ #1. Отвечает эксперт: Aymenel

Здравствуйте, Шарайчук Сергій Олександрович!

Delphi имеет стандартный объект для доступа к принтеру - TPRINTER, находящийся в модуле PRINTERS. В этом модуле имеется переменная Printer:Tpinter, что избавляет от необходимости описывать свою. Он позволяет выводить данные на печать и управлять процессом печати. Правда, в некоторых версиях Delphi1 он имеет "глюк" - не работают функции Draw и StrethDraw. Но эта проблема поправима - можно использовать функции API. Далее приведены основные поля и методы объекта Printers :

PROPERTY

Aborted:boolean - Показывает, что процесс печати прерван
Canvas:Tcanvas - Стандартный Canvas, как у любого графического объекта. Он позволяет рисовать на листе бумаге графику, выводить текст ... . Тут есть несколько особенностей, они описаны после описания объекта.
Fonts:Tstrings - Возвращает список шрифтов, поддерживаемых принтером
Handle:HDS - Получить Handle на принтер для использования функций API (см. Далее)
Orientation:TprinterOrientation - Ориентация листа при печати : (poPortrait, poLandscape)
PageHeight:integer - Высота листа в пикселах
PageNumber:integer - Номер страницы, увеличивается на 1 при каждом NewPage
PageWidth:integer - Ширина листа в пикселах
PrinterIndex:integer - Номер используемого принтера по списку доступных принтеров Printers
Printers:Tstrings - Список доступных принтеров
Printing:boolean - Флаг, показывающий, что сейчас идет процесс печати
Title:string - Имя документа или приложения. Под этим именем задание на печать регистрируется в диспетчере печати
METODS

AssignPrn(f:TextFile) - Связать текстовый файл с принтером. Далее вывод информации в этот файл приводит к ее печати. Удобно в простейших случаях.
Abort - Сбросить печать
BeginDoc - Начать печать
NewPage - Начать новую страницу
EndDoc - Завершить печать.

Пример :

Приложение:
  1. Procedure TForm1.Button1Click(Sender: TObject);
  2. Begin
  3. With Printer do Begin
  4.  
  5. BeginDoc;
  6.  
  7. Canvas.Font:=label1.font;
  8.  
  9.  
  10.  
  11. EndDoc;
  12. end;
  13. end;


Ответ отправил: Aymenel (статус: 2-ой класс)
Время отправки: 1 марта 2007, 13:59
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Роман

Здравствуйте, Шарайчук Сергій Олександрович!Посмотрите тут:http://delphiworld.narod.ru/_os_.html,должно помочь.

Ответ отправил: Роман (статус: 5-ый класс)
Время отправки: 1 марта 2007, 15:03
Оценка за ответ: 3

Ответ #3. Отвечает эксперт: Новаковский Юрий Аврамович

Здравствуйте, Шарайчук Сергій Олександрович!
В Delphi печать происходит так: см приложение.

BeginDoc; Связывается с принтером по умолчанию,
начинает формирование первой страницы,которое заключаетса в рисовании на канве принтера текста,линий и всего того что вобще с любой канвой делать можно.

Newpage; Посылает на принтер предидущую страницу,
начинает формирование новой страницы- очищает канву принтера, устанавливает позицию пера в 0 0,
увеличивает на 1 счетчик страниц.

EndDoc; Посылает на принтер последнюю страницу и заканчивает печать разрывает связь с принтером.

Удачи!

Приложение:
  1. With Printer do Begin
  2. BeginDoc;
  3.  
  4.  
  5. Canvas.TextOut(100,100,'Delphi World );
  6.  
  7. .....
  8. .....
  9. .....
  10.  
  11.  
  12. .....
  13. .....
  14. .....
  15.  
  16.  
  17. .....
  18. .....
  19. .....
  20.  
  21.  
  22. end;
  23. end;


Ответ отправил: Новаковский Юрий Аврамович (статус: 4-ый класс)
Время отправки: 2 марта 2007, 10:24
Оценка за ответ: 4

Комментарий к оценке: Как нарисовать на канве изображение с обекта Chart

Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 5 марта 2007, 11:32; участников в обсуждении: 1.
Новаковский Юрий Аврамович

Новаковский Юрий Аврамович (статус: 4-ый класс), 5 марта 2007, 11:32 [#1]:

Здравствуйте, Шарайчук Сергій Олександрович!
Все компоненты - наследники от TCustomControl имеют свойство - property Canvas: TCanvas; ,
а Canvas - метод
procedure Assign(Source: TPersistent); virtual;
тогда:
Printer.Canvas.Assign(Chart1.Canvas);

Если нужно рисовать не один в один, тогда
procedure CopyRect(const Dest: TRect; Canvas: TCanvas; const Source: TRect);

Dest - прямоугольник куда копируем,
Canvas - откуда копируем,
Source - прямоугольник какую часть копируем.
Во избежание фокусов размеры прямоугольников должны быть равны.

Printer.Canvas.CopyRect(Rect(100,100,150,150),Chart1.Canvas,Rect(0,0,50,50));
Удачи!
PS. Однако странные у Вас критерии оценок!!!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:53
Выполнено за 0.02 сек.