| 
| 
 | Вопрос # 546/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!У меня вот такой вопрос.
 Разрабатываю программу расстановки компьютеров принтеров и др на плане здания.
 Загружаю в tImage план здания в моем случае формат Jpeg, динамически создаю TImagе компьютеров, их двигаю по основному плану здания.
 Вопрос - как мне вывести на печать основной TImagе и добавленные мной Имаджи компьютеров и др средств?
 
|  |   Вопрос задал: Прохоренок (статус: Посетитель)Вопрос отправлен: 3 мая 2007, 16:05
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Dron Здравствуйте, Прохоренок!Простым вариантом будет печать всего изображения формы, используя метод Print: Form1.Print;
 Цитата из справки: "Call Print to print the form. Print uses the GetFormImage method to obtain a bitmap of the form and draws that to the printer’s HDC."
 Т.е. этот метод фактически делает скриншот формы и отправляет его на печать.
 Чтобы напечатать конкретную область формы, проще сделать её скриншот вручную, вырезать нужную область и отдельно её напечатать. Как выводить графику на печать см. в прикреплённом файле.
 Удачи!
 К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 
 
|  | Ответ отправил: Dron (статус: Студент)Время отправки: 3 мая 2007, 17:21
 Оценка за ответ: 4
 |  
 Мини-форум вопросаВсего сообщений: 6; последнее сообщение — 4 мая 2007, 15:37; участников в обсуждении: 3. 
|   | Прохоренок (статус: Посетитель), 4 мая 2007, 09:20 [#1]:2 Dron. Вариант со скриншотом хорош, когда видна вся форма, что в данном случае не подходит т.к. изображение будет слишклм мало и не читаемо.
 Можно ли послать на печать все содержимое Имаджа не зависимо от того видно ли оно все в данный момент?
 И как же тогда выводить дочернии Имджи
 |  
|   | Dron (статус: Студент), 4 мая 2007, 13:25 [#2]:У TImage вообще нет метода для отправки на печать... Поэтому нужен другой способ. С уважением. |  
|   | Вадим К (статус: Академик), 4 мая 2007, 14:03 [#3]:Я бы по проще сделал. Для печати юзаем принтер так.
 Printer.begindoc;
 Printer.Canvas.draw(Image1.Canvas,0,0);
 Printer.enddoc;
 //если только не перепутал кто кого draw'ить должен, может быть наоборот Image1.Canvas.Draw(Printer.Canvas,0,0);
 А для того, что бы всё чётко отрисовалось, делаем битмап и рисуем всё на нём как хочеться или на канве принтера сразу. Помни, что пока Enddoc не дал, то листик не выводиться. - можно по всёму листу бегать. И второе. У принтера DPI обычно выше (у экрана 96, у принтера - не меньше 300, а то и 600), поэтому картинка на принтере будет в 4-8 раз меньше за экранные размеры. Но выход есть. У принтеровой канвы есть свойства размера (Width и Height). Размер листа тоже узнать можно (не помню точно свойство, но помню, что кончается на две буковки m - от слова милиметры.).Ну а когда размеры известы - пляшем по полной
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Прохоренок (статус: Посетитель), 4 мая 2007, 15:23 [#4]:Спасибо за помощь! Выход один : в цикле перебирать все Имаджи и их отрисовывать на канве принтера.
 Что ж фронт работ теперь есть ;о))
 |  
|   | Вадим К (статус: Академик), 4 мая 2007, 15:29 [#5]:Можно и так. Но я бы вначале на битмапе отдельном нарисовал, а потом его брослал на канву принтера. Зачем такие сложности? А вдруг вам захочиться сделать превью? есть много компонентов, которые позволяют это делать, но им подавай нарисованую канву. А она у нас уже будет... Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Прохоренок (статус: Посетитель), 4 мая 2007, 15:37 [#6]:2 Вадим К Предварительный просмотр и так будет на схеме,
 собираюсь сделать еще и возможность указания масштаба просмотра.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |