VF编程经验

 怎样制作自定义工具栏?
1、建立的方法
(1)建立新类别。在命令窗口中执行CREATE CLASS命令后,在新建类窗口中键入类别及类别库的名称,如下图:

(2)加入按钮对象。当进入类设计器时会发现Toolbar的窗口很小,因此你要仔细的建立按钮,如下图:

按下工具栏中的按钮,再在类设计器中的工具栏内单击鼠标左键,以加入一个按钮到该自定义工具栏中,并修改按钮的特性为:
Caption=
Picture=Top1.bmp
如果发现图形不能完全显示,表示图形太大可以修改成小一点的图形或将按钮拉大,如果要在按钮之间加入空格,请按下按钮,并在按钮之间按下。
(3)编写按钮的事件过程。就是对每个按钮编写各自的Click过程,这与表单中按钮的Click事件建立过程一样。
(4)保存。按下Ctrl+W将该类别保存到LIBS.VCX类别库中。
2、类别的应用
此类别是一个Toolbar,而Toolbar事实上也是表格的一种,只是某些特性与表格不同,因此,如果显示数据的画面也是一个表格,便不能将其加入到数据显示表格中,因此
们要建立一个更大的对象以便同时加入表格和工具栏,此对象便是Formset。
(1)建立新表格。在命令窗口中执行:CREATE FORM
(2)建立表格集。请选定表单菜单中的创建表格集选项。
(3)建立工具栏对象。对于工具栏不是直接以视觉化方式加入到表格集中的,而是通过程序建立,在Formset的ini事件中编写如下程序:
SET CLASSLIB TO libs ADDITIVE
This.AddObject(mybar,move_rec)
This.mybar.show
This.mybar.dock(0)
关于dock()函数的说明:
值 常量 说明
- 1 TOOL_NOTDOCKED 不停放工具栏。
0 TOOL_TOP 在 Visual FoxPro 主窗口的顶部停放工具栏。
1 TOOL_LEFT 在 Visual FoxPro 主窗口的左边停放工具栏。
2 TOOL_RIGHT 在 Visual FoxPro 主窗口的右边停放工具栏。
3 TOOL_BOTTOM 在 Visual FoxPro 主窗口的底部停放工具栏。
(4)执行。在执行表单的同时工具栏会被自动打开,如下图:


启动EXE文件时如何隐藏VFP的主窗口显示?(注:对于摘自其他地方的编程经验,
们将注明出处及作者)
用文本编辑器编辑一个CONFIG.FPW文件,写入一行“Screen=OFF”,将CONFIG.FPW保存到你的项目所在的目录,并将该文件加入到项目管理器中的其他项中,如下图:

背景音乐的实现(注:对于摘自其他地方的编程经验,
们将注明出处及作者)
1、调用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)即可。
注意:如果你的计算机没有声卡,运行以上程序时将出错。 (湖北 闫东)
2、用Set Bell To 响铃命令。编写表单的Activate过程:
Set Bell On
Set Bell To "BACK.WAV"
??CHR(7)
再编写表单的Release过程:
Set Bell To
注意:该种方法在运行时,不能进行循环播放,不能中断音乐的播放,但是在没有声卡的情况下,该种程序不会出错,只是进行PC喇叭的响铃一次。
移动字幕的制作?(注:对于摘自其他地方的编程经验,
们将注明出处及作者)
1、首先用画图软件做一幅字幕图画。
2、建立一个表单(FORM1),单击工具栏中的计时器按钮,在表单中添加一个计时器控件(Timer1);单击工具栏中的图象按钮,在表单中加入字幕图画(Image1)。
3、双击表单中的计时器控件,编写计时器的Timer过程:
If Thisform.image1.TOP<0-Thisform.image1.height
Thisform.image1.TOP=Thisform.height
Endif
Thisform.image1.TOP=Thisform.image1.top-1
指定计时器事件的间隔,以毫秒为单位:Interval=50
实例文件下载
进度条控件的插入?(注:对于摘自其他地方的编程经验,
们将注明出处及作者)
1、单击表单工具栏中的OLE按钮,将出现插入对象窗口,单击插入控件单选按钮,选择Microsoft Progressbar控件。
2、设定该控件的最大值。在该控件的属性窗口中输入max的值,这样当该控件的value的值在变大时,进度条会自动进行移动。
把金额由数字变成大写的小程序(对编写财务软件非常的有用)(注:对于摘自其他地方的编程经验,
们将注明出处及作者)
1、编写如下函数。该函数的返回值能够舍去数字之间的零,比较准确,符合会计准则,比较适合打印银行存单等。
PARA RMB
SET TALK OFF
XX=LTRIM(STR(RMB,11,2))
RMBLEN=LEN(XX)
DX=零
C1=零壹贰叁肆伍陆柒捌玖
C2=分角 元拾佰仟万拾佰仟
*----------------
DO WHILE RMB>0.AND.RMBLEN>=1
DB=SUBS(XX,LEN(XX)-RMBLEN+1,1)
IF DB#.
DX1=SUBS(C1,VAL(DB)*2+1,2)
DX2=TRIM(SUBS(C2,(RMBLEN-1)*2+1,2))
IF DX1=零
HZ=SUBS(DX,LEN(DX)-1,2)
IF HZ=零
IF DX2=万.OR.DX2=元
DX=SUBS(DX,1,LEN(DX)-2)+DX2
ENDI
ELSE
IF DX2=万.OR.DX2=元
DX=SUBS(DX,1,LEN(DX))+DX2
ELSE
DX=DX+DX1
ENDIF
ENDIF
ELSE
DX=DX+DX1+DX2
ENDI
ENDIF
RMBLEN=RMBLEN-1
ENDDO
IF SUBS(DX,1,2)=元
DX=SUBS(DX,3,LEN(DX)-2)
ENDI
IF SUBS(DX,1,2)=零
DX=+SUBS(DX,3,LEN(DX)-2)
ENDI
IF SUBS(DX,LEN(DX)-1,2)=零
DX=SUBS(DX,1,LEN(DX)-2)+整
ENDI
SET TALK ON
RETU DX
2、编写如下函数。该函数的返回值比较适合于一些单据的填空式打印,如增值税发票等。
para rmb
nDzs=strt(allt(str(rmb,15,2)),".","") &&把小数点去掉
hzdx="零壹贰叁肆伍陆柒捌玖"
nDW="分角元拾佰仟万拾佰仟亿拾佰仟"
rmbdx=""
nCd=len(nDzs)
for i=1 to len(nDzs)
NumS=substrc(hzdx,int(val(subs(nDzs,i,1))+1),1) && 数字转换
nDWs=substrc(nDW,nCd,1) &&----------要单位,如果不要单位可将此句改为:nDWs=spac(2)
rmbdx=rmbdx+NumS+nDwS
nCd=nCd-1
endfor
retu rmbdx
Visual FoxPro FAQ(注:对于摘自其他地方的编程经验,
们将注明出处及作者)
Visual Foxpro FAQ译作稿

以下的内容由四川的网友江明汉译自 Scot Becker 所作的Visual FoxPro FAQ,本译稿去掉了一些与技术关系不大的内容及VFP3.0 的内容。


问题1: 怎样从表单返加一个值?
答案1: 可以在模式表单的unload事件中用Return来返回一个值。


问题2: 怎样在表单设计器中把属性或方法添加到表单中?
答案2: 用表单设计器窗口或属性/事件/激活的方法窗口,从菜单中选择表
单。最初的两个选择是新属性和新方法。选择你想要加入的一个并填写属性
或方法的名称,新建的属性将出现在属性窗口的最底部。


问题3: 把的工具条或设计窗口移出了屏幕,怎样把它移回来?
答案3: 工具条或窗口的位置保存在VFP主目录下的FOXUSER.DBF表中。如果
删除或修改该文件,你的工具条和窗口将恢复他们的默认位置或你指定的位置。
或从系统菜单的窗口菜单中选择重新安排全部。


问题4: 当从Valid事件返回.F.值时,如何避免无效的的用户输入了信息?
答案4: 用 0来替换.F.
当你从Valid事件返回数值时,也就是在设置可取得焦点的控件的Tab Order。


问题5: 模式表单和非模式表单的区别是什么?
答案5: 模式表单一般地被用来处理错误报告,或者请求用户确认操作等。
在模式表单中,菜单不能使用。如果需要,模式表单也提供应用等待状态。
非模式表单提供更多的灵活性,它允许用户通过菜单操作,在表单中移动。


问题6: 为什么编译后的程序运行时,屏幕一闪就退出了,为什么?
答案6: 你需要在你的程序中建立等待状态。可以用READ EVENTS命令来建
立等待状态。要清除等待状态,可使用CLEAR EVENTS命令。如果你只有一个屏
幕,把表单的WindowState属性设置为Modal。这也提供等待状态,但是不允许
你使用菜单。当模式表单被释放时,等待状态结束并返回至操作系统。


问题7: 为什么当建立表单时,用SET命令设置的环境变量返回到了它们的默认值。
答案7: 这是由于你的表单的数据会话期设置为私有数据工作期。很多"SET"
命令仅对当前数据工作期有效。当你拥有私有数据工作期时,你必须再次确立
那些设置值。要达到这一目的,你可以建立一个用于环境设置的类。在表单的
INIT事件中设置你的环境值而在表单的DESTROY事件中恢复其原始值。


问题8: 在pageframe中的一个页中改变了记录指针,但转到其他的页时,
其他的页中的数据仍然是原记录的值。为什么?
答案8: 你需要在你的每一页Activate()中放置代码来确信显示当前记录值。
如果你在某处执行了THISFORM.Refresh()命令,VFP仅刷新PageFrame的当前页
面上的内容。试着在每个页(Page)的Activate()中调用THIS.Refresh()。


问题9: 当运行表单时,它什么也不显示。表单本身是显示了,但其中的任何对象都不可见。
答案9: 试着把LockScreen属性设置为.F.。


问题10: 表单上有一对象,但看不见它,怎样选择并修改它?
答案10: 打开属性窗口,该窗口中有一下拉列表,你可从中选择你想编辑的对象。
一但你想编辑的对象在下拉列表中高亮显示,你就可以修改该对象。要在表单设
计器中用鼠标调整它(或实际看到该对象),从菜单中选择"格式",然后选择"带到前面"。


问题11: 怎样把一个类从一个类库复制到另一类库中?
答案11: 在专业版中,你可以两次打开类浏览器,从第二个类浏览器中类
型下拉列表框中拖动类的图标到第二个类浏览器中。确信拖动它到另一个类
浏览器的表单区中。你可以看到一个复制光标(带箭头的加号)。如果你是
使用项目管理器且在项目中有两个类库,你可以从一个类库中拖动一个类到
另一个类库中。但若目标类库中已有相同名字的类存在,则操作不会成功。
也可用VFP 命令来完成这一任务:
ADD CLASS MyTextBox OF MYLIB1.VCX TO MYLIB2.VCX.
如果MyLib2里有另一个同名的类,操作也不会成功。但若在命令后加OVERWRITE子句,原有的类将被代替。


问题12: 怎样能不使用属性窗口而进入容器?
答案12: 在对象上单击鼠标右键。从弹出菜单中选择"编辑"。如果你是在
网格上操作,你必须选择对象所在的列并使用属性窗口来选你想编辑的特定
的目的。如果你想选择header类或列的其他的目的,你必须使用属性窗口。


问题13: 如何把数组作为参数传递给表单?
答案13: 在FoxPro中,数组必须按址传递。SET UDFPARMS决定参数的传递方
式。在默认情况下,当你用DO...WITH调用过程或表单时,参数是按址传递。
在函数或方法中,参数是按值传递。
DIMENSION array[10]
DO FORM Form1 WITH array
在这种情况下,你必须用一个"@"符号强迫参数的传递为按址传递。
DIMENSION array[10]
MyForm = CREATEOBJECT("Form1", @myarray)


问题14: 如何在应用程序中避免出现VFP的窗口标题?
答案14: 在CONFIG.FPW文件中,加"TITLE = 你的标题"行。
另外, 也可以在主程序中加入:
_SCREEN.Caption="你的标题"


问题15: 如何避免VFP的欢迎屏幕?
答案15: 在你的快捷方式或图标的程序行中,在VFP.EXE后面加"-T"( 不要引号)。


问题16: 在Win95中,所有窗口左上角的图标全部是Fox。能代替它吗?
答案16: 在你的开始程序,加入:
_Screen.Icon="Vitus.ICO"
在你的表单的Load事件中,加入:
THISFORM.Icon ="Vitus.ICO"
或者在表单设计器的属性窗口中设置它的值。


问题17: 怎样除掉表单标题条?
答案17: 把表单的Caption属性设置为任意串
把表单的MaxButton属性设置为.F.
把表单的MinButton属性设置为.F.
把表单的Movable属性设置为.F.
在表单的INIT中写入
THIS.CAPTION=

问题18: 事件的触发顺序是怎样的?
答案18: 在帮助文件中查看 "VFP事件序列"。
另外,在VFPSAMPLESCONTROLSEVENTS目录中,有一个名为EVENTS.APP的
程序演示了不同对象的事件的触发顺序。


问题19: 怎样检查变量是否存在?
答案19: 使用TYPE()函数来检查一个变量是否存在。
IF TYPE("Var") = .t.
MessageBox("It exists",0,"")
ENDIF
或你可以检查是否TYPE("Var")="U",若是,则变量不存在。


问题20: VFP的表的最大容量是多少?
答案20: 2 GB,且在将来版本中该限制可能被取消。


问题21: 为什么当运行EXE文件时,系统菜单总是在自己的菜单前出现。
答案21: 把SYSMENU=OFF放入你的Config.FPW文件。


问题22: 不能从一个对象的VALID事件中把焦点设置到另一个对象上。
答案22: SETFOCUS()方法不能从Valid事件中运行。试着用LostFocus事件作为替代。


问题23: 怎样让表单设计器使用自己的表单类为其缺省表单类?
答案23: 从工具菜单中选择"选项"。
选择"表单"页。
在页的底部附近有一个你的表单类的检验框。
给检验框打上钩,从问答中选择你的表单类。
也可以单击"..." 按钮改变你的选择。
若要使你的改娈长期生效,退出之前单击"设置为默认值"。


问题24: 为什么当要退出VFP时,得到一条信息 不能退出VFP。
答案24: 检验ON SHUTDOWN。


问题25: 运行一个表单时,怎样使它停下来?
答案25: 可以在表单的INIT()加入RETURN .F.,该方法适用于所有的对象。


问题26: 什么时候,计时器触发?
答案26: 如果一个菜单弹出或MESSAGEBOX()窗口激活时,计时器将不会触
发,当用户调整控件尺寸,或者拖动表单时,以及用户拖动scrollbar时,
计时器也不会触发。


问题27: 怎样能不使用鼠标而离开网格?
答案27: 你可以按下CTRL+TAB移动到下一个控件或SHIFT+CTRL+TAB移动到上一个控件。
*****************************************************************
问题28: 包含文件的范围是什么?
答案28: 当你用"表单/包含文件"包括一个文件到表单时,表单的全部对象都可以访问它的内容。
如果你用#include将它包含进一个方法时仅该方法可以访问它的内容。该规则也适用于类设计器。


问题29: 为什么的MEMLIMIT设置值不起作用?
答案29: VFP在全部支撑的平台上灵活地分配内存。因此,MEMLIMIT设置值不再是必不可少的。


问题30: 放置了检查框到的网格,但是,它仅仅出现于当前选的行。
答案30: 设置 Sparse 属性为.F.


问题31: 怎样使用宏扩展?
答案31: 你可在运行时用&来解释,实行指令。


问题32: 怎样从表中选择重复的记录?
答案32:
SELECT * ;
FROM table A ;
WHERE EXISTS ;
(SELECT * ;
FROM table B ;
WHERE B.key = A.key;
GROUP BY key ;
HAVING COUNT(*) > 1 ) ;
ORDER BY fieldlist

SELECT * ;
FROM table ;
WHERE key IN ;
( SELECT key ;
FROM table ;
GROUP BY key ;
HAVING count(*) > 1) ;
ORDER BY fieldlist


问题33: DataSource 属性和 ControlSource 属性之间有什么不同?以及 RowSource 属性和 RecordSource 属性?
答案33: DataSource 属性可以影响存储在一个数据库 (.DBC) 中的 ODBC 视图。它包含了对连接到 ODBC 数据文件名称的引用,并且必须指向一个通过 ODBC 管理程序定义的有效的数据源。您可以使用 SQLSETPROP( ) 函数操作 DataSource 属性,而用 SQLGETPROP( ) 函数可以查看它的设置。ControlSource 属性用来确定一个对象所绑定的数据源;一个对象所绑定的表或者视图可以为任意类型,包括本地 Visual FoxPro 表,具有 ControlSource 属性的对象有:CheckBox、Column、ComboBox、CommandGroup、EditBox、ListBox、OLE Bound Control、 OptionButton、OptionGroup、Spinner 和 TextBox 控件。某些控件(ListBox 和 ComboBox)除了 ControlSource 属性之外,还有 RowSource 属性允许您一次显示多于一个字段和行。数据仍然是与单一的字段绑定的,这就是为什么这些控件需要 ControlSource 属性。表格控件是唯一具有 RecordSource 属性的控件,但是没有 ControlSource 属性。对于表格控件,数据是与一个完整的记录绑定的。

问题34: 为什么组合框只显示一行数据?首先为该组合框定义了一个数组,然后,在表单的 Init 事件中执行了一个 SELECT - SQL 命令来激活数组。
答案34: 在表单的 Init 事件中,您建立了一个没有行或者只有一行的数组。当表单建立后,组合框的 Init 事件发生在表单的 Init 事件之前,所以组合框只包含一列数据。要改正此错误,请在 SELECT - SQL 语句下面紧接着添加下面代码行,在表单的 Init 事件中建立数组:
THISFORM.ComboBox1.RowSource = THISFORM.ComboBox1.RowSource
*****************************************************************
的游标用SELECT - SQL INTO CURSOR 更新后,网格内容没有刷新?
由于SELECT - SQL 命令是重新建立网格RecordSource属性里的同名游标,
当新的游标建立时,原有的游标被丢弃了。因此当SELECT - SQL执行时,
网格RecordSource属性被清除复位,并且新网格被建立且未从游标中装入
数据。要刷新网格,设置网格的RecordSource属性新的数据源上:
THISFORM.Grid1.RecordSource=THISFORM.Grid1.RecordSource


问题35: 如何隐藏标准的或定制的工具条?
答案35: 用HIDE WINDOW命令来隐藏工具条。工具条也可用SHOW WINDOW来显示。


问题36: 怎样用VFP做小的图标(ImagEdit)?
答案36: Windows 95能在资源管理器和启始菜单中显示小图标。你可以ImagEdit
来为你的VFP应用运行在Windows 95下面制作小的图标(ImagEdit包括在VFP的专业版内。)。
在ImagEdit中制作新图标的时候,小图标通过指定小的图标16-的彩色16x16选项制作。
如果这选项不可用,制作新图标的时候把下列行加到坐落于你的WINDOWS目录的IMAGEDIT.INI文件中:
[ImagEdit.Icon]
Small Icon=16,16,16


问题37: 如何在导航中添加记录到表的缓存中?
答案37: 要把记录指示移动到表缓存中添加的记录上,用带负值的GO命令。
RECNO()函数在表缓存中的记录上返回升序负数值。


问题38: 怎样(以编程的方式)复制内容到剪切板?
答案38: 在求助文件中看_ClipText。


问题39: 调试时,怎样保持计时器处于激活状态?
答案39: 把以下代码放入Timer()事件中:
_Screen.ActiveForm.MyTimer.Enabled=.T.
IF WVISIBLE("Trace") THIS.Enabled=.F.
WVISIBLE("Trace"THIS.Enabled=.F。
ENDIF


问题40: 怎样播放声音文件(.WAV)?
答案40: 除了使用第三方产品和API调用之外,播放.WAV的最简单的方法是:
SET BELL TO "c:sound.wav",1
??CHR(7)
SET BELL TO


问题41: 怎样设置多个过程或类文件?
答案41: 使用ADDITIVE 子句:
SET PROCEDURE TO proc.prg ADDITIVE
SET LIBRARY TO class.vcx ADDITIVE

问题42: 为什么当filter设置时,应该用locate代替seek?
答案42: 当你的查找字段是建立了索引且当前索引是该索引时,SEEK 通常是查找单个记录的最快的方法。不过,当设置了filter时,SEEK 非常慢。理由是SEEK将查找符合你的搜索标准的第一个记录。FoxPro为了移动记录指针到相应的记录上,必须找到和你的标准相匹配且和filter条件相称的记录。和 SEEK不同, LOCATE 是可进行Rushmore优化的. 当一个可优化的filter 起作用时,LOCATE FOR CustId=m.CustId 通常比SEEK m.CustId 更快。在GO TOP 和 GO BOTTOM 中也存在相似的问题。用无子句的LOCATE来执行GO TOP,将会使记录指针移动到乎合filter 条件的第一个记录。要执行 GO BOTTOM, 设置当前索引标识的降序然后LOCATE, 在将索引设置为原来的升序。


问题43: 怎样让属性和方法设置到它们的缺省值?
答案43: 你可以在属性窗口中右击一个属性,将会返回该属性的缺省值。当你想设置一个对象的属性为其父类的属性时,该办法特别有用。例如,如果你使用标签类定义了一个标签,且设置该标签类的FontBold = .T,但该对象
的FontBold = .F.你可仅右击鼠标,并选的"恢复至默认值"来恢复该类的定义默认定义。该动作也适用于属性窗口中的方法。你可以在方法列表上右击鼠标来除掉某方法中的全部方法代码。这是重置当前对象,让它运行类定义中的方法代码的简便方法。如果你不小心让你的方法编码被缺省值复位,不要保存修改,立即退出表单设计器,当系统提示是否保存修改时,选"否"取回它。


问题44: 如何能既执行默认的父类的事件/方法又运行一些补充的代码?
答案44: 你可以在子类的方法中输入代码来忽略父类方法代码。FoxPro
将方法代码中的所有字符串解释为可执行代码包括空格和注释,这样将可以
忽略父类方法代码。如果你想把注解加到方法代码中,同时又保持继承的父类
方法编码,使用范围解析操作符(::)来明确调用父类代码。
一个命令按钮的单击事件过程可能是这样的:
&&
Comments
MyExitButton::Click
&&


问题45: 怎样使 工具条按钮的 可用/不可用 和对应的菜单选择协调一致?
答案45: 一个协调工具条按钮和菜单选择的简单的方法是:在菜单的 Skip子句中使用 Enabled属性。
例如,你有一个名为oToolbar的工具条,其上有一个新建命令按钮叫cmdAdd同
时你有一个记录菜单其中有一个新建选项。给新建选项的Skip子句加上"oToolBar.cmdAdd.Enabled = .F."
或"!oToolBar.cmdAdd.Enabled"则新建菜单选项仅当oToolBar.cmdAdd可用时才是可用的。
记住
Set Skip当它的值为.T.时,废止菜单选项,所以在上例中的NOT 操作符 (!)或"= .F."是必不可少的。


问题46: 怎样同时设置多个对象的同一属性?
答案46: 用SetAll方法。例如,你决定为全部网格中的标题设置9号宋体。将以下代码放入网格的Init事件:
THIS.SETALL("FontName","Arial","Header")


问题47: 必须总是打入长长的对象层次列表吗?
答案47: 不.你可以使用变量替换
以下两种方法的效果是相同的:
Thisform.pageframe.page1.container.object.caption="This"
Thisform.pageframe.page1.container.object.left=10
Thisform.pageframe.page1.container.object.top=50

temp = Thisform.pageframe.page1.container.object
temp.caption = "This "
temp.left = 10
temp.top = 50
另一种方法是使用WITH命令,
WITH Thisform.pageframe.page1.container.object
.caption = "This "
.left = 10
.top = 50
ENDWITH


问题48: 可以迅速地在属性窗口中定位吗?
答案48: 热键Ctrl+Alt+key可使在属性窗口中定位变得快而简单。
例如,当表单对象选中时,在属性窗口中按下Ctrl+Alt+C将快速移动到Caption属性。


问题49: 当所有窗口打开时,怎样才能看到VFP桌面上的内容?
答案49: 按ALT+CTRL+SHIFT将把全部打开的窗口隐藏起来,直到放开键。


问题50: 能创建文本报表吗?
答案50: 可以。将报表表单的ASCII分句打上钩。


问题51: 怎样把事情的动作在"大小调整工具条"中颠倒过来?
答案51: 当你单击它的时候,按住Ctrl键不放。


问题52: 怎样能更精确地移动表单中的对象?
答案52: 可以一次移动一个对象一个象素。方法是:使用箭头键或拖动它时按下Ctrl键不放。


问题53: 可以在多窗口中进行拖放操作吗?
答案53: 是,可以在命令窗口中看看效果。你可以拖动在这里打入的代码到任何编程窗口中。


问题54: 当修改页属性的时候,得到一条错误信息 "属性xyz找不到"。
答案54: 也许你错误地引用了pageframe容器对象自身:
ThisForm.Page1.xyz=20
应该是:
ThisForm.Pageframe.Page1.xyz=20


问题55: 如何添加文本到备注字段?
答案55:
lcMemo=Append this string
REPLACE Table.MemoField WITH lcMemo ADDITIVE


问题56: VFP 5.0有那些新功能?
答案56: 很多,很多的东西。
新特征,更牢固的环境,更小存储器需求,错误校正,并且更好命名,开发环境.
更多的细节的微软公司WWW网点。


问题57: 当启动应用程序的 .EXE 文件时,如何隐藏 Visual FoxPro 桌面?
答案57: 在 CONFIG.FPW 配置文件中添加如下命令行:
SCREEN=OFF
注意:如果您无须将 CONFIG.FPW 作为单独的文件提供(也就是说,在连编 .EXE 文件之后
,您不需要对它作任何改动) 。您可向项目中添加 CONFIG.FPW 文件,并将之标记为可包含
的,该文件就会连编为 .EXE 文件的一部分。只有顶层表单活动时,Visual FoxPro 才可
以隐藏桌面。使用如下命令,您可以用编程方式隐藏桌面(假设已有一个顶层表单处于活动状态中):
_VFP.Visible = .F.


问题58: 如何建立一个带有顶层菜单的顶层表单?
答案58: 要建立一个顶层表单,请将表单的 ShowWindow 属性设置为 2- 作为顶层表单。
要建立一个顶层菜单,请打开"菜单设计器"。从"显示"菜单中,选择"常规选项",然后设
置"顶层表单"选项。要想将顶层菜单放入顶层表单中,请在表单的 Init(或其他)事件中
添加相关的代码。例如:
DO

with THIS,.T.
如果要查看调用顶层菜单的不同选项,请参阅 generated .mpr 文件中的开始部分。


问题59: 当从工具菜单中挑选向导时,应用程序向导不出现。怎样才能运行它?
答案59: 要运行应用程序向导, 从工具菜单选向导并从子菜单中选择全部。这将
打开向导选择对话框,从中选择的应用程序向导。


问题60: 如何在组合框中隐藏指定的列,只显示其他的列?
答案60: 在组合框中,隐藏指定列的最简单方法是使用"组合框生成器"。
在"组合框生成器"的"布局"选项卡上,将这些列拖到您所希望的宽度。
如果要通过编程在组合框中隐藏指定的列,请将这些列的 ColumnWidth 属性设置为 0。
在如下的程序代码中,列 1 和列 2 被隐藏,列 3 的宽度为 100 pixels:
THISFORM.ComboBox1.ColumnWidths = 0,0,100


问题61: 在一个编辑窗口中,能否对标注语法的颜色进行定制?
答案61: 从"工具"菜单中选择"选项",很容易定制代码颜色。在"选项"对话框
中选择"语法着色"选项卡,您会发现不同的方法可以定制代码颜色。
如果要将语法颜色全部清除,从"编辑"菜单中选择"属性",显示出"属性"对话
框。然后,清除"语法着色"复选框。


问题62: 在自己建立的类和表单的事件和方法过程中发生错误时,怎样排除?
怎样排除他们的缺陷?
答案62: 要查看类和表单的方法或事件过程中程序编码,把SET STEP ON放
在方法或事件过程的开始处(或任何其它你想每次一行的运行程序的代码段开
始处). 然后用跟踪和调试窗口来排除你的编码的缺陷。


问题63: 怎样把空白行加到网格上?
答案63: 网格控件被设计来从表,游标或视图显示记录。你可以用APPEND BLANK
或 INSERT - SQL命令增加一个空行到网格。在设计时, 网格不能显示数组的元素.
如果你不想为网格建立一个磁盘文件,可以考虑用CREATE CURSOR命令来建立一个游
标(在内存中的临时表). 在游标建立后,用INSERT - SQL添加记录到游标中。


问题64: 怎样能计算报表内的行数?
答案64: 你可以使用报表变量来计数报表的行数。从报表菜单中选择"变量"来
建立一个报表变量。给报表变量取一个名字并增加一个IIF()函数到变量。作为
逻辑表达式的IIF()函数,为你要计数的字段指定条件:
第一个IIF()函数返回值指定1。
第二的IIF()函数返回值指定0。
例如,下列IIF()函数用于计数州名为华盛顿的记录(State = WA)的记录数。
IIF(State = WA, 1, 0)
选择"求和" 按钮, 并保存报表变量.
放入一个字段到报表的分组或页脚带,并为报表表达式指定报表变量。
当报表被预览或打印后,该字段显示一个符合在IIF()函数中指定条件的记录数.
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页