| 
| 
 | Вопрос # 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. Однако странные у Вас критерии оценок!!!
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |