在PB中方便的实现图片动态切换
- 格式:doc
- 大小:23.50 KB
- 文档页数:3
PB窗口使用技巧之增强窗口显示效果一、窗口最小化时设置动态图标二、放置闪烁文字三、提高窗口的打开速度四、移动不带标题栏的窗口五、闪烁窗口标题栏六、给窗口添加自动滚动条功能窗口是应用程序中一个非常重要的界面,界面设计的大部分工作体现在窗口界面的设计中。
所以,在不影响功能的前提下,提倡给用户提供更有提示性的、更美观的界面。
常用的手段是动画、声音等,下面介绍这些常用的方法。
一、窗口最小化时设置动态图标当应用程序最小化时,程序的图标如果是动画的,肯定更能吸引用户的注意,视觉效果会更好。
方法是通过动态修改程序的图标来实现。
当程序最小化时打开timer(在deactive中加入timer(1)语句),并在timer事件中编写如下程序:If This.Icon = 'appico.ico' ThenThis.Icon = 'reverse.ico'ElseThis.Icon = 'appico.ico'End If程序激活时关闭Timer事件(在Active事件中加入timer(0)语句)。
需要注意,要将上面用到的两个ico文件放到当前应用程序的目录中。
二、放置闪烁文字以闪烁文字显示重要信息可以吸引用户的注意力,避免这些重要信息被忽略。
通过周期性修改visible属性,可以实现闪烁效果。
在窗口中,假设放置一个静态文本st_1,在窗口的Open事件中定义Timer事件的间隔:Timer(1)然后,在窗口的Timer事件中定期修改静态文本的visible属性:If Mod(Second(Now()),2) = 1 Thenst_1.visible = FalseElsest_1.Visible = TrueEnd If这样就可以实现闪烁效果。
当然也可以在适当的时候使用timer(1),并在适当的时候关闭Timer事件。
三、提高窗口的打开速度在窗口的Open事件中经常编写脚本来进行初始处理工作,如果这些工作花费的时间比较长,在窗口显示之前用户就得等待很长的时间。
PB中实现动画特效API函数声明如下:1〕function uint GetDC(uint hwnd) library "c:\windows\system\user32.dll"//取得一个显示器设备描述表。
参数hwnd标识将绘图的窗口的句柄。
若成功,则返回指定窗口的设备描述表,若失败,则返回为NULL。
2〕function long BitBlt(uint hdcdest,int xdest,int ydest,int wdest,int hdest,uint hdcsrc,int xsrc,int ysrc,ulong dwrop) library "c:\windows\system\gdi32.dll"//将源设备描述表中的图片转移到目的设备描述表中。
参数hdcdest标识图象转移的目的DC,xdest和ydest标识目的DC的位置,wdest和hdest标识图象的宽度与高度,hwndsrc标识图象转移的来源DC,xsrc和ysrc标识来源DC的位置,dwrop标识图象转移方式。
若成功返回值为0,若失败返回值为非零。
3〕function long StretchBlt(uint hddest,int xdest,int ydest,int wdest,int hdest,uint hdsrc,int xsrc,int ysrc,int wsrc,int hsrc,ulong dwrop) library "c:\windows\system\gdi32.dll"//将源设备描述表中的图片放大、缩小、翻转、转移到目的设备描述表中。
参数意义同BitBlt中的参数意义相同,多出的wsrc和hsrc为来源图象的宽度与高度。
4〕function ulong ReleaseDC(ulong hwnd,ulong hdc) library "c:\windows\system\user32.dll" //将由GetDC取得的设备描述表释放掉。
PB中窗体动态效果的实现---------------------------------// 实现关闭窗体时的动态效果// -------------------------------// 函数名:gf_closequery// 参数说明:// window window类型,调用窗口的名字// closetype integer类型,窗口关闭方式,value = 0~10 // -------------------------------// 申明局部变量int li_x ,li_y,li_width,li_height,li_ceny,li_cenx,li_xminusy,li_wminush Integer li_gd// 取出当前窗口的坐标值、大小值li_x = window.xli_y = window.yli_width = window.widthli_height = window.height// 设置窗体关闭前的动画效果// 关键是看哪个值发生了变化——x、y、h、wCHOOSE CASE closetypeCASE 0 // closetype = 0,从下到上逐渐消失for li_gd = li_height to 0 step -1window.height = li_gdwindow.show()nextCASE 1 // closetype = 1,从上到下逐渐消失for li_gd = li_y to li_height+li_y step 1window.y = li_gdwindow.height = li_height+li_y - li_gdwindow.show()nextCASE 2 // closetype = 2,从右到左逐渐消失for li_gd = li_width to 0 step -1window.width = li_gdnextCASE 3 // closetype = 3,从左到右逐渐消失for li_gd = li_x to li_x+li_width step 1window.x = li_gdwindow.width = li_x+li_width - li_gdwindow.show()nextcase 4 // closetype = 4,从上下向中间挤压逐渐消失li_ceny = li_y+li_height/2for li_gd = li_y to li_ceny step 1window.y = li_gdwindow.height = li_height - 2*(li_gd - li_y)nextcase 5 // closetype = 5,从左右向中间挤压逐渐消失li_cenx = li_x+li_width / 2for li_gd = li_x to li_cenx step 1window.x = li_gdwindow.width = li_width - 2*(li_gd - li_x)nextcase 6 // closetype = 6,从左上->右下for li_gd = li_y to li_height+li_y step 1window.y = li_gdwindow.height = li_height+li_y - li_gdif window.x < li_x + li_width thenwindow.x = li_x + (li_gd - li_y)elsewindow.x = li_x + li_widthend ifif window.width > 0 thenwindow.width = li_x+li_width - window.xelsewindow.width = 0end ifnextwindow.x = li_x + li_widthwindow.y = li_height+li_ywindow.width = 0window.height = 0window.show()case 7 // closetype = 7,从右下->左上for li_gd = li_height to 0 step -1window.height = li_gdif window.width > 0 thenwindow.width = li_width - (li_height - li_gd)elsewindow.width = 0end ifnextwindow.x = li_xwindow.y = li_ywindow.width = 0window.height = 0window.show()case 8 // closetype = 8,从右上->左下for li_gd = li_y to li_height+li_y step 1 window.y = li_gdwindow.height = li_height+li_y - li_gdif window.width > 0 thenwindow.width = li_width - (li_gd - li_y) elsewindow.width = 0end ifnextwindow.x = li_xwindow.y = li_height+li_ywindow.width = 0window.height = 0window.show()case 9 // closetype = 9,从左下->右上for li_gd = li_x to li_x+li_width step 1 window.x = li_gdwindow.width = li_width +li_x -li_gdif window.height > 0 thenwindow.height = li_height -(li_gd - li_x) elsewindow.height = 0end ifnextwindow.x = li_x+li_widthwindow.y = li_ywindow.width = 0window.height = 0window.show()case 10 // closetype = 10,从四面到中间li_ceny = li_y+li_height/2li_cenx = li_x+li_width / 2for li_gd = li_y to li_ceny step 1window.y = li_gdwindow.height = li_height - 2*(li_gd - li_y) if window.x < li_x + li_cenx thenwindow.x = li_x + (li_gd - li_y)elsewindow.x = li_x + li_cenxend ifif window.width > 0 thenwindow.width = li_width - 2*(li_gd - li_y)elsewindow.width = 0end ifnextwindow.x = li_cenxwindow.y = li_cenywindow.width = 0window.height = 0window.show()case elsewindow.show()window.width = li_widthwindow.height = li_heightwindow.x = li_xwindow.y = li_yEND CHOOSEreturn 0************************// 调用该函数在窗体的closequery 事件中gf_closequery (w_main,mod(integer(string(now(),"ss")),11))。
PB数据窗口技巧大全PB数据窗口是PowerBuilder语言中的一种常用控件,用于显示和操作数据。
在实际项目开发中,掌握一些PB数据窗口的技巧能够提高开发效率和用户体验。
下面是一些常用的PB数据窗口技巧的详细介绍,包括动态数据源、处理数据更新、格式化数据、控制数据窗口行为等方面。
1. 动态数据源:PB数据窗口支持通过修改SQL语句和参数实现动态查询。
可以通过修改dw_1.sqlsyntax和dw_1.settransobject等属性实现动态数据源切换或过滤。
2. 处理数据更新:PB数据窗口提供了一些方法来处理数据的插入、更新和删除。
可以使用dw_1.insertrow、dw_1.updaterow和dw_1.deleterow等方法来实现数据的增删改操作。
3. 格式化数据:PB数据窗口提供了一些格式化数据的方法,可以通过修改数据窗口列的format属性来实现对数据的格式化。
例如,可以使用dw_1.modify表示列的format属性来自定义数据的显示格式。
4. 排序和过滤数据:PB数据窗口提供了排序和过滤数据的功能。
可以通过修改dw_1.setsort和dw_1.setfilter等方法实现对数据的排序和过滤。
5. 控制数据窗口行为:PB数据窗口提供了一些属性和方法来控制数据窗口的显示效果。
例如,可以使用dw_1.retrieve来重新检索数据,使用dw_1.setitemstatus来设置数据窗口的状态等。
6.多表连接查询:PB数据窗口支持多表连接查询,可以通过在SQL 语句中使用连接符号和条件来实现多表连接查询的功能。
7.数据窗口插入计算列:PB数据窗口支持插入计算列,可以通过在SQL语句中使用函数和表达式来插入计算列实现对数据的计算和处理。
8.数据窗口多级分组:PB数据窗口支持多级分组,可以通过在数据窗口中设置分组列和聚合函数来实现数据的分组和统计。
9.数据窗口嵌套:PB数据窗口支持嵌套,可以在一个数据窗口中插入另一个数据窗口,实现数据的嵌套显示和处理。
照片轮播教程:Adobe Premiere Pro图片切换技巧在现代社交媒体的兴起中,照片轮播成为了一种流行的方式来展示我们生活中的美好瞬间。
而Adobe Premiere Pro软件作为一款强大的视频编辑工具,可以帮助我们制作出精美的照片轮播视频。
本篇文章将向大家介绍一些Adobe Premiere Pro中的图片切换技巧,帮助大家提高制作照片轮播视频的效果。
首先,打开Adobe Premiere Pro软件,创建一个新的项目。
然后将你想要制作成照片轮播视频的图片素材导入到项目中。
可以通过“文件”->“导入”->“文件”来实现。
一旦图片导入完成,将它们拖拽到序列面板中。
在序列面板中,你可以调整图片的顺序以及每张图片显示的时间长度。
这里建议设置每张图片的显示时间在3-5秒之间,以保证整个照片轮播视频能够有足够的展示时间。
接下来,我们要为照片切换添加一些过渡效果,使得视频更加平滑流畅。
在 Effects 面板中搜索“Dissolve”类型的过渡效果,选取合适的过渡效果应用到图片之间的切换。
这样可以使得图片的切换更加自然,让观众眼前一亮。
除了过渡效果,我们还可以为照片添加一些动画效果,让视频更加生动。
首先,在效果控制面板中选中要添加动画效果的图片,然后点击“移动”选项,我们可以选择移动的方向,包括上、下、左、右等,也可以选择放大或缩小的效果。
调整好参数后,点击应用,图片就会带有动画效果。
除了单张图片的动画效果,我们还可以为整个视频增添一些整体的动画效果。
在效果控制面板中选择“视频效果”->“滚动镜头”,我们可以为整个视频添加镜头滚动的效果,让视觉效果更加震撼。
此外,Adobe Premiere Pro还提供了丰富的滤镜效果可以应用到照片上,比如黑白、马赛克等,给照片增添不同的风格。
在应用滤镜效果之前,我们需要在“左侧项目面板”中选中要添加滤镜效果的图片,然后在“右侧效果控制面板”中选择相应的滤镜效果,调整参数后点击应用即可。
pbsetitembackground用法pb setItemBackground是一个Python Pillow库的函数,用于在图像处理过程中设置图像中像素的背景颜色。
该函数可以接受一个像素坐标和一个颜色值作为参数,并将像素的背景颜色设置为指定的颜色。
该函数的用法如下:```pb.setItemBackground(xy, color)```其中,参数xy是一个包含x坐标和y坐标的元组或列表,表示要设置背景颜色的像素的坐标。
参数color是一个表示颜色的元组或列表,可以包含RGB或RGBA值。
例如,(255, 0, 0)表示红色,(0, 255, 0, 128)表示半透明的绿色。
下面是一个使用pb.setItemBackground函数的示例代码:```pythonfrom PIL import Imagedef set_background(image_path, xy, color):#打开图像image = Image.open(image_path)edited_image = image.copy#获取图像的像素pixels = edited_image.load#获取要设置背景颜色的像素坐标x, y = xy#设置像素的背景颜色pixels[x, y] = color#保存修改后的图像edited_image.save("edited_image.png")```您可以使用以上的示例代码作为起点,根据自己的需求对图像进行处理和修改。
您可以选择不同的坐标和颜色值来实现特定的效果,例如在图像的一些位置添加一个指示标记或者将背景颜色更改为特定的色彩效果。
使用pb.setItemBackground函数,您可以很方便地对图像进行定制化的处理,实现各种独特的图像效果。
存取二进制大对象(独孤求败二零零四年一月二十三日整理于深圳市南山区)在数据库应用的开发过程中,经常要在数据库中存储一些备注信息,而这些备注信息的内容一般较大,格式多样,有可能是图像、语音文件、视频文件等,在PB中可以使用OLE的方法,也可以直接用脚本处理。
本文介绍用脚本来处理,数据库是ASA8的,附件里有表的设计,文中省略。
1、建立一个工作空间(workspace),取名为:blob。
2、建立一个应用(application),取名为:blob。
3、设计一个表blobtest,其字段定义如下:Column Name Data Type Width Null CommentNo Integer No 号码Name Varchar 10 No 姓名Photo Long Binary Null 照片4、建立一窗口w_input,内置如下控件:控件名类型说明sle_no SingleLineEdit 输入号码sle_name SingleLineEdit 输入姓名cb_select_photo Command Button 选择照片文件sle_photo SingleLineEdit 显示照片文件名cb_save Command Button 保存记录(本文只有插入)cb_query Command Button 查询cb_exit Command Button 退出P_1 Picture 显示照片界面如下:5、编写脚本1)、cb_select_photo的clicked事件:string ls_photofilestring ls_namedinteger li_value//选择照片文件li_value = GetFileOpenName("选择图片文件", &+ ls_photofile, ls_named, "图片文件", &+ "BMP Files (*.BMP),*.BMP," &+ "JPG Files (*.JPG),*.JPG")sle_photo.text = ls_photofilep_1.Picturename = ls_photofile2)、cb_save的clicked事件:(本文只处理了新增记录,有兴趣的朋友可以完善他)long ll_nostring ls_namestring ls_photofileinteger li_filenuminteger li_loopsinteger li_counterlong ll_filelenblob lb_readblob lb_pictureIf sle_no.text = '' or sle_name.text = '' or sle_photo.text = '' then returnll_no = long(sle_no.text) //号码ls_name = sle_name.text //姓名ls_photofile = sle_photo.text //照片文件//插入记录,先写no,name字段Insert into blobtest (no,name)values (:ll_no, :ls_name);If sqlca.sqlcode = -1 thenRollback;Messagebox('插入记录出错',Sqlca.Sqlerrtext)ReturnElseCommit;End if// 获取文件的大小ll_filelen = FileLength(ls_photofile)//打开文件li_filenum = FileOpen(ls_photofile,STREAMMODE!, READ!,LOCKREAD!)/*FileRead() 函数不支持读取大于32K 的文本,计算将使用 FileRead 函数的次数*/IF ll_filelen > 32765 THENli_loops = ( (ll_filelen - 1) / 32765 ) + 1ELSEli_loops = 1END IF//读文件FOR li_counter = 1 to li_loopsFileRead(li_filenum, lb_read )lb_picture = lb_picture + lb_readNEXTFileClose(li_filenum)//显示图片p_1.SetPicture(lb_picture)//写入数据库UPDATEBLOB blobtestSET photo = :lb_pictureWHERE no = :ll_no;IF Sqlca.SQLNRows > 0 THENCOMMIT;Messagebox('提示信息','记录保存成功!')ElseRollback;Messagebox('提示信息','记录保存成功,照片文件保存失败!' + sqlca.sqlerrtext) END IF3)、cb_exit的clicked事件:close(parent)4)、cb_query的clicked事件:blob lb_picturelong ll_Noif sle_no.text = '' then returnll_no = long(sle_no.text) //号码SelectBlob photoInto :lb_pictureFrom blobtestwhere no = :ll_no;//显示图片p_1.SetPicture(lb_picture)。
一、PB importfile简介PB importfile是一个在软件开发中常用的命令,用于将外部文件导入到PB文档中。
PB importfile命令可以帮助开发人员快速、方便地将各种文件导入到PB文档中,为软件开发工作提供了很大的便利。
二、PB importfile的使用场景1. 在软件开发过程中,经常需要将一些外部文件导入到PB文档中,以便于统一管理和查看。
这些外部文件可以是各种类型的文档、图片、视频等。
2. 在进行代码审查或者团队协作时,经常需要与团队成员共享一些外部文件,PB importfile可以很好地解决这个问题,使得团队成员能够方便地获取所需的文件。
3. 对于一些需要频繁更新的文件,例如产品需求文档、UI设计稿等,PB importfile可以很好地支持文件的版本管理,保证所有成员都使用最新的文件。
三、PB importfile的基本用法1. 使用PB importfile命令需要在PB编辑器中打开文档,并进入编辑模式。
在编辑模式下,通过命令菜单或者快捷键输入"PB importfile"命令即可调出文件导入窗口。
2. 在文件导入窗口中,可以选择需要导入的文件,并设置导入的选项,例如文件是否需要压缩、是否需要保留原文件路径等。
3. 点击确认按钮后,PB importfile命令会将选定的文件导入到当前文档中,并在文档中生成对应的信息。
通过这些信息,用户可以方便地查看或者编辑导入的文件。
四、PB importfile的高级用法1. PB importfile支持批量导入,用户可以一次选择多个文件进行导入,便于同时处理多个文件的情况。
2. PB importfile还支持对导入文件进行分类管理,可以根据文件的类型、标签等信息进行分类,有效地组织和管理导入的文件。
3. 对于常用的导入文件,用户可以将其设置为"常用文件",这样在导入文件时可以快速选择常用文件,提高工作效率。
PB动态数据窗口应用(1)作者:wangxc来源:博客园发布时间:2006-05-23 11:29 阅读:1246 次原文链接[收藏] PowerBuilder的应用开发中,动态数据窗口的应用还是很有用的,在航班指挥调度中,机位动态、航班信息,图形化的操作,下面是实现一个模拟民航二所的指挥系统的机位动态调度图:具体实现功能:1、纵向是表示机位分布,横向是时间轴,2、在每隔一段时间内,绿色的时间线会刷新时间的位置3、动态创建航班位置,按照时间的刷新和机位的调整改变机位4、可以拖动修改机位5、鼠标移到航班时可以动态显示航班的详细信息6、限制已经执行过的航班的修改技术要点描述:1、动态创建机位、时间点的位置(目前时间点的各个位置不是很准,但是an hour下还是很准)ll_xcount = 0for li_i =1 to ii_hours + 1 //几个小时ls_coltitle = 'B_'+"t_"+String(li_i)if li_i= 1 thenls_now = '机位'ls_mess= dw_show.modify("create text(band=header alignment='2' text= '"+ls_now+"' border='6' color='8388608' x='0' y='5' height='188' width='"+strin g(ii_jwwidth)+"' html.valueishtml='0' name="+ls_coltitle+" visible='1' moveabl e=1 font.face='Tahoma' font.height='-14' font.weight='400' font.family='0' fon t.pitch='2' font.charset='134' background.mode='2' background.color='67108864 ' )")ll_xcount = ii_jwwidthelsels_now = string(li_i - 2)+'点~r~n'+"| | |"ls_mess= dw_show.modify("create text(band=header alignment='2' text= '"+ls_now+"' border='6' color='8388608' x='"+string(ll_xcount)+"' y='5' height= '188' width='"+string(ii_objwidth)+"' html.valueishtml='0' name="+ls_coltitle+ " visible='1' moveable=1 font.face='Tahoma' font.height='-14' font.weight='40 0' font.family='0' font.pitch='2' font.charset='134' background.mode='2' backgr ound.color='67108864' )")ll_xcount = ll_xcount + ii_objwidthend ifnext2、创建时间线、机位分割线dw_show.modify("create line(band=foreground x1='0' y1='0' x2='0' y2='"+stri ng(dw_show.height)+"' name=l_time visible='1' pen.style='2' pen.width='5' pen. color='65280' background.mode='2' background.color='1073741824' )")ll_ycount = 0for li_i =1 to ii_jwamount + 1ls_linename = 'l_detailbar'+string(li_i)dw_show.modify("create line(band=detail x1='0' y1='"+string(ll_ycount)+"' x2='"+string(ll_xcount)+"' y2='"+string(ll_ycount)+"' name="+ls_linename+ " visible='1' pen.style='1' pen.width='1' pen.color='134217731' background.mod e='2' background.color='1073741824' )")ll_ycount = li_i * 200next3、创建机位(要对准刚才创建的机位分割线)for li_i = 1 to li_countls_obj = "JW_T_"+string(li_i)ls_text = "~r~nP"+string(li_i)ls_mess= dw_show.modify("create text(band=detail alignment='2' text='"+l s_text+"' border='6' color='8388608' x='0' y='"+ls_y+"' height='188' width='"+s tring(ii_jwwidth - 6)+"' html.valueishtml='0' name="+ls_obj+" visible='1' move able=1 font.face='Tahoma' font.height='-14' font.weight='400' font.family='0' f ont.pitch='2' font.charset='134' background.mode='2' background.color='671088 64' )")ls_y = string( li_i * 200 + 6 )next4、设置时间线走的位置(注意在时间线离开当前页面超过一半时要相应调整横向滚动条)//取整ll_move =wf_count_width(at_time)dw_show.modify("l_time.x1="+string(ll_move))dw_show.modify("l_time.x2="+string(ll_move))ll_position = ll_move - ll_middle - ll_xif ll_position>0 thenls_mod = "DataWindow.HorizontalScrollPosition=" +string(ll_position)dw_show.Modify(ls_mod)end ifil_timelineX = ll_move5、按照航班的时间点创建航班的块li_count = ids_hbxx.rowcount( )for li_i =1 to li_countls_hbh = ids_hbxx.object.hbh[li_i]ls_jw = ids_hbxx.object.jw[li_i]ldt_jlsj = ids_hbxx.object.jlsj[li_i]ldt_qfsj = ids_hbxx.object.qfsj[li_i]ll_id = ids_hbxx.object.id[li_i]ls_obj = "hb_t_"+string(li_i)li_jw_row =integer( mid(ls_jw,2))if li_jw_row>0 thenlt_qfsj = time(ldt_qfsj)lt_jlsj = time(ldt_jlsj)ls_x1 = string(wf_count_width(lt_jlsj))ls_x2 = string(wf_count_width(lt_qfsj))ls_objwidth = string (wf_count_width(lt_qfsj) - wf_count_width(lt_jlsj) )ls_y = string(integer(is_detailheight)*(li_jw_row - 1) + 6)//integer(is_headerheight)+ls_text = ls_hbh+' '+ls_jwls_tag= string(ll_id)+'/'+string(li_jw_row)ls_mess= dw_show.modify("create text(band=detail alignment='0' text='" +ls_text+"' border='6' color='8388608' x='"+ls_x1+"' y='"+ls_y+"' height='188 ' width='"+ls_objwidth+"' html.valueishtml='0' name="+ls_obj+" tag='"+ls_tag +"' visible='1' moveable=1 slideup=allabove font.face='宋体' font.height='-12' f ont.weight='400' font.family='0' font.pitch='2' font.charset='134' background.m ode='2' background.color='67108864' )")if il_timelineX>=long(ls_x1) then //已经过时,不允动dw_show.modify(ls_obj+".Moveable=0")elsedw_show.modify(ls_obj+".Moveable=1")end ifend ifnext6、销毁在动态数据窗口上创建的数据窗对象dw_show.modify("destroy "+ls_object)还没实现的功能:1、对于机位的允许停放的机型的限制(需要机位、机型的描述表)2、对于显示的信息不很完整(因为只看过两次)3、时间的刻度不一定移到完全准确的位置,但是长时间(1小时)段来看是准确的4、对于同一个机位上同一个时间点的,移动重叠判断没有时间做了,这已经花了我很多晚上的时间了。
用pb实现Flash动画播放-电脑资料1. 前言PowerBuilder(以下简称PB)是一种面向对象、快速开发数据库的开发平台,常用于数据库的开发,FLASH动画不仅包含动画,还可有声音等形成非常形象的动感画面,在PB开发的程序中加入FLASH动画,使得程序更具活力,为用户创造一个更加友好的交互式界面,。
下面介绍在PB8.0数据库编程中用Flash 5提供的OLE控件“SwFLASH.ocx”实现动画播放的一种方法。
2. PB中OLE控件的使用在PB8.0环境下使用“SwFLASH.ocx”控件,首先创建一个窗口,然后在窗体上添加一个OLE控件,用OLE连接FLASH 5的控件“SwFLASH.ocx”其具体作法如下:(1)选菜单"Cotrols | OLE",显示窗口"Insert object",选"Insert Control",在Control Tyle栏里找出"Shockware FLASH Object"(若该控件尚未注册,可先选"Register Now"对该控件进行注册);回到PB窗口,用鼠标点击安放此控件在窗口上并调整大小。
(2)在编程中使用FLASH5.0的控件“SwFLASH.ocx”提供的主要属性:Movie属性:存放FLASH动画文件的URL's:在本机磁盘时写全目录名,或Internet上按浏览网页的地址,例如:f:\touch\start.swf。
Quality(分辨率)属性:播放的分辨率,有0(low),1(AutoLow),2(Hight),3(AutoHight),4(Best)五个值。
Scale属性:播放的屏幕,有0(ShowAll), 1(NoBorder), 2(ExactFit)三个值。
Loop(循环播放)属性:true, false 。
menu(菜单)属性:true, false 。
图形的切换在有关于多媒体的应⽤中是经常见到的。
常见的切换⽅式可以概括为以下⼏种。
切换(Cut):当前图象快速的被另⼀幅图象所取代 淡⼊(Fade In):当前图象缓缓变⿊⾄消失 淡出(Fade Out):⼀幅图象缓缓的从⿊⾊的屏幕中出现 隐现(Dissolve):⼀幅图象缓缓的变为另⼀幅图象 滑⼊(Wipe):⼀幅图象逐渐穿过并覆盖当前图象 拉进(Slide):⼀幅图象从屏幕⼀边匀速滑⼊ 弹进弹出(Pop on/off):⼀幅图象⽴即出现或消失 上拉下拉(Pull Down/Up):⼀幅图象象窗帘⼀样从屏幕项部拉下,并以相同⽅式返回 翻转(Flip):当前图象翻转,在其反⾯显⽰另⼀图象 旋转(Spin):图象以旋转⽅式出现 VB和Windows API为⽣成切换效果提供了有⼒的⼯具。
图形切换的实质是通过快速组合或拷贝来建⽴分离的图象。
在某些情况下,建⽴切换效果只不过将当前图象的属性由Visible转变True,如上述效果中的弹进弹出、切换等,⽽多数情况下,切换效果需要调⽤Windows的GDI函数来完成。
图形的切换和弹进弹出是最容易实现的例⼦,前⾯已经解释过这两种切换效果的含义了。
在Form中拉出Image1和Image2,注意,Image1和Image2的坐标和⼤⼩应完全⼀样。
并设置好事先准备好的两幅图形。
将Image1的Visible设为True,再将Image2的Visible设为false,双击Form,输⼊如下程序代码: Private Sub Form_Click() Image1.Visible=False Image2.Visible=True End Sub 在程序运⾏时,应只能看到Image1。
这时,点击⿏标,即可看Image1快速的被Image2所代替。
形成图形的切换效果。
这时再将Image1和Image2的坐标错开,不要让两个图形有重叠部分。
这时再运⾏程序,点击⿏标,Image1消失的同时,Image2在另⼀个地⽅出现。
Expression”标签,在“ProtectExpress”中填入条件表达式,如工作时间不满一年的人员不能修改,则写入“if,today)<=365,1,0)”;在datawindow中,将某列的TabOrder 值制为0,则该列因得不到焦点而不能被修改;在DataWindowPainter状态下选取Rows菜单,再选取UpdateProperties,弹出SpecifyUpdateProperties对话框,将AllowUpdates设为空。
二、动态修改方法将整个Datawindow设置为保护方式:利用DataWindowObject的ReadOnly属性可以将整个Datawindow设置为保护方式。
语法为:dw_1.Object.DataWindow.ReadOnly=value或dw_1.Modify,其中:value表示Datawindow是否为只读状态,它有两个取值:TRUE和FALSE。
Yes表示使Datawindow为read-only;No 则相反,默认值是No。
例如:假如要使Datawindow设置为保护方式,可以在相应事件的脚本中包含下列代码:dw_1.Modify或者为:dw_1.Object.DataWindow.ReadOnly=TRUE只保护Datawindow的某些列方法一:利用列的Protect属性语法为:dw_.Protect=integer或dw_1.Modify。
参数说明:cloumnname:为要保护的列名;integer:为该列的保护状态,值为0或False时该列不受保护;值为1或True时该列受到保护。
例如,要将列name设置为保护状态,则相应的代码为:dw_.Protect=1或者为:dw_1.Moidfy方法二:利用列的TabSequence属性,在程序执行时可以根据需要将该列的TabOrder置为0,从而达到保护的目的。
语法为:dw_.TabSequence=number或dw_1.Modify参数说明:columnname:要保护的列名;number:该列的TabOrder值。
UnityShader实现动态过场切换图⽚效果本⽂实例为⼤家分享了Unity Shader实现动态过场切换图⽚的具体代码,供⼤家参考,具体内容如下⼀、简单介绍Shader Language的发展⽅向是设计出在便携性⽅⾯可以和C++、Java等相⽐的⾼级语⾔,“赋予程序员灵活⽽⽅便的编程⽅式”,并“尽可能的控制渲染过程”同时“利⽤图形硬件的并⾏性,提⾼算法效率”。
本⽂介绍,如何使⽤ shader ,动态过场形式切换图⽚的⼀点简单效果。
⼆、实现原理1、通过时间叠加判断,当值⼩于主图 uv 的时候,进⾏切换图的渲染// 过场切换的位置float curPos = _Time.y*_Speed;if(curPos < i.uv.x){col = tex2D(_CutTex,i.uv);}三、注意事项1、当⼩于 x,渲染_CutTex(开始都是⼩于 x的,开始渲染_CutTex),随着时间变化,切换为 _MainTex四、效果预览五、实现步骤1、打开Unity,新建⼀个⼯程2、导⼊素材,和新建shader,并对应新建材质3、编写好shader,把材质对应赋值4、场景中添加⼀个 Quad ,并把材质赋给Quad,⽤来显⽰5、运⾏场景,效果如上六、关键代码Shader "Unlit/CutEffect"{Properties{_MainTex ("Texture", 2D) = "white" {} _CutTex("Cut Tex",2D)="white"{}// 切换速度_Speed("speed",Range(-1,1))=0.2}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;};sampler2D _MainTex;float4 _MainTex_ST;sampler2D _CutTex;float _Speed;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.uv;return o;}fixed4 frag (v2f i) : SV_Target{// sample the texturefixed4 col = tex2D(_MainTex,i.uv);// 过场切换的位置float curPos = _Time.y*_Speed;// 当⼩于 x,渲染_CutTex(开始都是⼩于 x的,开始渲染_CutTex),// 随着事件变化,切换为 _MainTexif(curPos < i.uv.x){col = tex2D(_CutTex,i.uv);}return col;}ENDCG}}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
PB中实现图片按钮的mousemove事件PB中实现图片按钮的mousemove事件---- PB中除窗口(window)和富文本(richtextedit)具有mousemove事件外,其他控件都不接收ousemove事件。
在某些程序中,可能会对按钮进行动态的图片切换,如:鼠标移到按钮上时,切换按钮的图片以实现动感。
---- 创建一个用户自定义对象(User Object),取名uo_picbutton,其上放一个Picture控件(p_1)。
选中p_1,定义用户自定义事件(user events),在event name中输入mousemove, 由下面的Paste Event ID中选取pbm_mousemove放入Event ID栏。
自此,p_1的事件栏中增加了事件mousemove,在其中编程:---- p_1.picturename="c:\图片_over.bmp" //鼠标移动到p_1上时要显示的图片---- 关闭user object,新建一个窗口,添加刚才建成的user object(uo_1).在form的open事件中编程:---- uo_1.p_1.picturename="c:\图片_up.bmp" //初始图片---- 在form的mousemove事件中编码:---- uo_1.p_1.picturename="c:\图片_up.bmp" //恢复原来的图片---- 这样,运行时一旦鼠标移动到该控件上就会变换图片,从而产生动态效果。
只要在uo_picbutton的mousemove事件中增加两三句代码,可以使其成为通用的图片按钮;添加user event事件,并拷贝下面列出的事件ID(event id),可以生成更多的原本不能接收的事件。
使用API函数在PB中实现动态菜单
单丛;邹国红
【期刊名称】《鞍山师范学院学报》
【年(卷),期】2005(007)004
【摘要】PowerBuilder(以下简称PB)是Sybase公司推出的开发基于数据库应用的快速开发平台.PB以其使用简单、开发开速、数据库支持能力较强,而得到广大程序员的青睐.然而,在用户交互、界面处理方面PB显得功能不足.本文结合实例,从PB弹出菜单这一个方面介绍了如何使用API增强PB处理能力的一种方法.
【总页数】3页(P53-55)
【作者】单丛;邹国红
【作者单位】鞍山师范学院,数学系,辽宁,鞍山,114005;鞍山师范学院,数学系,辽宁,鞍山,114005
【正文语种】中文
【中图分类】TP311.11
【相关文献】
1.使用C++ Builder和Windows API函数实现微机与数字化仪的串行通讯 [J], 宋延杰;刘均;樊萍
2.基于PB递归算法和API函数的文件双向智能同步的实现 [J], 张玉才
3.API函数在PB中的应用 [J], 全立新
4.在PB中应用API函数开发托盘程序 [J], 谢秀颖;白羽;刘尚桥
5.PB编程中的API函数的调用和OLE控件的使用 [J], 汪燕云
因版权原因,仅展示原文概要,查看原文内容请购买。
在PB中用Enter键实现跳转的几种方法(深圳:独孤求败 2003-05-19)在使用PowerBuilder开发的应用软件时,各控件及数据窗口列之间的转换基本上是使用Tab键或鼠标来实现的。
而对于一些长期使用基于字符终端的用户来说,特别是对频繁、大量处理数据的用户来说,每输完一笔数据,必须通过Tab键或鼠标跳转到下一列中,非常不方便,而采用Enter(回车)键更便于数据的操作。
这里,笔者介绍几种将Enter键用作Tab键的方法:1.在数据窗口中进行列的跳转在用户具体操作时,数据窗口中Enter键的使用频率最高。
在设计时,先打开窗口对象,用鼠标点中要用Enter键实现跳转的数据窗口,选择菜单项“Declare|User Event”,为该数据窗口控制定义用户自定义事件。
例如有一个窗口,窗口名为w_sales,内置数据窗口dw_sales,数据窗口有五个列,列名分别为column1~column5,定义用户自定义事件为“dw_sales_key”,对应PowerB uilder事件号为pbm_dwnkey。
定义好事件后,用鼠标点数据窗口工具栏图标Script,在select event 中选取事件dw_sales_key进行编程,语句如下:if keydown(keyenter!)then//判断按下的是否是Enter键choose case 1ower(dw_sales.getcolumnname())case "column1"dw_sales.setcolumn("column2")case "column2"dw_sales.setcolumn("column3")case "column3"dw_sales.setcolumn("column4")case "column4"dw_sales.setcolumn("column5")end chooseend if编程完后,编译保存,再调用该窗口时,其数据窗口内的列可以用Enter键实现跳转。
在PB中方便的实现图片动态切换
(深圳:独孤求败 2003-05-30)
PowerBuilder是一个功能十分强大的数据库开发工具,其以简便、灵活、高效等优点博得了许多编程人员的青睐,因此在国外一出现就相当的流行,近几年中国也随之而起。
本人在使用PB开发“企业级数据库系统”已有近两年的经验,在开发前期由于图书资料的深度不够(好多都是就简单的介绍如何操作为止),报纸上的经验交流少得可怜,因此走了相当不少的弯路,因此想借此文章达到一个抛砖引玉的效果,使PB 编程人员们在这里能够坦诚交流各自的编程经验,共同提高中国PB编程人员的水平。
我们都知道在PowerBuilder开发平台中不支持JPG,GIF等图片格式,仅能显示BMP,RLE,WMF三种图片格式(截止到PowerBuilder 6.5版本),所以要实现图片的动态切换,必须把“动作连续”的几个图片事先作好,然后按照顺序一个个的显示,作出的程序才会具有“电影效果”或者相当于网页上的“GIF”图片的效果(当然通过嵌入OLE对象也可实现电影的播放,在这里本人不是指使用此方法)。
当切换的图片比较少时,一般编程者会比较倾向于使用下面的方法,此方法结构清晰简单,比较易懂,但灵活性差:
以四个图片的切换为例,首先建立窗口的Instance 变量(实例变量):
integer i
在一个新建窗口的open事件中写入如下脚本:
open:
//建立四个“图片对象”的名称分别为:p_0,p_1,p_2,p_3
p_0.hide() //开始时图片隐藏起来
p_1.hide()
p_2.hide()
p_3.hide()
i=0
timer(0.2)
在窗口的timer事件中写入如下脚本:
timer:
if i >= 4 then i = i – 4 //当参数i累加超过界限时拉回
choose case mod(i,4)
case 0
p_0.show()
p_1.hide()
p_2.hide()
p_3.hide()
case 1
p_0.hide()
p_1.show()
p_2.hide()
p_3.hide()
case 2
p_0.hide()
p_1.hide()
p_2.show()
p_3.hide()
case 3
p_0.hide()
p_1.hide()
p_2.hide()
p_3.show()
end choose
i++
对于PowerBuilder熟练编程的人来说,可以看出以上程序脚本通用性不会很强,即当我们需要再添加几个切换的图片时,需要改动的地方太多:Case 语句的“情况个数”要随图片的增加而增加,而且每个C ase 语句中又需增添诸如p_5.show(),p_5.hide() 的程序,参数i的“累加上限”需要更改,造成程序的维护量大大增加。
本人在PowerBuilder的使用过程中针对此情况研究了一些小的技巧,对上面的程序脚本进行的适当的完善、改进,编程人员只需遵循简单的规则而无须改动程序脚本,即可满足上面“连续图片个数增/减”的要求:遵循规则:需要显示图片对象的命名顺序与切换显示顺序要一致,必须为:p_0,p_1,p_2,p_3.....不需要切换(即静止图片)的命名中不要夹杂“数字”。
在窗口的Instance中定义如下变量:
integer i,p_count
picture pic[]
在窗口的open事件中写入如下脚本:
open:
int ic
ic = upperbound(this.control)//取出窗口中所有控件的个数
p_count=0
object ctr_type
for i = 1 to ic
ctr_type = this.control[i].typeof()
choose case ctr_type
case picture! //过滤图片控件
//以下过滤图片控件中需要切换的图片并保存在一数组中
if Match(mid(this.control[i].classname(),3),"[0-9]") then
p_count++ //累计需要切换图片的个数
this.control[i].hide()
pic[p_count] = this.control[i]
end if
end choose
next
i = 0
timer(0.2) //设定切换时间
在窗口的timer事件中写入如下脚本:
timer:
if i >= p_count then i = i - p_count
//参数i超过累加界限时拉回至“零”
int j,k
for j = 1 to p_count
if pic[j].classname() = "p_" + string(mod(i,p_count)) then //筛选出需要显示的图片
pic[j].show()
for k = 1 to p_count //不显示未轮到的图片
if k = j then continue //越过轮到显示的图片
pic[k].hide()
next
end if
next
i++ //参数累加。