注册 登录
编程论坛 VFP论坛

连编与打包

heibaochen 发布于 2023-05-15 17:53, 1358 次点击
程序连编后能正常运行,如下:
只有本站会员才能查看附件,请 登录


页面中是两个图象控件,两张JPG图片。

连编前在VFP的源项目文件夹中能正常显示;连编后也能正常显示。

但,拷到别的机器上后(有运行库),图片无法显示,其他一切正常。

这两张图片是存储在数据库中数据表中某个Blob字段中的,呃,不知道问题出在哪里。
15 回复
#2
laowan0012023-05-15 21:26
建议:图片保存在memo字段里,不会出现这样的问题
#3
heibaochen2023-05-15 22:23
回复 2楼 laowan001
试过了不行,下面是代码,小白努力学习中
在page4的init事件,pict1是字段名
程序代码:

USE classes IN 1
GO TOP
Thisform.pageframe1.page4.image1.PictureVal = pict1
SKIP
Thisform.pageframe1.page4.image2.PictureVal = pict1
CLOSE TABLES


[此贴子已经被作者于2023-5-15 22:25编辑过]

#4
sdta2023-05-15 22:25
是不是路径设置问题
#5
heibaochen2023-05-15 22:29
回复 4楼 sdta
也考虑到了,但有个问题卡住了

这是主程序中路径的部分
程序代码:

PUBLIC LCSys16,LCNowpath
LCSys16=SYS(16) &&获取当前程序所在的全路径,包括当前运行程序名。
LCNowpath=LEFT(LCsys16,RAT("\",LCSys16,1)) &&获取当前运行程序所在工作目录。
SET DEFAULT TO (LCNowpath) &&程序文件所在的当前路径


然后在page4的init事件中
程序代码:

lj1=LCNowpath+"logo.jpg"
lj2=LCNowpath+"mepic.jpg"

Thisform.pageframe1.page4.image1.Picture =  &lj1

Thisform.pageframe1.page4.image2.Picture =  &lj2


卡在这里了,它提示找不到LCNowpath全局变量,我整不会了……
(用这个是想绕开字段的办法,直接用image的picture属性。)

[此贴子已经被作者于2023-5-15 22:32编辑过]

#6
shizi02023-05-15 22:57
程序自己显示用到的的图片、图标等,不是用户数据,属于“程序”本身,要作为资源文件包含在项目中【项目管理器-其他-文本文件&其他文件】。
这些资源,程序代码如果有调用,可以忽略路径
#7
heibaochen2023-05-15 23:36
回复 6楼 shizi0
只有本站会员才能查看附件,请 登录

用到的两个图片文件,如此。
#8
shizi02023-05-15 23:47
对于编译后exe来说:既然图片包含在项目中了,那代码调用就不需要路径,直接=文件名即可。如楼主语句应为:
Thisform.pageframe1.page4.image1.Picture =  "logo.jpg"

那怎么解决开发时交互环境的调试呢?set path to 所有资源文件+程序文件路径。大体如下:
If _vfp.Startmode=0  &&交互调试
    AddPath=_pubPath+[;]+_PrgPath+[;]+_PubPath+[Img\;]+_PubPath+[ico\;]+_PubPath+[ani\;]+Justdrive(_Path)+[\Api\;]+_PrgPath+[CW\;]+_PrgPath+[ZH\]
    Set Path To "&AddPath" Additive
Endif
#9
heibaochen2023-05-16 00:02
回复 8楼 shizi0
为方便打包,程序也是练手,所有的资源都在一个文件夹里呢。
#10
laowan0012023-05-16 08:00
* 保存时
xstr=filetostr('mepic.jpg')
replace pict1 with strconv(xstr,13)

* 使用时
strtofile(strconv(alltrim(pict1),14),磁盘文件名)
Thisform.pageframe1.page4.image1.Picture = 磁盘文件名
#11
hu9jj2023-05-16 08:56
应该还是图片文件的路径问题。
#12
heibaochen2023-05-16 23:02
回复 10楼 laowan001
我还在外面忙,等明天按您的办法搞一下子
#13
heibaochen2023-05-17 22:40
回复 10楼 laowan001
用您的办法解决了应该是二进制的编码格式问题,多谢。

但做为学习,我还是想弄明白,用blob字段和image控件pictureval的配合使用,为什么就不能正常显示呢?
#14
laowan0012023-05-18 07:57
以下是引用heibaochen在2023-5-17 22:40:39的发言:

用您的办法解决了应该是二进制的编码格式问题,多谢。

但做为学习,我还是想弄明白,用blob字段和image控件pictureval的配合使用,为什么就不能正常显示呢?

blob字段没用过,上面的方法可行,而且挺可靠的,所以一直就用了
#15
吹水佬2023-05-18 09:57
VFP的“二进制”数据,通常是指以 0h 开头由十六进制字符表示的数据,如:0h0123456789ABCDEF
这样试试:
CREATE CURSOR classes (pict1 W)
INSERT INTO classes VALUES (CREATEBINARY(FILETOSTR("mepic.jpg")))
_screen.AddObject("image1","image")
_screen.image1.PictureVal = pict1
_screen.image1.Visible = .t.
WAIT WINDOW
_screen.RemoveObject("image1")
 
#16
heibaochen2023-05-18 20:50
回复 15楼 吹水佬
试过了,也好用,多谢。
1