:: Visual Foxpro, Foxpro for DOS
Re: Картинка в отчете!!! Срочно
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Использовать в данном случае General поле, либо же поле со строкой - путём к картинке на диске.
Если всё же очень хочется через блоб, то примерный путь описан тут spacefold.com - как по мне так слишком много мучений, тем более что PictureVal, насколько я помню, частично сломан в VFP9 SP2...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Картинка в отчете!!! Срочно
Dutch

Сообщений: 212
Откуда: Волгодонск
Дата регистрации: 25.10.2010
Я пробовал делать несколькими способами через Blob поле. В том числе как описано ниже и так spacefold.com. Но получал всегда один и тот же результат: в отчёте картинки нет.
Я выгружал данные из Blob поля в файл - в файле картинка есть. Т.е. Blob поле заполнено верно. Проблема в том, что PictureVal частично сломан в VFP9 SP2?

[quote Igor Korolyov]
Control source type: "Expression or variable name"
Control source: GP(csr.memo_with_image_data)

Вспомогательная процедура GP:
PROCEDURE GP(tcContents)
LOCAL loImg
loImg = CREATEOBJECT("Image")
loImg.PictureVal = m.tcContents
RETURN m.loImg
ENDPROC
Отчёт крайне желательно запускать в режиме SET REPORTBEHAVIOR 90 - иначе может быть совсем не тот результат...
Альтарнативный вариант - пихать картинку в General поле (т.е. завести исключительно для отчёта курсор с General полем и в него загонять содержимое - IMHO этот вариант "не очень"). Ещё можно пободаться с ReportListener-ом. Т.е. там прямо в коде через библиотеку gdiplus выводить содержимое "картинки".[/quote Igor Korolyov]
Ratings: 0 negative/0 positive
Re: Картинка в отчете!!! Срочно
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Что-то я ничего не понял. Так получилось или нет? И при чем тут PictureVal?
Для генерации QR-кодов есть FoxBarCodeQR


------------------
Лень - это неосознанная мудрость.




Исправлено 1 раз(а). Последнее : ssa, 05.12.19 14:57
Ratings: 0 negative/0 positive
Re: Картинка в отчете!!! Срочно
Dutch

Сообщений: 212
Откуда: Волгодонск
Дата регистрации: 25.10.2010
У FoxBarCodeQR есть ограничение в 255 символов - меня оно не устраивает:
Цитата:
BarCodeLibrary.dll has the limitation of encoding only up to 255 characters, so FoxBarcodeQR also has this limitation.

ssa
Так получилось или нет?
Не получилось. Мне нужно увидеть в отчёте QR код. Но его там нет

ssa
И при чем тут PictureVal?
PictureVal используется во многих примерах вывода картинки в отчёт. Например тут:
loImg.PictureVal = m.tcContents
Ratings: 0 negative/0 positive
Re: Картинка в отчете!!! Срочно
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
Приаттач картинку, проверим.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Картинка в отчете!!! Срочно
Dutch

Сообщений: 212
Откуда: Волгодонск
Дата регистрации: 25.10.2010
Я приложил архив с примером. Только в него не влез файл quricol32.dll. Его надо скачать откуда нибудь и положить в папку с файлами из архива и запустить файл Do.prg.
Картинка большая, поэтому пришлось на файлобменник выложить её: dropmefiles.com
Тестировал на Windows 7x64, VFP9 SP1

DirStart = ADDBS(JUSTPATH(SYS(16))) && Стартовый каталог. Место откуда запущен этот PRG файл
TablePathFull = DirStart + 'QR.DBF' && Путь к таблице, в которой находятся поля касающиеся QR кода
*Описание полей таблицы QR.DBF:
*Str_to_URL && строка которую надо записать в QR код (MEMO)
*QR_pict && картинка QR кода (General)
SET REPORTBEHAVIOR 90
SET DEFAULT TO ("&DirStart")
cImageFileBMP = DirStart + "QRPict.BMP" && Путь к файлу с картинкой очередного сгенерированного QR кода
DECLARE GeneratePNG IN quricol32.dll STRING @, STRING @, INTEGER, INTEGER, INTEGER && для генераци картинки QR кода
cSaveAlia = ALIAS()
cTablePath = ADDBS(JUSTPATH(TablePathFull))
IF !USED('QR')
USE (TablePathFull) IN 0 ALIAS QR
ENDIF
REPLACE QR_Pict WITH '' all
SCAN
cDate = ALLTRIM(QR.Str_To_URL)
GeneratePNG(cImageFileBMP, cDate, 2, 5, 0)
REPLACE QR_Pict WITH FILETOSTR(m.cImageFileBMP)
WAIT WINDOW NOWAIT 'Запись ' + ALLTRIM(STR(RECNO())) + "/" + ALLTRIM(STR(RECCOUNT())) + " обработана"
IF RECNO() > 2
EXIT
ENDIF
ENDSCAN
FLUSH
REPORT FORM QRD_Rep1 PREVIEW FOR !EMPTY(qr_pict)
GO TOP
PROCEDURE GP(tcContents)
PUBLIC loImg
loImg = CREATEOBJECT("Image")
loImg.PictureVal = m.tcContents
RETURN m.loImg
ENDPROC



Исправлено 1 раз(а). Последнее : Dutch, 05.12.19 16:43
Ratings: 0 negative/0 positive
Re: Картинка в отчете!!! Срочно
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Create Cursor (f1 date)
Create Cursor tmp (f1 date)
Insert into tmp values Date()-2
Insert into tmp values (Date()-2)
Insert into tmp values (Date()-1)
Insert into tmp values (Date()-0)
Browse
?GeneratePNG('QRPict.PNG', f1, 2, 5, 0)
?GeneratePNG('QRPict.PNG', Dtoc(f1), 2, 5, 0)
?GeneratePNG('QRPict'+Dtoc(f1)+'.PNG', Dtoc(f1), 2, 5, 0)
CREATE REPORT
Replace f1 with f1 for GeneratePNG('QRPict'+Dtoc(f1)+'.PNG', Dtoc(f1), 2, 5, 0)=.t.
Так и не понял назначения каких-то процедур с PictureVal.
Декларацию dll возьми из своего кода.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Картинка в отчете!!! Срочно
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Результат переделки твоего кода:
*Описание:
DirStart = ADDBS(JUSTPATH(SYS(16))) && Стартовый каталог. Место откуда запущен этот PRG файл
TablePathFull = DirStart + 'QR.DBF' && Путь к таблице, в которой находятся поля касающиеся QR кода
*Описание полей таблицы QR.DBF:
*Str_to_URL && строка которую надо записать в QR код (MEMO)
*QR_pict && картинка QR кода (General)
SET REPORTBEHAVIOR 90
SET DEFAULT TO ("&DirStart")
*ssa* cImageFileBMP = DirStart + "QRPict.BMP" && Путь к файлу с картинкой очередного сгенерированного QR кода
DECLARE GeneratePNG IN quricol32.dll STRING @, STRING @, INTEGER, INTEGER, INTEGER && для генераци картинки QR кода
cSaveAlia = ALIAS()
cTablePath = ADDBS(JUSTPATH(TablePathFull))
IF !USED('QR')
USE (TablePathFull) IN 0 ALIAS QR
ENDIF
REPLACE QR_Pict WITH '' all
*ssa* SCAN
*ssa* cDate = ALLTRIM(QR.Str_To_URL)
*ssa* GeneratePNG(cImageFileBMP, cDate, 2, 5, 0)
*ssa* REPLACE QR_Pict WITH FILETOSTR(m.cImageFileBMP)
*ssa* WAIT WINDOW NOWAIT 'Запись ' + ALLTRIM(STR(RECNO())) + "/" + ALLTRIM(STR(RECCOUNT())) + " обработана"
*ssa* IF RECNO() > 2
*ssa* EXIT
*ssa* ENDIF
*ssa* ENDSCAN
*ssa* FLUSH
Replace id_kvar with id_kvar for GeneratePNG('QRPict'+Padl(id_kvar,8, '0')+'.PNG', left(Str_to_url, 2000), 2, 5, 0)
*REPORT FORM QRD_Rep PREVIEW
REPORT FORM QRD_Rep1 PREVIEW FOR !EMPTY(qr_pict)
GO TOP
*ssa* PROCEDURE GP(tcContents)
*ssa* PUBLIC loImg
*ssa* loImg = CREATEOBJECT("Image")
*ssa* loImg.PictureVal = m.tcContents
*ssa* RETURN m.loImg
*ssa* EndProc
*ssa*
В отчете вызов ControlSource заменить на 'QRPict'+Padl(id_kvar,8, '0')+'.PNG'


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Картинка в отчете!!! Срочно
Dutch

Сообщений: 212
Откуда: Волгодонск
Дата регистрации: 25.10.2010
ssa
Так и не понял назначения каких-то процедур с PictureVal
Т.к. записей в таблице менее 2000, и количество записей расти не будет - картинки QR необходимо хранить в таблице, а не в файлах. А вот количество таких таблиц будет постоянно расти. Поэтому предложенный Вами вариант не подходит.
А PictureVal нужно что бы картинка в отчёте обновлялась, а не была всегда одинаковой. У всех смотрю оно работает, а у меня одного что ли нет?
Ratings: 0 negative/0 positive
Re: Картинка в отчете!!! Срочно
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Dutch
ssa
Так и не понял назначения каких-то процедур с PictureVal
Т.к. записей в таблице менее 2000, и количество записей расти не будет - картинки QR необходимо хранить в таблице, а не в файлах.
Да ради всевышнего! StrotoFile() еще никто не отменял.
Цитата:
А вот количество таких таблиц будет постоянно расти. Поэтому предложенный Вами вариант не подходит.
Не уловил логики.
Цитата:
А PictureVal нужно что бы картинка в отчёте обновлялась, а не была всегда одинаковой.
Где вы набрались такой чуши?
Цитата:
У всех смотрю оно работает, а у меня одного что ли нет?
Ни на какие мысли не наводит?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Картинка в отчете!!! Срочно
Dutch

Сообщений: 212
Откуда: Волгодонск
Дата регистрации: 25.10.2010
ssa
Да ради всевышнего! StrotoFile() еще никто не отменял.
Да, можно воспользоваться и StrotoFile(). Тогда перед созданием отчёта необходимо будет выгрузить картинку в файл и указать его в "Control source type/Image file name" картинки отчёта. Причём для каждой записи - свой файл с уникальным именем, как в Вашем примере выше. Но заказчик не хочет что бы у него регулярно создавались и удалялись тысячи файлов, если можно обойтись без этого.


ssa
Не уловил логики.
Логика в том, что бы не создавать тысячи файлов на диске, при том что этого можно избежать

ssa
Где вы набрались такой чуши?
Тут:forum.foxclub.ru
Igor Korolyov
Control source type: "Expression or variable name"
Control source: GP(csr.memo_with_image_data)

Вспомогательная процедура GP:
PROCEDURE GP(tcContents)
LOCAL loImg
loImg = CREATEOBJECT("Image")
loImg.PictureVal = m.tcContents
RETURN m.loImg
ENDPROC
Отчёт крайне желательно запускать в режиме SET REPORTBEHAVIOR 90 - иначе может быть совсем не тот результат...
Альтарнативный вариант - пихать картинку в General поле (т.е. завести исключительно для отчёта курсор с General полем и в него загонять содержимое - IMHO этот вариант "не очень"). Ещё можно пободаться с ReportListener-ом. Т.е. там прямо в коде через библиотеку gdiplus выводить содержимое "картинки".


ssa
Ни на какие мысли не наводит?
Я знаю что делаю что то не так. С этим и пытаюсь разобраться
Ratings: 0 negative/0 positive
Re: Картинка в отчете!!! Срочно
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Dutch
ssa
Да ради всевышнего! StrotoFile() еще никто не отменял.
Да, можно воспользоваться и StrotoFile(). Тогда перед созданием отчёта необходимо будет выгрузить картинку в файл и указать его в "Control source type/Image file name" картинки отчёта. Причём для каждой записи - свой файл с уникальным именем, как в Вашем примере выше. Но заказчик не хочет что бы у него регулярно создавались и удалялись тысячи файлов, если можно обойтись без этого.
А что, заказчик отслеживает создание файлов во временной папке винды? Или некоторые не умеют создавать файлы там, а не в рабочей папке программы? Ну и подчищать за собой все созданные временные файлы?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Картинка в отчете!!! Срочно
Dutch

Сообщений: 212
Откуда: Волгодонск
Дата регистрации: 25.10.2010
ssa
А что, заказчик отслеживает создание файлов во временной папке винды? Или некоторые не умеют создавать файлы там, а не в рабочей папке программы? Ну и подчищать за собой все созданные временные файлы?
Заказчик знает что они создаются. И ему это очень не нравится. Уж не знаю почему - ресурс SSD снижается или ещё из за чего. Но он задаёт вопрос - "возможно сделать так, что бы файлы не создавались?" Я говорю "Да, возможно", т.к. у остальных то оно так и работает, без создания файлов.
Ratings: 0 negative/0 positive
Re: Картинка в отчете!!! Срочно
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Ладно, было чуток времени и поковырялся с твоим кодом. Он у меня работает даже без моих изменений. Отсюда возникает подозрение, что самим фоксом что-то не то.
Что пишет
?Version(1)
Должно быть нечто такое:
Visual FoxPro 09.00.0000.7423 for Windows [Feb 23 2009 13:20:28] Product ID XXXXX-XXX-XXXXXX-XXXXX


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Картинка в отчете!!! Срочно
Dutch

Сообщений: 212
Откуда: Волгодонск
Дата регистрации: 25.10.2010
Visual FoxPro 09.00.0000.3504 for Windows [Nov 4 2005 17:39:44] Product ID 76683-335-6026662-18599
Ratings: 0 negative/0 positive
Re: Картинка в отчете!!! Срочно
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Dutch
Visual FoxPro 09.00.0000.3504 for Windows [Nov 4 2005 17:39:44] Product ID 76683-335-6026662-18599
Семён Семёныч...

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/1 positive
Re: Картинка в отчете!!! Срочно
Dutch

Сообщений: 212
Откуда: Волгодонск
Дата регистрации: 25.10.2010
Я когда изначально устанавливал себе фокс, он устанавливался уже с SP2. Но в нём не работало.
Позже я увидел это:
Igor Korolyov
тем более что PictureVal, насколько я помню, частично сломан в VFP9 SP2...
Поэтому я решил поставить SP1, в надежде что это поможет. Но это не помогло.
И вот только сейчас я решил скачать SP2 с сайта майкрософта тут: www.microsoft.com
Стало так: Visual FoxPro 09.00.0000.5815 for Windows [Oct 15 2007 09:11:06] Product ID 76683-335-6026662-18599
И всё заработало. Спасибо Вам ssa за помощь и затраченное время
Ratings: 0 negative/0 positive
Re: Картинка в отчете!!! Срочно
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Ну вот, уже лучше. Но до указанной мной версии лучше таки довести.
Ну и код бы причесать, много уж там всяких лишних, по моему мнению , движений.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 22 shumik73  (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика