PB 调用window打印机

beavmok 2009-12-11 07:37:17
---- 步骤一:新建一可视(visual)的标准(standard)的用户对象,在Select Visual Standard Type对话框中选择DropDownListBox(下拉列表框),点击“OK”按钮进入设计画面。

完成

---- 步骤二:开始编程。

---- 1、定义两个实例变量

string is_windows_dirctory,is_winini_file
完成


declare一API函数用以取windows目录
FUNCTION ulong GetWindowsDirectoryA(ref string wdir, ulong buf) LIBRARY "kernel32.dll"
未完成,保存出错(Syntax error)
请问如何做下去

---- 2、定义两个函数:
函数一:ouf_get_windows_dirctory()
用途:取windows目录。
参数:无。
返回值类型:string。
函数体:
string ls_WindowsDirctory
ulong lu_Buf

lu_Buf = 144
ls_WindowsDirctory = Space(144)
GetWindowsDirectoryA(ls_WindowsDirctory,lu_Buf)
return ls_WindowsDirctory

函数二:ouf_get_printer()
用途:取打印机信息并增加至下拉列表框。
参数:无
返回类型:boolean
函数体:
string ls_printer[] //定义一个字符串型数组

integer li_rtn,li_ArrayUp,li_step
li_rtn = RegistryKeys("HKEY_LOCAL_MACHINE\System
\CurrentControlSet\Control\Print\
Printers", ls_printer) //从注册表中取其列表

IF li_rtn = 1 THEN
li_ArrayUp = UpperBound(ls_printer)
//取列表数组上限
IF li_ArrayUp >= 1 THEN
FOR li_step = 1 TO li_ArrayUp
additem ( ls_Printer[li_step] )
//向下拉列表框中增加打印机
NEXT
ELSE
return false
END IF
ELSE
return false
END IF
return true

3、在constructor事件下编写下列代码:
boolean lb_PrinterExists
string ls_printer,ls_tmp
int li_point
is_windows_dirctory = ouf_get_windows_dirctory ( )
is_winini_file = is_windows_dirctory + "\win.ini"

lb_PrinterExists = ouf_get_printer ( )
//向下拉列中增加打印机
IF NOT lb_PrinterExists THEN
messagebox ("提示!","尚未安装打印机!")
ELSE
ls_tmp = profilestring (is_winini_file,
"windows","device","") //取当前打印机信息
//由于win.ini信息中该信息还包括有其它参数如端口,
因此必须进行截取处理。
ls_tmp = trim (ls_tmp)
li_point = pos (ls_tmp,",",1)
ls_printer = left (ls_tmp,li_point - 1)
IF trim (ls_printer) <> "" AND NOT
IsNull (ls_printer) THEN
this.text = trim (ls_printer)
//设置下拉列表框文本为当前打印机
ELSE
selectitem ( 1 )
END IF

END IF

---- 4、在selectionchanged事件中输入:
string ls_printer
ls_printer = profilestring
(is_winini_file,"Devices",
trim(this.text (index)),"") //从win.ini文件中取当
前打印机完整信息(含端口及其它)
//在win.ini文件及注册表中更新当前打印机
setprofilestring (is_winini_file,"windows","device",
trim(this.text (index)) + "," +ls_printer)
RegistrySet( "HKEY_CURRENT_CONFIG\System
\CurrentControlSet\Control\Print\Printers",
"Default", trim(this.text))

---- 5、最后保存该用户对象(如保存为nvo_ddlb_of_printer)即可。
...全文
354 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
swallowluo 2009-12-11
  • 打赏
  • 举报
回复
奇怪,你的错误好像是函数定义不对造成的,不知道你函数名、返回值、或者参数什么地方设置的不对。因为如果这些地方都设置对了的话,PB会自动把函数名写到new function的地方。

另外,FUNCTION ulong GetWindowsDirectoryA(ref string wdir, ulong buf) LIBRARY "kernel32.dll"你定义的时候报什么错,我试了一下,应该没有问题啊。
beavmok 2009-12-11
  • 打赏
  • 举报
回复
---- 2、定义两个函数:
函数一:ouf_get_windows_dirctory()
用途:取windows目录。
参数:无。
返回值类型:string。
函数体:
string ls_WindowsDirctory
ulong lu_Buf

lu_Buf = 144
ls_WindowsDirctory = Space(144)
GetWindowsDirectoryA(ls_WindowsDirctory,lu_Buf)
return ls_WindowsDirctory
不能定义函数有如下报错.

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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