前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于PowerBuilder的搜索

PowerBuilder中图片文件的处理_砥砺_逸凡_新浪博客 加载中… 砥砺_逸凡的BLOG http://blog.sina.com.cn/u/1076632110 [订阅][手机订阅] 首页 博文目录 图片 关于我 个人资料 砥砺_逸凡 Qing 微博 加好友 发纸条 写留言 加关注 博客等级: 博客积分:100 博客访问:4,395 关注人气:0 天天美食 精彩图文 相关博文 更多>> 推荐博文 『名人面对面』野夫:记忆对抗遗 许戈辉 新媒体取代旧媒体是大势所趋 李银河 忽悠与细节 花总丢了金箍棒 乙肝携带者雷闯:恳请您在广东省 雷闯 安倍与“不战誓言”纠葛意在开战 蒋丰 打贪官,不能光等露头 高路VVV 查看更多>> 谁看过这篇博文 加载中… 正文 字体大小:大 中 小 PowerBuilder中图片文件的处理 (2006-03-24 21:14:50)转载▼ PowerBuilder中图片文件的处理 杨勤 莫国庆 摘 要 文章总结了在PowerBuilder应用程序中处理图片文件的两种方法:PowerBuilder语句加Picture控件以及OLE列加OLE控件。作者从图片的存储、显示与缩放三方面对这两种方法进行了较深入的讨论。关键词 PowerBuilder  图片文件  Picture控件  OLE Processing Picture File in PowerBuilder Yang Qin  Mo Guoqing   Abstract:Two methods to handle picture files in PB applications are illustrated in this paper. The first is using the PB clauses with picture control, and the second is using OLE column with OLE control. The discussion on both methods is unfolding in three steps: how to store, how to display and how to zoom pictures.  Key words:PowerBuilder  picture file  picture control  OLE   图片是数据库应用系统中常用的一种数据。图片处理主要涉及如何存储、显示和缩放图片等问题。比如,在人事管理信息系统中就要考虑如何对人员照片进行存储、显示和缩放。PowerBuilder(或简称PB)7.0以前的版本只能处理BMP格式的图片,PB7.0版本中可以处理JPG格式图片。在PB应用程序中这两种格式的图片数据都作为Blob数据类型进行处理。在PB应用程序的开发实践中,笔者发现了两种处理图片文件的方法:一种方法是使用PB提供的语句(SelectBlob和UpdateBlob)加Picture控件进行存取处理;另一种方法是在数据窗口中创建OLE列加OLE控件的方法。 1 PB语句加Picture控件的方法   Picture控件主要用于显示图片,将该控件的PictureName属性指定图片文件名(扩展名可以是BMP或JPG),即可显示图片。这里以处理人员照片为例,对如何存储和显示照片作详细的介绍。  .人员照片的存储  (1) 使用GetFileOpenName函数得到图片文件名称,放入变量窗口示例变量filename中;  GetFileOpenName(″打开照片文件″,filename, named, ″bmp″, ″照片图形文件(..bmp),..bmp,照片图形文件(..jpg),..jbp″)  (2) 利用文件操作函数将文件读进BLOB类型的变量中;int handle, loops, ilong file-len, bytes-read, new-posblob p1, p2file-len=fileLength(filename)handle=FileOpen(filename, STREAMMODE!,READ!,LOCKREAD!)//计算读文件次数,最多只能读32 k的数据if file-len>32765 thenif Mod(file-len, 32765)=0 thenloops=file-len/32765elseloops=(file-len/32765)+1end ifelseloops=1end if//读文件for i=1 to loopsbytes-read=FileRead(handle,p1)p2=p2+p1new-pos=new-pos+bytes-readFileSeek(handle, new-pos, FROMBEGINNING!)nextFileClose(handle)  (3) 利用UPDATEBLOB语句将图片存储进数据表Person中,设该表有以下主要字段(列):P-Number, Char(4), Not Null, 主关键字,人员编号P-Name, Varchar(30), Not Null, 人员姓名P-Picture, Blob, Null, 人员照片……UPDATEBLOB Person SET P-Picture=:p2WHERE P-Number=′0001′ USING SQLCA;  .人员照片的显示  (1) 用SELECTBLOB语句读取图片数据进BLOB变量中Blob PicSELECTBLOB P-Picture INTO :PIC FROM PersonWHERE P-Number=′0001′ USING SQLCA;.  (2) 通过Picture控件函数SetPicture显示图片。P-out.SetPicture(Pic) //P-out为控件 2 OLE列加OLE控件的方法   .人员照片的存储  (1) 使用GetFileOpenName函数得到图片文件名称,放入变量filename中;  GetFileOpenName(″打开照片文件″,filename,named,″bmp″,″照片图形文件(..bmp),..bmp,照片图形文件(..jpg),..jpg″)  (2) 利用OLE控件将图片文件嵌入到OLE对象中。value=ole-1.InsertFile(filename) //OLE-1为OLE控件if value=0 then //文件传送到OLE容器成功//根据需要设置OLE控件容器的有关属性ole-1.Activation=activatemanually!ole-1.Border=falseole-1.DragAuto=falseole-1.FocusRectangle=falseole-1.Resizable=falseole-1.Bring To Top=falseole-1.Enabled=falseole-1.IsDragTarget=falsebeep(16)MessageBox(″提示信息″,″向OLE容器传输数据成功!″)elseMessageBox(″出错信息″,″向OLE容器传输数据失败!″,stopsign!)end if  (3) 将图片存入到数据表Person中photo=ole-1.ObjectData //图片数据送BLOB变量UPDATEBLOB Person SET P-Picture=:photoWHERE P-Number=:′0001′;  .人员照片的显示  (1) 创建数据窗口dw-zpxs,数据源选择QuicSelect,显示风格选择Tabular,全选表Person所有的列。  (2) 选择OLE DataBase Blob对象,则系统自动显示DataBase Blob Object对话框的Definition页,其中:Clients Class:默认值为Datawindow;Client name:默认值为UntitledTable:包含Blob列的表名,为PersonLarge Binary/Text Columns: Blob列名,为P-PictureKey Clause:指定where条件,为P-Number=:P-NumberFile Template:为空值OLE Class:指定应用类,第三方工具,为画笔Pbrush,Client Name Express:为Blob列的每行赋予唯一的字符串,通常为主关键字  (3) 定义数据窗口dw-zpxs的Retrieve函数的输入参数,列名P-Number为参数。  (4) 上述数据窗口创建完后,使用dw-zpxs.retrieve(′0001′)函数即可看到图片。 3 图片的动态缩放   必要时我们可以对所显示的图片进行放大与缩小处理,用上述两种方法均可实现图片的动态缩放。  对Picture控件可以通过修改其高度(Height)和宽度(Weight)属性值来实现,根据显示比例将高度和宽度值进行换算,然后重新赋值即可。具体实现是:设图片原来的高度和宽度大小分别为h-old和w-old,并设显示比例为per,则Picture控件的新高度和新宽度属性值应修改为h-old . per和w-old . per。  采用OLE列方法时利用数据窗口的Modify函数,通过修改数据窗口对象的Zoom属性来实现。初始时数据窗口中显示的图片是正常大小的,故显示比例是100%,假设现显示比例为per%,则下面语句可以实现按per的比例显示图片:dw-zpxs.modify(″datawindow.zoom=′per′″)比如,若要按150%比例显示,则语句应为:dw-zpxs.modify(″datawindow.zoom=′150′″)  比例值的动态变化可通过SingleLineEdit控件和VscrollBar控件实现,SingleLineEdit控件用于显示比例值(百分比值),VscrollBar控件表示比例值的增减变化。在SingleLineEdit控件的Modified事件中书写修改脚本。采用Picture控件方法则修改Picture控件高度与宽度,而采用OLE列方法则修改数据窗口对象的Zoom属性。 4 结 束 语   应用系统中采用哪一种方法处理图片文件取决于系统本身,用Picture控件的方法简单方便,而用OLE列的方法则比较灵活,还可借助第三方工具修改图片。但值得注意的是,上述两种方法实现时不能混用,即若用Picture控件方法存储图片,则不能用OLE列方法显示图片;同样地,若用OLE列方法存储图片,则不能用Picture控件方法显示图片。 主要从事电信交换、程序设计方面的教学与科研工作。主要从事计算机操作系统、数据库应用方面的教学与科研工作。杨 勤(解放军理工大学通信工程学院讲师 南京 210016)莫国庆(解放军理工大学计算机与指挥自动化学院讲师 南京 210016) 参考文献1,Simon Gallagher. Simon Herbert. 康博创作室译. PowerBuilder 6.0程序设计大全. 北京: 机械工业出版社, 1998.2,张长富,李 匀,严苏娅. PowerBuilder 6.0用户参考手册. 北京: 希望电脑公司, 1998.3,PowerBuilder实用开发技巧. 北京: 晓通数据研究与发展中心, 1998. 收稿日期:2000-01-19 文章引用自:http://www.wanfangdata.com.cn/qikan/periodical.Articles/dnxx/dnxx2000/0005/000518.htm 分享: 喜欢 阅读┊ 评论 ┊ 收藏 ┊转载 ┊ 喜欢▼ ┊打印┊举报 加载中,请稍候...... 前一篇:(老贴)天堂向左 华硕向右--2 后一篇:关于PowerBuilder的一些站点 评论 重要提示:警惕虚假中奖信息 | [发评论] 评论加载中,请稍候... 发评论 | 登录名: 密码: 找回密码 注册 记住登录状态昵 称: 分享到微博 评论并转载此博文验证码: 请点击后输入验证码 收听验证码 匿名评论 发评论 以上网友发言只代表其个人观点,不代表新浪网的观点或立场。 < 前一篇(老贴)天堂向左 华硕向右--2 后一篇 >关于PowerBuilder的一些站点 新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正 新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑 Copyright &copy; 1996 - 2014 SINA Corporation, All Rights Reserved 新浪公司 版权所有