|
|
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
Добрый день PB 11.1 build 8542 нужно напечатать много этикеток с картинками использую очевидный вариант long Job,i printsetup() Job = PrintOpen( ) for i=1 to 12000 printbitmap(Job, "c:\test.bmp", 2000,2000,0,0) next printclose(Job) и обнаруживаю, что печатает только около 10000. Печатал в PDFCreator Программа TaskInfo показала, что каждый printbitmap занимает один GDI Object и их счетчик у моей программы больше 10000 не поднимался сам test.bmp черно-белый 1.7 Кб Можно ли с этим бороться и как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 11:24 |
|
||
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
Я бы попробовал тогда сделать в цикле, блоками, например, по тысяче. По идее должно сработать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 11:26 |
|
||
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
К сожалению нет printclose эти объекты не освобождает, равно как и выбор другого принтера в printsetup два блока от printsetup до printclose по 6000 штук показали в первом 6000, во втором продолжение до 9999 и так ждет кнопки "выход" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 11:37 |
|
||
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
А если попробовать через DataWindow печатать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 11:55 |
|
||
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
я пробовал через window - picture - print, но там, насколько я понимаю, врожденный порок - картинка на момент печати должна быть видна, то есть в другое приложение не ходи, окна не двигай, мышью не езди. для промышленного приложения это не годится. не говоря уже о том, что эта картинка на экране совсем не нужна где-то на форуме мелькало ваше предложение делать через datastore - не хватает грамотности - не подскажете место в документации, где посмотреть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 12:05 |
|
||
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
John1234я пробовал через window - picture - print, но там, насколько я понимаю, врожденный порок - картинка на момент печати должна быть видна, то есть в другое приложение не ходи, окна не двигай, мышью не езди. для промышленного приложения это не годится. не говоря уже о том, что эта картинка на экране совсем не нужна где-то на форуме мелькало ваше предложение делать через datastore - не хватает грамотности - не подскажете место в документации, где посмотреть Посмотрите насчет функции bitmap(...) для DataWindow/DataStore. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 12:10 |
|
||
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
спасибо, посмотрю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 12:11 |
|
||
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
Поигрался с datastore: long Job,i datastore xxx xxx = create datastore xxx.dataobject="test3" // в этом DW есть две картинки: picture p_1 и computed field computed_1 xxx.print(true,true) // печать DW целиком проходит успешно, обе картинки напечатались // имя и начинка обеих картинок доступны messagebox(xxx.object.compute_1.name,string(xxx.object.compute_1.expression)) messagebox(xxx.object.p_1.name,string(xxx.object.p_1.filename)) printsetup() Job = PrintOpen( ) // но попытка печати приводит к ошибке xxx.object.compute_1.print(Job, 1000,1000,1000,1000) printclose(Job) я явно допускаю элементарную ошибку, но не пойму где ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 13:22 |
|
||
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
John1234 // но попытка печати приводит к ошибке xxx.object.compute_1.print(Job, 1000,1000,1000,1000) printclose(Job) я явно допускаю элементарную ошибку, но не пойму где Потому, что compute object не имеет метода print и вообще никаих методов не имеет. Печатать нужно само DataWindow как Вы делали выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 13:27 |
|
||
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
но мне-то нужно картинку напечатать в нужное место и нужного размера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 13:29 |
|
||
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
John1234но мне-то нужно картинку напечатать в нужное место и нужного размера Разместите этот объект (с картинкой) в Detail части DataWindow и выставляйте Detail Height для каждой строки позиции (SetDetailHeight(...)) и выражений на x и y позицию объекта. тогда будет на нужное иесто и нужного размера (выражения на width и height). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 13:47 |
|
||
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
то есть, формировать буфер страницы в datawindow, а потом целиком скидывать на принтер в принципе возможно. но ,учитывая конкретную ситуацию, я в качестве временной меры вставлю счетчик Printbmp, а искать буду в сторону высвобождения GDI или в сторону устойчивой печати элемента window спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 13:57 |
|
||
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
John1234но ,учитывая конкретную ситуацию, я в качестве временной меры вставлю счетчик Printbmp, а искать буду в сторону высвобождения GDI Но ведь ресурсы похоже не освобождает какой-то код внутри PB, как Вы на это повлиять сможете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 14:10 |
|
||
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
Только если попробовать сменить build/написать bug report. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 14:11 |
|
||
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
конечно просто у меня выдача не только на windows-принтеры, но и на специальные (zebra, datamax), поэтому логика "сформировал этикетку - сразу напечатал" для меня более удобна. идеальный вариант - объединить невидимость datastore с возможностью поэлементной печати в window, но это я от малограмотности :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 14:22 |
|
||
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
John1234просто у меня выдача не только на windows-принтеры, но и на специальные (zebra, datamax), поэтому логика "сформировал этикетку - сразу напечатал" для меня более удобна. Печатайте не прямо из PB, а например из DLL на C в которой полностью контролируйте весь процесс с созданием и освобождением ресурсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 19:09 |
|
||
|
проблема с печатью bmp
|
|||
|---|---|---|---|
|
#18+
Таким образом, резюмирую Проблема: Printbmp в рамках одного запуска .exe занимает и не отдает GDI Object, что ограничивает объем выдачи в 10000 картинок Ожидавшиеся (хотя бы формально) или описанные выше пути решения: 1. указать команду или режим, которая освобождает этот ресурс - увы :( 2. написать bug report - попробую 3. частично перейти на другой язык/инструмент (DLL на C) - возможно, но не хочется 4. перестроить идеологию печати, формировать буфер страницы в datastore и потом его печатать - возможно, но идеологию трогать не хочется 5. попробовать найти надежно работающий вариант с печатью элемента окна - надо еще поискать, хотя надежды мало 6. вставить счетчик обращений к printbmp - самый простецкий вариант, которого вполне хватит в 90% случаев (цена вопроса 20 строк кода) 7. оформить печать в виде отдельного .exe и запускать его по мере надобности. по минимуму оформить как "одна накладная - один запуск", по максимуму "одна накладная - сколько надо запусков". Конечно, появятся вопросы передачи параметров, но зато проблема будет решена в общем. Причем функция частичной печати длинной накладной есть и сейчас, так что кардинальной перестройки не потребуется. цена вопроса 200 строк кода. Так что я быстренько вставлю счетчик, а дальше буду думать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 12:21 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=35494429&tid=1336553]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 388ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...