| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Печать формы, которой не видно на экране |
| Автор: MacTep 26.6.2004, 21:42 |
| Как распечатать форму, которую в данный момент нельзя отобразить на экране. Например, есть форма, на которой лежит кнопка ПЕЧАТЬ. Нажатие по этой кнопке означает, что нужно распечатать содержимое формы (уже другой, которую не видно на экране). Как распечатать так, чтобы лишний раз не отображать форму номер 2 на экране. Если отображать, то так у меня получается, а вот без этого никак. Может можно как-то фокус что ли передать второй форме? Вообще, проблема состоит именно в том, как правильно перерисовать изображение формы на канву принтера. Этого я сделать как раз и не могу! Помогите!! |
| Автор: youri 27.6.2004, 04:22 | ||||||
to Мастер
Если не отображать, то у меня кнопки не рисуются (TButton и его наследники), а все остальное рисуется. to All Я тут пытался разобраться в этой штуке: TCustomForm.Print - распечатывает клиентскую область формы, для этого использует TCustomForm.GetFormImagе TCustomForm.GetFormImagе - возвращает изображение формы, для этого он создает канву и вызывает TWinControl.PaintTo, передавая ему handle контекста канвы TWinControl.PaintTo - рисует на канве форму, а потом вызывает PaintTo для всех своих наследников; для рисования с помощью Perform передает сообщение WM_PAINT в WndProc TButtonControl.WndProc на WM_PAINT не реагирует TWinControl.WndProc на WM_PAINT не реагирует TControl.WndProc на WM_PAINT не реагирует и вызывает Dispatch обработчик WM_PAINT есть в TWinControl и, насколько я понимаю, рисование происходит здесь
Мне не совсем понятно, inherited - это вызов WMPaint ближайшего родителя TWinControl? Если так, то у всех родителей TWinControl нет WMPaint? Значит ли это, что обрабатывает событие Windows'овский обработчик, или где этот TButton вообще рисуется? Вот обработчик двойного щелчка на форме (кнопка отображается в TImage):
Если закомментировать в начале Hide, то не работает |
| Автор: MacTep 27.6.2004, 15:04 |
| Я так и не понял, что это все было в предыдущем сообщении. По-моему, никакого ответа на свой вопрос я даже и не увидел. Кто-нибудь подскажет. У меня там панельки (3 штуки) и их надо вырисоватьна канве принтера, а потом все это вывести на печать. Так вот без показа формы на экране ничего не получается... Беда... |
| Автор: youri 27.6.2004, 16:41 | ||
В, принципе, ответа я не дал, но у меня все печатается, кроме TButton, а у тебя
Так ты скажи: у тебя ничего не печатается, или все же что-то печатается? Если что-то печатается, то скажи какие компоненты не печатаются. Можешь послать мне на email свой проект ([email protected]), посмотрю, что там у тебя. |
| Автор: z-END 27.6.2004, 17:40 |
| MacTep а как ты хочешь напечатать то что не ненарисовано?! т.к. пока форма непоказывается то на ней соответсвенно ничего и не рисуется... хотя возможно это и реально, например пр рисовании формы делать через GetDC, тогда (ИМХО) форма не будет отображаться на экране а будет рисоваться например в TImage.Bitmap находящегося на форме где кнопка печать... и уже Timage пускать на принтер, прада незнаю реально это или нет. |
| Автор: <Spawn> 27.6.2004, 18:11 |
| Посмотри функцию GetDIBits и другие связаные с ней - может чего и получится. |
| Автор: MacTep 27.6.2004, 22:14 |
| nJIaKca.spb, дело в том, что на канве принтера я уже рисую то, что мне надо, вот только не печатает от это и все. А не печатает потому, что форма на экране не отображается. А как только я ее покажу (Form1.Show), то сразу печатать начинает. А Delphi разве не видит то, что на скрытой форме расположено? Как ей это "показать", сказать, что там именно то-то и то-то есть? Добавлено @ 22:15 <Spawn> что-то я про такое и не слышал и не видел нигде. В справке Delphi тоже вроде не нашел. Подскажи, что это такое и с чем это едят!? |
| Автор: youri 28.6.2004, 13:57 |
| Мастер, ты вообще ответы читаешь? У тебя что-нибудь печатается? Если ты не знаешь как печатать, то ты пробовал Form2.Print. Если знаешь, то как ты печатаешь (исходник). |
| Автор: MacTep 30.6.2004, 14:01 | ||
У меня все нормально печатается. А точнее у меня все нормально отображается в Microsoft Document Imaging, а вот на принтер почему-то ничего не выводится. Я делаю так: рисую на канве принтера (создаю битмап), а потом просто все это дело вывожу на печать. В этой проге у меня все отображается на экране, а вот печатать не хочет. Как поступать - не знаю! Теперь доходчиво объяснил?
Посмотрите... если что-то понятно! Как бороться с тем, что не печатает это дело на принтере? |
| Автор: Girder 30.6.2004, 16:43 | ||
| Это не множко не так делается. К примеру: печатаем видимую(не обезательно отображаемою на мониторе) область Form4
|
| Автор: MacTep 3.7.2004, 22:35 |
| Отличие в том, что мы вместо простого битмапа создаем специальный метафайл для канвы принтера? Я правильно понял! Очень похоже на мое! Благодарю за ответ. Очень помогло! |