![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TBitmap не выводится на принтер [D7, Win2k]
Циркуль © (2007-05-21 12:02:00)Собсно, есть канва принтера, есть прямоугольник где собираемся рисовать свою картинку, есть сама картинка.
Делаем так
ACanvas.StretchDraw(R, FPicture.Graphic);
(FPicture.Graphic содержит в данном случае некий TBitmap)
На выходе из принтера - чистый лист.
Стоит добавить пару строк
FPicture.Graphic.SaveToFile('C:\1.bmp');
FPicture.Graphic.LoadFromFile('C:\1.bmp');
ACanvas.StretchDraw(R, FPicture.Graphic);
и картинка отлично печатается. Не понятно, почему без подобных па с бубном в первом случае получаем пустой лист? Причем, если для проверки в первом случае вместо канвы принтера подсунуть канву другого битмапа, то после сохранения последнего в файл убеждаемся, что он содержит то, что нужно.
Циркуль (2007-05-22 11:47:00) [1]
> Однокамушкин (22.05.07 11:09) [4]
Прямое попадание! Все заработало, спасибо! :)
Однокамушкин (2007-05-22 11:09:00) [2]Битмапы по умолчанию хранятся в формате DDB, который зависит от устройства. У вас таким устройством, видимо, является дисплей, а не принтер, вот рисунок и оказывается несовместим с принтером... попробуйте у TBitmap свойству HandleType присвоить значение bmDIB, чтобы переконвертировать его из DDB в DIB... Желательно сразу после создания, хотя можно и потом...
> канве принтера выводится только после пары пируэтов с бубном
> (сохранить на диск и считать обратно)
Это подтверждает моё предположение... на диске битмапы всегда хранятся как DIB, поэтому прочитанный с диска рисунок имеет сразу DIB-формат... а вот созданный вручную имеет по умолчанию формат DDB...
Циркуль (2007-05-22 10:57:00) [3]
> {RASkov} © (21.05.07 13:37) [1]
Хм... Полный код вывода на канву принтера займет здесь кучу места. Да и не думаю, что там что-то не так... Упоминаемый битмап - лишь часть того, что выводится на печать в отчете... Просто недавно добавлена возможность возможность в отчеты включать изображения. Кроме него на напечатанном листе все остальное видно. На превью битмап тоже видно (отрисовывается тот же самый экземпляр), а вот на канве принтера выводится только после пары пируэтов с бубном (сохранить на диск и считать обратно). Может кто-то сталкивался с таким эффектом и знает в чем может быть причина. :(
Влад (2007-05-21 14:26:00) [4]Может проблема у тебя не такая, но я тут недавно тоже бился с печатью битмапов. Они то не печатались, то съезжала половина страницы в общем глюки необъяснимые.. Попробуй печатать через метафайл, т.е. выводи в метафайл а затем метафайл выводи на принтер. Мои проблемы это решило.
{RASkov} (2007-05-21 13:37:00) [5]Чудес не бывает, за исключением в "Начинающих".....
покажи полный код вывода на канву принтера.... и возможно "генерации" твоего рисунка...
или же попробуй так
Printer.BeginDoc;
Printer.Canvas.StretchDraw(Printer.Canvas.ClipRect, FPicture.Graphic);
Printer.EndDoc;
У тебя не понятно, что за ACanvas и что есть R - на самом деле. Ну и FPicture.Graphic - сюда-же....