![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| MacTep |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1292 Регистрация: 4.8.2003 Где: г. Самара Репутация: 4 Всего: 4 |
Как распечатать форму, которую в данный момент нельзя отобразить на экране. Например, есть форма, на которой лежит кнопка ПЕЧАТЬ. Нажатие по этой кнопке означает, что нужно распечатать содержимое формы (уже другой, которую не видно на экране). Как распечатать так, чтобы лишний раз не отображать форму номер 2 на экране. Если отображать, то так у меня получается, а вот без этого никак. Может можно как-то фокус что ли передать второй форме? Вообще, проблема состоит именно в том, как правильно перерисовать изображение формы на канву принтера. Этого я сделать как раз и не могу! Помогите!!
-------------------- (A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :) |
|||
|
||||
| youri |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: нет Всего: 16 |
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 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1292 Регистрация: 4.8.2003 Где: г. Самара Репутация: 4 Всего: 4 |
Я так и не понял, что это все было в предыдущем сообщении. По-моему, никакого ответа на свой вопрос я даже и не увидел. Кто-нибудь подскажет. У меня там панельки (3 штуки) и их надо вырисоватьна канве принтера, а потом все это вывести на печать. Так вот без показа формы на экране ничего не получается... Беда...
-------------------- (A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :) |
|||
|
||||
| youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: нет Всего: 16 |
В, принципе, ответа я не дал, но у меня все печатается, кроме TButton, а у тебя
Так ты скажи: у тебя ничего не печатается, или все же что-то печатается? Если что-то печатается, то скажи какие компоненты не печатаются. Можешь послать мне на email свой проект ([email protected]), посмотрю, что там у тебя. |
|||
|
||||
| z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 11 Всего: 102 |
MacTep а как ты хочешь напечатать то что не ненарисовано?! т.к. пока форма непоказывается то на ней соответсвенно ничего и не рисуется...
хотя возможно это и реально, например пр рисовании формы делать через GetDC, тогда (ИМХО) форма не будет отображаться на экране а будет рисоваться например в TImage.Bitmap находящегося на форме где кнопка печать... и уже Timage пускать на принтер, прада незнаю реально это или нет. -------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Посмотри функцию GetDIBits и другие связаные с ней - может чего и получится.
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| MacTep |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1292 Регистрация: 4.8.2003 Где: г. Самара Репутация: 4 Всего: 4 |
nJIaKca.spb, дело в том, что на канве принтера я уже рисую то, что мне надо, вот только не печатает от это и все. А не печатает потому, что форма на экране не отображается. А как только я ее покажу (Form1.Show), то сразу печатать начинает. А Delphi разве не видит то, что на скрытой форме расположено? Как ей это "показать", сказать, что там именно то-то и то-то есть?
Добавлено @ 22:15 <Spawn> что-то я про такое и не слышал и не видел нигде. В справке Delphi тоже вроде не нашел. Подскажи, что это такое и с чем это едят!? -------------------- (A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :) |
|||
|
||||
| youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: нет Всего: 16 |
Мастер, ты вообще ответы читаешь? У тебя что-нибудь печатается? Если ты не знаешь как печатать, то ты пробовал Form2.Print. Если знаешь, то как ты печатаешь (исходник).
|
|||
|
||||
| MacTep |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1292 Регистрация: 4.8.2003 Где: г. Самара Репутация: 4 Всего: 4 |
У меня все нормально печатается. А точнее у меня все нормально отображается в Microsoft Document Imaging, а вот на принтер почему-то ничего не выводится. Я делаю так: рисую на канве принтера (создаю битмап), а потом просто все это дело вывожу на печать. В этой проге у меня все отображается на экране, а вот печатать не хочет. Как поступать - не знаю! Теперь доходчиво объяснил?
Посмотрите... если что-то понятно! Как бороться с тем, что не печатает это дело на принтере? -------------------- (A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :) |
|||
|
||||
| Girder |
|
|||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 31 Всего: 155 |
Это не множко не так делается.
К примеру: печатаем видимую(не обезательно отображаемою на мониторе) область Form4
Это сообщение отредактировал(а) Girder - 30.6.2004, 16:44 -------------------- Как слышим, так и пишим. Истина где-то там... |
|||
|
||||
| MacTep |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1292 Регистрация: 4.8.2003 Где: г. Самара Репутация: 4 Всего: 4 |
Отличие в том, что мы вместо простого битмапа создаем специальный метафайл для канвы принтера? Я правильно понял! Очень похоже на мое! Благодарю за ответ. Очень помогло!
-------------------- (A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :) |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |