在PB中方便的实现图片动态切换

合集下载

PB窗口使用技巧之增强窗口显示效果

PB窗口使用技巧之增强窗口显示效果

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中实现动画特效

PB中实现动画特效

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中窗体动态效果的实现

PB中窗体动态效果的实现

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数据窗口技巧大全

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软件作为一款强大的视频编辑工具,可以帮助我们制作出精美的照片轮播视频。

本篇文章将向大家介绍一些Adobe Premiere Pro中的图片切换技巧,帮助大家提高制作照片轮播视频的效果。

首先,打开Adobe Premiere Pro软件,创建一个新的项目。

然后将你想要制作成照片轮播视频的图片素材导入到项目中。

可以通过“文件”->“导入”->“文件”来实现。

一旦图片导入完成,将它们拖拽到序列面板中。

在序列面板中,你可以调整图片的顺序以及每张图片显示的时间长度。

这里建议设置每张图片的显示时间在3-5秒之间,以保证整个照片轮播视频能够有足够的展示时间。

接下来,我们要为照片切换添加一些过渡效果,使得视频更加平滑流畅。

在 Effects 面板中搜索“Dissolve”类型的过渡效果,选取合适的过渡效果应用到图片之间的切换。

这样可以使得图片的切换更加自然,让观众眼前一亮。

除了过渡效果,我们还可以为照片添加一些动画效果,让视频更加生动。

首先,在效果控制面板中选中要添加动画效果的图片,然后点击“移动”选项,我们可以选择移动的方向,包括上、下、左、右等,也可以选择放大或缩小的效果。

调整好参数后,点击应用,图片就会带有动画效果。

除了单张图片的动画效果,我们还可以为整个视频增添一些整体的动画效果。

在效果控制面板中选择“视频效果”->“滚动镜头”,我们可以为整个视频添加镜头滚动的效果,让视觉效果更加震撼。

此外,Adobe Premiere Pro还提供了丰富的滤镜效果可以应用到照片上,比如黑白、马赛克等,给照片增添不同的风格。

在应用滤镜效果之前,我们需要在“左侧项目面板”中选中要添加滤镜效果的图片,然后在“右侧效果控制面板”中选择相应的滤镜效果,调整参数后点击应用即可。

pbsetitembackground用法

pbsetitembackground用法

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函数,您可以很方便地对图像进行定制化的处理,实现各种独特的图像效果。

PowerBI技巧之pb处理图片等大数据对象

PowerBI技巧之pb处理图片等大数据对象

存取二进制大对象(独孤求败二零零四年一月二十三日整理于深圳市南山区)在数据库应用的开发过程中,经常要在数据库中存储一些备注信息,而这些备注信息的内容一般较大,格式多样,有可能是图像、语音文件、视频文件等,在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 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. 对于常用的导入文件,用户可以将其设置为"常用文件",这样在导入文件时可以快速选择常用文件,提高工作效率。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在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++ //参数累加。

相关文档
最新文档