|
Вопрос # 364/ вопрос открыт / |
|
У меня появилась таая проблема: есть текст неважно где, в Memo, StringGrid, label, или Edit, мне нужно вывести ево на печать, как ето сделать? Пробовал через PrintDialog так же как и OpenDialog или SaveDialog, диалог принтера роботает, а што делать незнаю, ПОМОГИТЕ ПОЖАЛУСТА! Если знаете помогите розпичатать и диаграму из компонента Cart!!!
Ответ #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 - Завершить печать.
Пример :
Приложение: Переключить в обычный режим- Procedure TForm1.Button1Click(Sender: TObject);
- Begin
- With Printer do Begin
-
- BeginDoc;
-
- Canvas.Font:=label1.font;
-
-
-
- EndDoc;
- end;
- 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; Посылает на принтер последнюю страницу и заканчивает печать разрывает связь с принтером.
Удачи!
Приложение: Переключить в обычный режим- With Printer do Begin
- BeginDoc;
-
-
- Canvas.TextOut(100,100,'Delphi World );
-
- .....
- .....
- .....
-
-
- .....
- .....
- .....
-
-
- .....
- .....
- .....
-
-
- end;
- 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. Однако странные у Вас критерии оценок!!!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|