在窗口属性的 Position 页中可以粗略地设置窗口的弹出位置。然而,你并不知道客户机的屏幕分辨率是多少 (800 × 600 还是 1024 × 786) ,不如在 Open 事件中加入下列代码使其居中:
GetEnvironment(Env)// 获取客户机环境信息
dy=(Pixelstounits(Env.ScreenHeight,YPixelsToUnits!) - this.Height)/2
dx=(Pixelstounits(Env.ScreenWidth, XPixelsToUnits!) - this.Width)/2
this.Move(dx,dy)
//Env 为 Environment 类型, dx,dy 为 Long 类型 3 .使用 ActiveX 控件
VB 可以直接引用 ActiveX 控件,而 PB 只能通过“控件嵌套”的方法来引用。这种方法需要借助 OLE 容器。下面以 Animation 控件为例说明引用过程及约定。
窗体设计时,选择 OLE ,在弹出的“ Insert Object ”对话框中选择“ Insert Control ”页,在 Control Type 下列出了系统中所有注册过的 ActiveX 控件,选择“ Microsoft Animation Control ”。对 ActiveX 控件的属性和方法的引用必须遵循“ OLE 控件 .Object. 属性(或方法)”的规则。如下代码通过调用 Animation 控件的属性和方法来自动播放一个视频剪辑:
ole—1.Object.AutoPlay =True
// 设置为自动播放 ole—1.Object.Open( ″ C:\Program Files\Joint\FireWork.avi ″ ) // 打开一个 Avi 文件
若你的 PB 程序中使用了 ActiveX 控件,最好把相应的 OCX 文件与你的程序一起发布,并在安装程序中进行注册,因为客户机不一定注册了相应控件。注册的方法是用 Regsvr32 ,若采用 InstallShield 来制作安装程序,也可以把所有要注册的 OCX 文件放到一个 File Group 中,然后将它的“ Self - Registered ”设置成 Yes 来自动注册。
4 .操纵 LOB
大对象 (Large OBject) 通常指大文本和大二进制对象,几乎每一种数据库都支持它。在 PB 中可以用 UpdateBlob 和 SelectBlob 语句来对它们进行处理。
(1) 用 UpdateBlob 来把大对象数据写入数据库
在编写管理软件时,要求把员工的照片 (Bmp 文件 ) 和工作经历 (Doc 文件 ) 保存在数据库中,而不是像以前一样保存它们的文 mpno= ′ 9925 ′ ; // 把图像数据写入数据库
If SQLCA.SQLNRows 〉 0 Then Commit;
End If
注意, FileRead 一次只能读取 32K ,若文件大于 32K 应分多次读取; UpdateBlob 执行成功与否不能用 SQLCode 或 SQLDBCode 来判断,而要用 SQLNRows 是否大于 0 来判断。
(2) 用 SelectBlob 从数据库中读取大对象数据
要查看员工的照片或工作经历,就应把相关信息从数据库中读出来。主要代码如下:
Blob pic // 把 pic 定义为二进制大对象( Binary large object )
SelectBlob photo Into :pic From emp Where empno= ′ 9925 ′ ;// 把图像数据读到变量 pic 中
p_1.SetPicture(pic) // 用图像控件显示图像
5 .编译技巧
(1) 没有必要将 pbl 编译成机器码 dll ,即不要选择“ Machine Code ”。那样做意味着你至少要等待半个小时。编译成伪码 pbd 就行了。
(2) 把程序中用到的 ico 、 bmp 等文件打包到目标代码中。方法是:用记事本创建一个扩展名为 pbr 的资源文件,它的每一行是一个带完整路径的文件名,用于告诉编译器到何处去找用到的资源。
(3)PB 应用程序要独立运行,必须把 Sybase\Shared 下的几个共享库与你的程序一起发布,它们是: pbvm60.dll 、 pbodb60.dll 、 pbdwe60.dll 。后台若使用 MS SQL Server ,还得带上 pbmss60.dll ;若使用 Sybase SQL Anywhere ,要带上 pbo7360.dll ;若使用 Informix V7.x ,要带上 pbin760.dll 。