[想了几天了]PB窗口显示.jpg图片

showilove 2010-09-19 10:32:11
需求:实现PB图片显示,不管是window还是datawindow能显示就行

图片格式为.jpg,存放于局域网内一服务器共享文件夹内,IP:192.168.1.23。
涉及两个数据库中三张表,数据库1中table1,table2中pic_key_id字段对应数据库2中table3字段key_id
table2

Project_name item pic_key_id
A 01 aaa
A 02 bbb
A 03 ccc
B

table3

key_id pic_path pic_name
aaa picture\20100919 aaa1.jpg
aaa picture\20100919 aaa2.jpg
aaa picture\20100919 aaa3.jpg
bbb picture\20100917 bbb1.jpg
ccc picture\20100918 ccc1.jpg
ccc picture\20100919 ccc2.jpg
.....
//http://92.168.1.23/picture/20100919/aaa1.jpg url可以打开图片

窗口中dw_1对应table1中项目的相关信息,按Project_name显示;dw_2对应table2中数据,当dw_1数据为A时,dw_2显示A对应的3条数据。前面这些都已经实现,现在我想得到这样的结果:当dw_1中为A时,pw_3中显示item,01,02,03 对应的所有图片(个数不固定),如果不用数据窗口显示,动态控件的方式也可以。
效果:图片横向排列显示(能控制每行显示的个数最好),不要通过滚动条单个显示

请大家多多指教,分不够可以再加
...全文
541 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
showilove 2010-09-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yingmu 的回复:]

用数据窗口对象恐怕不好办,因为你实际上要求的每一行的图片个数是不一定的(特别是在窗口resize的时候,可能同一个Project_name在一行中显示的图片个数就不一样。
我试过两种方案,一种是用PB自带的ListView控件,在更改当前Project_name的时候在自定义方法里刷新ListView控件的图片索引和项,即它的LargePictrue[](DeleteLargePictures……
[/Quote]
感谢你提供的思路
sjlion 2010-09-19
  • 打赏
  • 举报
回复
方法一.建计算域,表达式为bitmap(string)函数.
Description

Displays the specified bitmap.
For computed fields only You can use the Bitmap function only in a computed field.

Syntax

Bitmap ( string )

Argument Description
string A column containing bitmap files, a string containing the name of an image file (a BMP, GIF, JPEG, RLE, or WMF file), or an expression that evaluates to a string containing the name of an image file.
Return value

The special data type bitmap, which cannot be used in any other function.

Usage

Use Bitmap to dynamically display a bitmap in a computed field. When string is a column containing bitmap files, a different bitmap can display for each row.

方法二.动态创建bitmapobject。

不过你的需求方法一就很合适
xiaozhe_song 2010-09-19
  • 打赏
  • 举报
回复
imagelist控件~
leadtools提供~
甚至可以加载多页tif文件~
JY创建美好 2010-09-19
  • 打赏
  • 举报
回复
看了2遍,没看明白,帮你顶。
showilove 2010-09-19
  • 打赏
  • 举报
回复
忘说了,用的PB9
yingmu 2010-09-19
  • 打赏
  • 举报
回复
用数据窗口对象恐怕不好办,因为你实际上要求的每一行的图片个数是不一定的(特别是在窗口resize的时候,可能同一个Project_name在一行中显示的图片个数就不一样。
我试过两种方案,一种是用PB自带的ListView控件,在更改当前Project_name的时候在自定义方法里刷新ListView控件的图片索引和项,即它的LargePictrue[](DeleteLargePictures()和AddLargePicture())和item[](DeleteItems()和AddItem()),然后顺序为ListView指定新的LargePictrue[]并加入新的Item,为每个Item指定对应的LargePicture,这种方法的好处在于你不用写代码控制每行显示多少个的问题,ListView会自动帮你排,缺点是如果你想写特殊的应用处理就不好办了,扩展性不好。一种呢,完全自己写,要写两个用户对象,一个是作为项,一个作为容器,项也可以不用写,直接用PB的picture也可以,给容器写方法,插入和删除项,插入的时候用openuserobject来插入,同时用一个数组来记录,要注意的是,在openuserobject后,要用setparent方法把插入的项的父对象指定为容器对象,因为只有窗口才有openuserobject方法,用openuserobject生成的对象实际上是以窗口为父容器的,所以要用setparent指定给容器对象,而在删除项的时候先用setparent把项的父对象指定为窗口,然后再用closeuserobject删除项(在窗口关闭的时候,要用closeuserobject把所有项都删除,否则会一直占着内存)。还要给容器对象写uf_resize方法(名称随便,我习惯这样写),用来根据项的宽度和容器的宽度来判断一行放几个(容器的宽度减去左右加上一个两项间的距离然后除项的宽度加两项间的距离然后取整,如果为零就为1),用两个循环用move方法摆就是了。最麻烦的是加滚动条(用listview方便啊还是),需要根据滚动条的位置来设置容器的顶座标,与滚动条的滚动方向反方向move各项(实际上只会用到竖滚动条)。
大体就这样子了,你自己先写写看,如果不行可以问告诉我,实在不行我就把我写的两个用户对象发给你参照着看看(不过没有说明,也是写给别人用的)。
wag_enu 2010-09-19
  • 打赏
  • 举报
回复
复杂的是要计算每行的图片数。。。

1,076

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧