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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема печати из-под Quick-report, Не печатается QuickReport по-нормальному 
:(
    Опции темы
Zhaw
Дата 13.2.2003, 02:14 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Подскажите, люди добрые, как бороться со страшным зверем QuickReport!!
Я создал отчёт для QuickReport'a (не через БД, а сам, через событие OnNeedData), просматриваю его с помощью Preview-метода - всё хорошо. Настраиваю принтер соотв-вующей кнопкой и проч - тоже работает.
НО! При нажатии на кнопку Печатать (такая маленькая, сволочь, с принтером без гаечного ключа smile.gif - выскакивает окошко Progress (с нулевым прогрессом) быстро что-то моргает и закрывается - типа, "Я напечатал". А документ в очереди на печать даже не появлялся. Как быть?
После полудня метаний по И-нету и копаний в pdf-ах нашёл и проверил такой ход

ReportForm.FlawReport.Prepare;
ReportForm.FlawReport.QRPrinter.Print;
ReportForm.FlawReport.QRPrinter.Free;
ReportForm.FlawReport.QRPrinter := nil;
- это работает, но это ведь всегда печатает и без всякого диалог-окошка.
Так что второй вариант требует знаний - как перехватить нажатие на кнопку Print у компонента QuickReport - чтобы самому в нужный момент распечатать то что нужноconfused.gif

Заранее огромное Thanks!

  Вверх
Kleo
Дата 13.2.2003, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а я, когда с такой же проблемой столкнулась, не нашла даже такого другого метода smile.gif работает он да? эх жаль, что поздновато я о нем узнала smile.gif на самом деле у меня вообще никакие отчеты не печатались..даже если там просто метка с надписью была...происходило все то же самое! асболютно!
было бы интересно узнать из-за чего это и как с этим бороться нужно...
--------------------
Съел бобра - спас дерево
PM MAIL ICQ MSN   Вверх
Medved
Дата 13.2.2003, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

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



Ну что Вам сказать? Чтобы ответить на этот вопрос, необходимо самому прощупать эту ситуацию. Может Вы где-то что-то забыли указать, а может у Вас с настройкой принтера неладно, или сам принтер специфичен. Пришлите мне на e-mail свой проект, или его часть, и я постараюсь разобраться.

[email protected]


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Medved
Дата 13.2.2003, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

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



Вот наткнулся:

Цитата

Глюки QReport

Обнаружил, что компонент QReport никак не реагирует на установки принтера PrinterSetup диалога, вызываемого нажатием кнопочкисобственного Preview!

В QuickReport есть собственный объект TQRPrinter, установки которого он использует при печати, а стандартные установки принтеров на него не влияют. В диалоге PrinterSetup, вызываемом из Preview можно лишь выбрать принтер на который нужно печатать (если, конечно, установлено несколько принтеров).

Советую поставить обновление QReport на 2.0J с www.qusoft.com.

Перед печатью (не только из QReport) программно установите требуемый драйвер принтера текущим для Windows

function SetDefPrn(const stDriver : string) : boolean;
begin
  SetPrinter(nil).Free;
  Result := WriteProfileString('windows', device', PChar( stDriver));
end;

После печати восстановите установки.



--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Zhaw
  Дата 13.2.2003, 18:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Pegas @ 13.2.2003, 00:20)
Вот наткнулся:

Цитата

Глюки QReport

Обнаружил, что компонент QReport никак не реагирует на установки принтера PrinterSetup диалога, вызываемого нажатием кнопочкисобственного Preview!

В QuickReport есть собственный объект TQRPrinter, установки которого он использует при печати, а стандартные установки принтеров на него не влияют. В диалоге PrinterSetup, вызываемом из Preview можно лишь выбрать принтер на который нужно печатать (если, конечно, установлено несколько принтеров).

Советую поставить обновление QReport на 2.0J с www.qusoft.com.

Перед печатью (не только из QReport) программно установите требуемый драйвер принтера текущим для Windows

function SetDefPrn(const stDriver : string) : boolean;
begin
  SetPrinter(nil).Free;
  Result := WriteProfileString('windows', device', PChar( stDriver));
end;

После печати восстановите установки.

Неа, не рабтает... Я параметр (драйвер для принтра взял из TPrinter.GetPrinter). Не работает и всё тут. Мож я что не так делаю?
Всё-таки можно как нибудь перехватить сообщение об отправке на печать и обработать самому? Пусть хоть даже со вставкой из С++, пусть даже из Asm - я на такое даже готов!
  Вверх
Song
Дата 14.2.2003, 05:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


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

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



Да перехватить-то можно..
Лови сообщение WM_LBUTTONDOWN.


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Medved
Дата 14.2.2003, 06:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

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



Цитата
Неа, не рабтает... Я параметр (драйвер для принтра взял из TPrinter.GetPrinter). Не работает и всё тут. Мож я что не так делаю?
Всё-таки можно как нибудь перехватить сообщение об отправке на печать и обработать самому? Пусть хоть даже со вставкой из С++, пусть даже из Asm - я на такое даже готов!


Пришлите тогда мне сырец проекта, я посмотрю.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Zhaw
Дата 14.2.2003, 23:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Song @ 13.2.2003, 21:17)
Да перехватить-то можно..
Лови сообщение WM_LBUTTONDOWN.

WM_LBUTTONDOWN перехватить можно если ловишь либо всё подряд (плохо), либо для какого-то окна (тогда нужно знать его Handle).
А как получить Handle окошка предпросмотра, которое автоматически генерируется QuickReport'омconfused.gif
  Вверх
Song
Дата 15.2.2003, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


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

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



Кстати, знаешь, я вот только вчера сделал отчёт, у меня всё печатается отлично из preview.
У меня Д6.
Насчёт перехвата нажатия кнопки. Да, нужно знать её дискриптор. Я попробовал через WinSight, он её не видит, видит только TToolBar и всё.
Поэтому рыть надо в сторону ToolBar, именно он и является владельцем этих кнопок. Но вот вопрос, если не видит WinSight, тогда наверно извращение c GetWindow() тоже ничего не дадут. Тем не менее кнопку эту я перехватил. Правда не одну, а все что там есть, но если ещё помучаться (у меня тогда не было в достатке времени), можно и именно её. А способ вот какой: я перехватывал WM_LBUTTONDOWN и смотрел какой класс у окон, когда я нажал на эту кнопку, он выдал мне TButton. Логично, да? smile.gif Тем не менее надо было проверить обязательно, т.к. мог быть любой. Но кнопок там не одна, поэтому чтобы отследить что именно нажата кнопка с принтером, надо ещё как-нибудь её отличать от других. Если у неё есть имя уникальное, тогда по имени (GetWindowName).
И напоследок, как выполнить свой Print, а не дать напечатать Quick Report'у. Просто когда словишь WM_LBUTTONDOWN и убедишься, что под мышью именно та кнопка что тебе нужна, подменяй сообщене на WM_NULL и вызывай свой Print().


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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