Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Печать таблицы 
:(
    Опции темы
Mick Winder
  Дата 15.10.2004, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 15.10.2004
Где: Москва Рязанка

Репутация: нет
Всего: -1



Как распечатать содержимое таблицы DBGrid на принтер (для пользователя)? qstn.gif
PM MAIL   Вверх
VIY
Дата 15.10.2004, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 13.10.2004

Репутация: нет
Всего: нет



Формируй QuickReport или что-нибудь подобное.
PM MAIL   Вверх
Mick Winder
Дата 15.10.2004, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 15.10.2004
Где: Москва Рязанка

Репутация: нет
Всего: -1



Нет, я имел в виду с помощью объекта TPrinter... thumbs-up.gif
PM MAIL   Вверх
VIY
Дата 15.10.2004, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 13.10.2004

Репутация: нет
Всего: нет



Краткое описание и примеры использования TPrinter можешь помотреть на www.delphiworld.narod.ru

Но тебе прийдётся в этом случае расчитывать все координаты и отрисовывать вручную разделители.
Помоему проще динамически генерить QuickReport.
PM MAIL   Вверх
Akella
  Дата 15.10.2004, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



поставь себе библиотеку EhLib, там есть такая возможность
Добавлено @ 16:24
к сожалению распечатывать DBGrid через TPrinter доаольно умоемкий процесс, мне кажется.

вот несколько примеров
Код
Может ли мне кто-либо сказать, как с помощью TPrinter сделать следующее?:


Замена исходного Paper Bin страницей. Создание отчета, который нужно переключать между
двумя бункерами (некоторым страницам отчета нужно работать с другим бункером, например
бланки писем и пр.).
Печать нескольких копий отчета. Для этого желательно использовать диалог настройки
принтера, но это, похоже, не работает.
То, что вы собираетесь делать, возможно с помощью структуры TDevMode, получив к которой
доступ, можно делать необходимые вам изменения. Структура TDevMode имеет все необходимые
для настройки принтера поля и позволяет сделать любые настройки не обращаясь к диалогу
настройки принтера.

Вот пример одного из моих компонентов, инкапсулирующий вышесказанную функциональность:

procedure TCrpePrinter.GetCurrentPrinter;
var
 lpDevice: PChar;
 lpDriver: PChar;
 lpPort: PChar;
 Handle: THandle;
begin
 lpDevice := StrAlloc(255);
 lpDriver := StrAlloc(255);
 lpPort := StrAlloc(255);

 try
   Printer.GetPrinter(lpDevice, lpDriver, lpPort, Handle);
   if Handle <> 0 then
     { если это не 0, то мы имеем указатель на структуру устройства}
   begin
     FDevMode := Ptr(Handle, 0); {Получаем дескриптор структуры устройства}
     FDevice := StrPas(lpDevice);
     FDriver := StrPas(lpDriver);
     FPort := StrPas(lpPort);
   end
   else
   begin
     Printer.PrinterIndex := Printer.PrinterIndex;
       {Этим мы пытаемся осуществить инициализацию}
     Printer.GetPrinter(lpDevice, lpDriver, lpPort, Handle);
     if Handle <> 0 then
     begin
       FDevMode := Ptr(Handle, 0);
       FDevice := StrPas(lpDevice);
       FDriver := StrPas(lpDriver);
       FPort := StrPas(lpPort);
     end
     else
     begin
       FDevMode := nil;
       raise ECrpe.Create('Ошибка загрузки драйвера принтера');
     end;
   end;
 finally
   StrDispose(lpDevice);
   StrDispose(lpDriver);
   StrDispose(lpPort);
 end;
end;


Изменение лотка и количества копий:

dmCopies := 2;
dmDefaultSource := 2;  {Нижний лоток}




Как только вы получите указатель на структуру devmode, вы вправе делать изменения любых
полей. Говорят, могут быть проблемы при изменении лотков во время печати, но сам я не
пробовал менять эти поля в структуре DevMode.


1. После команды BeginDoc шрифт у Canvas принтера сбрасывается и его необходимо задавать заново

2. Все координаты даны в пикселах, а для нормальной работы необходимы миллиметры (по двум очевидным причинам: очень трудно произвести разметку страницы в пикселах (особенно если необходима точность), и , главное, при изменении разрешающей способности принтера будет изменяться число точек на дюйм, и все координаты "поедут".

3. У TPrinter информация о принтере, по видимому, определяются один раз - в момент запуска программы (или смены принтера). Поэтому изменение настроек принтера в процессе работы программы может привести к некорректной работе, например, неправильной печать шрифтов True Type.

Код
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;
 // Печатаем текст
 Canvas.TextOut(100,100,'Delphi World - лучше всех !!! :) ');
 // Конец печати
 EndDoc;
end;
end;




как установить кол-во точек на дюйм
Код
uses Printers;

var
 MyFile: TextFile;
begin
 Printer.PrinterIndex := 2;
 AssignPrn(MyFile);
 Rewrite(MyFile);
 Printer.Canvas.Font.Name := 'Courier New';
 Printer.Canvas.Font.Style := [fsBold];
 Printer.Canvas.Font.PixelsPerInch :=
   GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY);
 Writeln(MyFile, 'Print this text');
 System.CloseFile(MyFile);
end;



Это сообщение отредактировал(а) dsergey - 15.10.2004, 16:30
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0465 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.