设计 工具 系统 开发 安全 办公 陶吧 IT教育 Vista频道|Google Chrome 参与WS-AT全局事务
您现在的位置: 天极网 > 软件频道 > IT教育频道 > 等级考试——二级VFP答疑
全文

等级考试——二级VFP答疑

2005-07-12 10:07作者:出处:天极网校责任编辑:贾佳

  1、VFP中对API的调用格式是怎样的?

  答:编程时,经常会用到WIN32API函数来对VFP的功能进行扩展,例如对注册表进行操作、获取系统信息等,但是由于WIN32API函数遵循的是C++的数据结构,在应用时与VFP的数据格式有所区别,因此在调用时容易产生问题,现将有关调用方式详解如下:

  VFP中调用WIN32API的主要函数是:DECLARE - DLL

  它是注册外部 Windows 32 位动态链接库 ( .DLL ) 中的一个函数。

  语法:

  DECLARE [cFunctionType] FunctionName IN LibraryName [AS AliasName]      [cParamType1 [@] ParamName1, cParamType2 [@] ParamName2, …]

  参数:

  cFunctionType 表明 32 位 Windows .DLL 函数是否有返回值。如果函数有返回值,则包含 cFunctionType ,否则省略 cFunctionType。

  2、如何避免重复运行同一表单?

  答:在编制管理系统时,往往一个相同的系统要由好几个部门使用,这样,在进入系统时,就要选择不同部门的名称。作为一个使用者,我们希望选择第一次,以后每次进入就不用再选择。以下方法将实现此功能。

  新建一个表单,在上面创建一个“组合框”对象,对表单做如下设置:

  init event:

  set safety off

  public z

  if .not.file(′mv.mem′)

  z=1

  else

  restore from mv additive

  endif

  thisform.combo1.additem("第一个单位")

  …

  thisform.combo1.additem("第二个单位")

  thisform.combo1.listindex=z

  destroy event:

  z=thisform.combo1.listindex

  save to mv all like z

  3、请详细讲解一下Wait命令的应用。

  答:Wait命令应用很方便,可是我们在VFP中使用时常常只是用到了它的部分功能,而忽略了 一些很有用的功能。 Wait

  命令也有不少子句:

  WAIT

  [cMessageText]

  [TO MemVarName]

  [WINDOW [AT nRow, nColumn]]

  [NOWAIT]

  [CLEAR | NOCLEAR]

  [TIMEOUT nSeconds]

  比如我们的使用常常只是:

  WAIT WIND '暂停…'

  使'暂停…'这两个字停留在其默认窗口的右上角,其实完全可以用 [AT nRow, nColumn]来改

  变其停留位置:

  WAIT WIND '暂停…' AT 10,30

  使'暂停…'停留在指定的第10行,第30列上。

  WAIT WIND '暂停…' +CHR(13)+'另起一行…' AT 10,30

  在提示信息中加上CHR(13),提示信息可分行显示。 而:

  WAIT WIND '暂停10秒…' TIMEOUT 10

  则可在无击键和鼠标移动的情况下只暂停10秒。

  4、如何把数组作为参数传递给表单?

  答:在FoxPro中,数组必须按址传递。SET UDFPARMS决定参数的传递方式。在默认情况下,当你用DO…WITH调用过程或表单时,参数是按址传递。在函数或方法中,参数是按值传递。

  DIMENSION array[10]

  DO FORM Form1 WITH array

  在这种情况下,你必须用一个"@"符号强迫参数的传递为按址传递。

  DIMENSION array[10]

  MyForm = CREATEOBJECT("Form1", @myarray)

  5、如何为应用程序添加背景音乐?

  答:首先,调用Windows的APT函数SndPlaySound播放声音文件(.WAV)。

  首先建立一个表单(FORM1),然后编写表单的 Activate过程:

  PUBLIC Sound

  SET LIBRARY TO Foxtool.FLL

  Sound=Regfn("SndPlaySound","CI","I","Mmsystem")

  =Callfn(Sound,"BACK.WAV",1)

  再编写FORM1的Release过程:

  =Callfn(Sound,"",10)

  SET LIBRARY TO

  运行表单后,BACK.WAV就作为背景音乐在后台播放,关闭表单时音乐自动停止。如果想让音乐自动循环播放,将Activate过程中最后一句换为:

  =Callfn(Soun,"BACK.WAV",1+8)即可。

  注意:如果你的计算机没有声卡,运行以上程序时将出错。

  其次,用“SET BELL TO” 响铃命令。

  编写表单的Activate过程:

  SET BELL ON

  SET BELL TO "BACK.WAV"

  ??CHR(7)

  再编写表单的Release过程:

  SET BELL TO

  注意:该种方法在运行时,不能进行循环播放,不能中断音乐的播放,但是在没有声卡的情况下,该种程序不会出错,只是进行PC喇叭的响铃一次。

  6、在控件返回.F.时,我怎样才能把"Invalid User Input"信息去掉?

  答:您可以用 Return 0来代替return .F.。

  用命令Return 数目是以表单控件的排序进行焦点设置,例如:

  return 0 把焦点设定到当前控件

  return 1 把焦点设定到下一个控件

  return 2 把焦点设定到当前控件后面的第二个控件

  7、我怎样使用按扭来控制页框的翻页?

  答:可以利用页框控件中页的ZOrder属性来控制页框的翻页。

  比如:This.parent.pageFrame.page1.Zorder &&翻到第一页

  This.parent.pageFrame.page2.Zorder &&翻到第二页

  8、在VFP中调用WIN32API函数要注意哪些问题?

  答:在利用VFP编程时,经常会用到WIN32API函数来对VFP的功能进行扩展,例如对注册表进行操作、获取系统信息等,但是由于WIN32API函数遵循的是C++的数据结构,在应用时与VFP的数据格式有所区别,因此在调用时容易产生问题,

  例如,FunctionName 指定在 Visual FoxPro 中要注册的 32 位 Windows .DLL 函数名。注意 FunctionName 区分大小写。 32 位 Windows .DLL 函数名可以与 Win32 API 手册中规定的不同。例如,Messagebox 函数应该命名为 MessogeBoxA(对于单字节字符)和 MessageBoxW(对于 UNICODE)。如果 Visual FoxPro 不能定位 FunctionName 指定的 32 位 Windows .DLL 函数,则将字母 A 追加到函数名尾部,Visual FoxPro 用新的函数名重新搜索。

  如果指定的 32 位 Windows .DLL 函数与一个 Visual FoxPro 函数同名,或者函数名不是合法的 Visual FoxPro 函数名,则将 32 位 Windows .DLL 函数名作为 FunctionName,并用 AS 子句给该函数取一个合法的 Visual FoxPro 名,

  在从 Visual FoxPro 调用一个 32 位 Windows .DLL 函数前,必须发出带有函数名、包含该函数的 Windows .DLL 名以及函数将要接收的参数类型的 DECLARE 命令。

  为了提供向后兼容性,Visual FoxPro 仍支持 FOXTOOLS.FLL(包含在 FoxPro 早期版本中),并允许调用 16 位 .DLL 函数的 Visual FoxPro API 库。在 Visual FoxPro 中,调用 .DLL 函数时使用 DECLARE 是可取的方法。

  执行 DISPLAY STATUS 或 LIST STATUS 可以显示注册函数的名称,执行 CLEAR ALL 或 CLEAR DLLS 可从内存中删除注册函数。

  9、如何解决公元2000年以后的日期问题?

  答:可以采用以下这些方法,

  1)采用严格日期格式(SET STRICTDATE TO 1 或SET STRICTDATE TO 2)

  2)固定使用四位数年份,即SET CENTURY ON

  3)使用SET CENTURY ON 命令指定2位数年份的默认世纪

  4)避免使用CTOD()与CTOT()函数,而改用DATE()与DATETIME()函数

  10、为什么Coolbar ActiveX 控件在Visual FoxPro中不能工作?

  Coolbar ActiveX控件是一个容器控件。Visual FoxPro不能和任何支持集装箱货运船式的控件进行通信。集装箱货运船式的控件会在Visual FoxPro中出现消息处理问题。

  11、当我从另一个应用程序中利用Visual FoxPro ODBC驱动来访问数据时,有时我会在ODBC客户应用程序中得到一个应用程序的错误。 这是为什么?

  FoxPro.ini资源文件没有安装Visual FoxPro ODBC驱动。要使驱动工作正常,这个文件是必需的。想得到更多关于这方面的信息,请咨询微软公司知识库中的VFP 6.0 ODBC 驱动 FoxPro.int 资源文件中的有关内容。

  12、我用表单精灵生成一个表单,运行后为什么表单没有任何控件,出现一片空白?

  答:这是用表单精灵自动生成表单时,出现错误后的一般结果,因为它把表单的 LOCKSCREEN 属性改为.T., 您只要把LOCKSCREEN 属性改为.F.,就可以解决这个问题。

  13、我怎样才能把网格中的文本控件替换为其它控件?

  答:首先,先把原来的文本框控件删除。

  1:在您要修改的网格上按下鼠标右键,选择弹出菜单中的“属性....”

  2:在弹出的属性对话框顶端的列举框中选择要替换文本框的column下的text1。

  3:在网格上按一下鼠标左键。

  4:按下键盘上的DELETE按键,删除Text1控件(网格上的ab1将会消失)。

  其次,在网格上添置控件。

  1:在您要修改的网格上按下鼠标右键,选择弹出菜单中的“编辑....”

  2:按一下表单控件工具栏上您要加到网格上的控件。

  3:在您要添置控件的column上按下鼠标左键,并放置控件。

  14、如何垂直显示LABEL ?

  答:您可以把Label 的WordWrap 属性改为.T. ,然后再调整宽度使文本垂直显示。

  注意:如果您要显示的是英文,请把英文字母分开写,比如:"TEXT"写成"T E X T"

  15、如何用按扭来控制网格的上下翻页显示?

  答:一般情况下,我们在网格中直接按Pageup或者PageDown就可以将网格的资料上下翻

  动。但是要重新建立一个命令按钮来控制网格资料的移动,听起来好象有点困难.......

  其实,网格提供有一个方法让您在程序中可以方便控制资料的移动,这就是

  DoScroll()

  您只需在命令按钮的CliCK事件中写入DoScroll()就可以方便的控制网格的资料

  This.Parent.Grid.DoScroll(0) &&将网格的资料上移一条记录

  This.Parent.Grid.DoScroll(1) &&将网格的资料下移一条记录

  This.Parent.Grid.DoScroll(2) &&将网格的资料上移一页

  This.Parent.Grid.DoScroll(3) &&将网格的资料下移一页

  This.Parent.Grid.DoScroll(4) &&将网格的资料左移一格

  This.Parent.Grid.DoScroll(5) &&将网格的资料右移一格

  This.Parent.Grid.DoScroll(6) &&将网格的资料左移一页

  This.Parent.Grid.DoScroll(7) &&将网格的资料右移一页

共2页。 1 2 下一页 末页
相关搜索:
相关文章及软件
关注此文读者还看过
热门关注
特别推荐
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众