leeping 发表于 2006-1-15 18:33
[转载]VF编程经验
<P align=center><B><FONT face=宋体 size=3>VF编程经验</FONT></B></P>
<P align=center><BR><FONT face="Times New Roman">2005-12-7 (</FONT>本文已被阅读<FONT face="Times New Roman">1219</FONT>次<FONT face="Times New Roman">) </FONT></P><BR>怎样制作自定义工具栏?(注:对于摘自其他地方的编程经验,我们将注明出处及作者) <BR>1、建立的方法<BR>(1)建立新类别。在命令窗口中执行CREATE CLASS命令后,在新建类窗口中键入类别及类别库的名称,如下图:<BR><BR>(2)加入按钮对象。当进入类设计器时会发现Toolbar的窗口很小,因此你要仔细的建立按钮,如下图:<BR><BR>按下工具栏中的按钮,再在类设计器中的工具栏内单击鼠标左键,以加入一个按钮到该自定义工具栏中,并修改按钮的特性为:<BR>Caption=''<BR>Picture=Top1.bmp<BR>如果发现图形不能完全显示,表示图形太大可以修改成小一点的图形或将按钮拉大,如果要在按钮之间加入空格,请按下按钮,并在按钮之间按下。<BR>(3)编写按钮的事件过程。就是对每个按钮编写各自的Click过程,这与表单中按钮的Click事件建立过程一样。<BR>(4)保存。按下Ctrl+W将该类别保存到LIBS.VCX类别库中。 <BR>2、类别的应用<BR>此类别是一个Toolbar,而Toolbar事实上也是表格的一种,只是某些特性与表格不同,因此,如果显示数据的画面也是一个表格,便不能将其加入到数据显示表格中,因此我们要建立一个更大的对象以便同时加入表格和工具栏,此对象便是Formset。<BR>(1)建立新表格。在命令窗口中执行:CREATE FORM<BR>(2)建立表格集。请选定表单菜单中的创建表格集选项。<BR>(3)建立工具栏对象。对于工具栏不是直接以视觉化方式加入到表格集中的,而是通过程序建立,在Formset的ini事件中编写如下程序:<BR>SET CLASSLIB TO libs ADDITIVE<BR>This.AddObject('mybar','move_rec')<BR>This.mybar.show<BR>This.mybar.dock(0) <BR>关于dock()函数的说明:<BR>值 常量 说明<BR>- 1 TOOL_NOTDOCKED 不停放工具栏。<BR>0 TOOL_TOP 在 Visual FoxPro 主窗口的顶部停放工具栏。<BR>1 TOOL_LEFT 在 Visual FoxPro 主窗口的左边停放工具栏。<BR>2 TOOL_RIGHT 在 Visual FoxPro 主窗口的右边停放工具栏。<BR>3 TOOL_BOTTOM 在 Visual FoxPro 主窗口的底部停放工具栏。<BR>(4)执行。在执行表单的同时工具栏会被自动打开,如下图:<BR><BR><BR>启动EXE文件时如何隐藏VFP的主窗口显示?(注:对于摘自其他地方的编程经验,我们将注明出处及作者) <BR>用文本编辑器编辑一个CONFIG.FPW文件,写入一行“Screen=OFF”,将CONFIG.FPW保存到你的项目所在的目录,并将该文件加入到项目管理器中的其他项中,如下图:<BR><BR>背景音乐的实现(注:对于摘自其他地方的编程经验,我们将注明出处及作者) <BR>1、调用Windows的APT函数SndPlaySound播放声音文件(.WAV)。首先建立一个表单(FORM1),然后编写表单的 Activate过程: Public Sound<BR>Set Library To Foxtool.FLL<BR>Sound=Regfn("SndPlaySound","CI","I","Mmsystem")<BR>=Callfn(Sound,"BACK.WAV",1)<BR>再编写FORM1的Release过程:<BR>=Callfn(Sound,"",10)<BR>Set Library to<BR>运行表单后,BACK.WAV就作为背景音乐在后台播放,关闭表单时音乐自动停止。如果想让音乐自动循环播放,将Activate过程中最后一句换为:<BR>=Callfn(Soun,"BACK.WAV",1+8)即可。<BR>注意:如果你的计算机没有声卡,运行以上程序时将出错。 (湖北 闫东)<BR>2、用Set Bell To 响铃命令。编写表单的Activate过程:<BR>Set Bell On<BR>Set Bell To "BACK.WAV"<BR>??CHR(7)<BR>再编写表单的Release过程:<BR>Set Bell To<BR>注意:该种方法在运行时,不能进行循环播放,不能中断音乐的播放,但是在没有声卡的情况下,该种程序不会出错,只是进行PC喇叭的响铃一次。 <BR>移动字幕的制作?(注:对于摘自其他地方的编程经验,我们将注明出处及作者) <BR>1、首先用画图软件做一幅字幕图画。<BR>2、建立一个表单(FORM1),单击工具栏中的计时器按钮,在表单中添加一个计时器控件(Timer1);单击工具栏中的图象按钮,在表单中加入字幕图画(Image1)。<BR>3、双击表单中的计时器控件,编写计时器的Timer过程:<BR>If Thisform.image1.TOP<0-Thisform.image1.height<BR>Thisform.image1.TOP=Thisform.height<BR>Endif<BR>Thisform.image1.TOP=Thisform.image1.top-1<BR>指定计时器事件的间隔,以毫秒为单位:Interval=50<BR>实例文件下载 <BR>进度条控件的插入?(注:对于摘自其他地方的编程经验,我们将注明出处及作者) <BR>1、单击表单工具栏中的OLE按钮,将出现插入对象窗口,单击插入控件单选按钮,选择Microsoft Progressbar控件。<BR>2、设定该控件的最大值。在该控件的属性窗口中输入max的值,这样当该控件的value的值在变大时,进度条会自动进行移动。 <BR>把金额由数字变成大写的小程序(对编写财务软件非常的有用)(注:对于摘自其他地方的编程经验,我们将注明出处及作者) <BR>1、编写如下函数。该函数的返回值能够舍去数字之间的零,比较准确,符合会计准则,比较适合打印银行存单等。<BR>PARA RMB<BR>SET TALK OFF<BR>XX=LTRIM(STR(RMB,11,2))<BR>RMBLEN=LEN(XX)<BR>DX='零'<BR>C1='零壹贰叁肆伍陆柒捌玖'<BR>C2='分角 元拾佰仟万拾佰仟'<BR>*----------------<BR>DO WHILE RMB>0.AND.RMBLEN>=1<BR>DB=SUBS(XX,LEN(XX)-RMBLEN+1,1)<BR>IF DB#'.'<BR>DX1=SUBS(C1,VAL(DB)*2+1,2)<BR>DX2=TRIM(SUBS(C2,(RMBLEN-1)*2+1,2))<BR>IF DX1='零'<BR>HZ=SUBS(DX,LEN(DX)-1,2)<BR>IF HZ='零'<BR>IF DX2='万'.OR.DX2='元'<BR>DX=SUBS(DX,1,LEN(DX)-2)+DX2<BR>ENDI<BR>ELSE<BR>IF DX2='万'.OR.DX2='元'<BR>DX=SUBS(DX,1,LEN(DX))+DX2<BR>ELSE<BR>DX=DX+DX1<BR>ENDIF<BR>ENDIF<BR>ELSE<BR>DX=DX+DX1+DX2<BR>ENDI<BR>ENDIF<BR>RMBLEN=RMBLEN-1<BR>ENDDO<BR>IF SUBS(DX,1,2)='元'<BR>DX=SUBS(DX,3,LEN(DX)-2)<BR>ENDI<BR>IF SUBS(DX,1,2)='零'<BR>DX=+SUBS(DX,3,LEN(DX)-2)<BR>ENDI<BR>IF SUBS(DX,LEN(DX)-1,2)='零'<BR>DX=SUBS(DX,1,LEN(DX)-2)+'整'<BR>ENDI<BR>SET TALK ON<BR>RETU DX<BR> 2、编写如下函数。该函数的返回值比较适合于一些单据的填空式打印,如增值税发票等。<BR>para rmb <BR>nDzs=strt(allt(str(rmb,15,2)),".","") &&把小数点去掉<BR>hzdx="零壹贰叁肆伍陆柒捌玖"<BR>nDW="分角元拾佰仟万拾佰仟亿拾佰仟"<BR>rmbdx=""<BR>nCd=len(nDzs)<BR>for i=1 to len(nDzs)<BR>NumS=substrc(hzdx,int(val(subs(nDzs,i,1))+1),1) && 数字转换<BR>nDWs=substrc(nDW,nCd,1) &&----------要单位,如果不要单位可将此句改为:nDWs=spac(2) <BR>rmbdx=rmbdx+NumS+nDwS<BR>nCd=nCd-1<BR>endfor<BR>retu rmbdx <BR>Visual FoxPro FAQ(注:对于摘自其他地方的编程经验,我们将注明出处及作者) <BR>Visual Foxpro FAQ译作稿<BR><BR>以下的内容由四川的网友江明汉译自 Scot Becker 所作的Visual FoxPro FAQ,本译稿去掉了一些与技术关系不大的内容及VFP3.0 的内容。<BR><BR><BR>问题1: 怎样从表单返加一个值?<BR>答案1: 可以在模式表单的unload事件中用Return来返回一个值。 <BR><BR><BR>问题2: 怎样在表单设计器中把属性或方法添加到表单中?<BR>答案2: 用表单设计器窗口或属性/事件/激活的方法窗口,从菜单中选择表<BR>单。最初的两个选择是新属性和新方法。选择你想要加入的一个并填写属性<BR>或方法的名称,新建的属性将出现在属性窗口的最底部。<BR><BR><BR>问题3: 我把的工具条或设计窗口移出了屏幕,怎样把它移回来?<BR>答案3: 工具条或窗口的位置保存在VFP主目录下的FOXUSER.DBF表中。如果<BR>删除或修改该文件,你的工具条和窗口将恢复他们的默认位置或你指定的位置。<BR>或从系统菜单的窗口菜单中选择重新安排全部。<BR><BR><BR>问题4: 当从Valid事件返回.F.值时,如何避免'无效的的用户输入了'信息?<BR>答案4: 用 0来替换.F.<BR>当你从Valid事件返回数值时,也就是在设置可取得焦点的控件的Tab Order。<BR><BR><BR>问题5: 模式表单和非模式表单的区别是什么?<BR>答案5: 模式表单一般地被用来处理错误报告,或者请求用户确认操作等。<BR>在模式表单中,菜单不能使用。如果需要,模式表单也提供应用'等待状态'。<BR>非模式表单提供更多的灵活性,它允许用户通过菜单操作,在表单中移动。<BR><BR><BR>问题6: 为什么编译后的程序运行时,屏幕一闪就退出了,为什么?<BR>答案6: 你需要在你的程序中建立'等待状态'。可以用READ EVENTS命令来建<BR>立等待状态。要清除等待状态,可使用CLEAR EVENTS命令。如果你只有一个屏<BR>幕,把表单的WindowState属性设置为Modal。这也提供等待状态,但是不允许<BR>你使用菜单。当模式表单被释放时,等待状态结束并返回至操作系统。<BR><BR><BR>问题7: 为什么当我建立表单时,我用SET命令设置的环境变量返回到了它们的默认值。<BR>答案7: 这是由于你的表单的数据会话期设置为私有数据工作期。很多"SET"<BR>命令仅对当前数据工作期有效。当你拥有私有数据工作期时,你必须再次确立<BR>那些设置值。要达到这一目的,你可以建立一个用于环境设置的类。在表单的<BR>INIT事件中设置你的环境值而在表单的DESTROY事件中恢复其原始值。<BR><BR><BR>问题8: 我在pageframe中的一个页中改变了记录指针,但我转到其他的页时,<BR>其他的页中的数据仍然是原记录的值。为什么?<BR>答案8: 你需要在你的每一页Activate()中放置代码来确信显示当前记录值。<BR>如果你在某处执行了THISFORM.Refresh()命令,VFP仅刷新PageFrame的当前页<BR>面上的内容。试着在每个页(Page)的Activate()中调用THIS.Refresh()。<BR><BR><BR>问题9: 当我运行表单时,它什么也不显示。表单本身是显示了,但其中的任何对象都不可见。<BR>答案9: 试着把LockScreen属性设置为.F.。<BR><BR><BR>问题10: 表单上有一对象,但我看不见它,我怎样选择并修改它?<BR>答案10: 打开属性窗口,该窗口中有一下拉列表,你可从中选择你想编辑的对象。<BR>一但你想编辑的对象在下拉列表中高亮显示,你就可以修改该对象。要在表单设<BR>计器中用鼠标调整它(或实际看到该对象),从菜单中选择"格式",然后选择"带到前面"。<BR><BR><BR>问题11: 我怎样把一个类从一个类库复制到另一类库中?<BR>答案11: 在专业版中,你可以两次打开类浏览器,从第二个类浏览器中类<BR>型下拉列表框中拖动类的图标到第二个类浏览器中。确信拖动它到另一个类<BR>浏览器的表单区中。你可以看到一个复制光标(带箭头的加号)。如果你是<BR>使用项目管理器且在项目中有两个类库,你可以从一个类库中拖动一个类到<BR>另一个类库中。但若目标类库中已有相同名字的类存在,则操作不会成功。<BR>也可用VFP 命令来完成这一任务:<BR>ADD CLASS MyTextBox OF MYLIB1.VCX TO MYLIB2.VCX.<BR>如果MyLib2里有另一个同名的类,操作也不会成功。但若在命令后加OVERWRITE子句,原有的类将被代替。<BR><BR><BR>问题12: 怎样能不使用属性窗口而进入容器?<BR>答案12: 在对象上单击鼠标右键。从弹出菜单中选择"编辑"。如果你是在<BR>网格上操作,你必须选择对象所在的列并使用属性窗口来选你想编辑的特定<BR>的目的。如果你想选择header类或列的其他的目的,你必须使用属性窗口。<BR><BR><BR>问题13: 如何把数组作为参数传递给表单?<BR>答案13: 在FoxPro中,数组必须按址传递。SET UDFPARMS决定参数的传递方<BR>式。在默认情况下,当你用DO...WITH调用过程或表单时,参数是按址传递。<BR>在函数或方法中,参数是按值传递。<BR>DIMENSION array[10] <BR>DO FORM Form1 WITH array <BR>在这种情况下,你必须用一个"@"符号强迫参数的传递为按址传递。<BR>DIMENSION array[10]<BR>MyForm = CREATEOBJECT("Form1", @myarray)<BR><BR><BR>问题14: 如何在应用程序中避免出现VFP的窗口标题?<BR>答案14: 在CONFIG.FPW文件中,加"TITLE = 你的标题"行。<BR>另外, 也可以在主程序中加入:<BR>_SCREEN.Caption="你的标题"<BR><BR><BR>问题15: 如何避免VFP的欢迎屏幕?<BR>答案15: 在你的快捷方式或图标的程序行中,在VFP.EXE后面加"-T"( 不要引号)。<BR><BR><BR>问题16: 在Win95中,所有窗口左上角的图标全部是Fox。我能代替它吗?<BR>答案16: 在你的开始程序,加入:<BR>_Screen.Icon="Vitus.ICO"<BR>在你的表单的Load事件中,加入:<BR>THISFORM.Icon ="Vitus.ICO"<BR>或者在表单设计器的属性窗口中设置它的值。<BR><BR><BR>问题17: 我怎样除掉表单标题条?<BR>答案17: 把表单的Caption属性设置为任意串<BR>把表单的MaxButton属性设置为.F.<BR>把表单的MinButton属性设置为.F.<BR>把表单的Movable属性设置为.F.<BR>在表单的INIT中写入<BR>THIS.CAPTION=''<BR><BR><BR>问题18: 事件的触发顺序是怎样的?<BR>答案18: 在帮助文件中查看 "VFP事件序列"。<BR>另外,在VFPSAMPLESCONTROLSEVENTS目录中,有一个名为EVENTS.APP的<BR>程序演示了不同对象的事件的触发顺序。<BR><BR><BR>问题19: 我怎样检查变量是否存在?<BR>答案19: 使用TYPE()函数来检查一个变量是否存在。<BR>IF TYPE("Var") = .t.<BR>MessageBox("It exists",0,"") <BR>ENDIF<BR>或你可以检查是否TYPE("Var")="U",若是,则变量不存在。<BR><BR><BR>问题20: VFP的表的最大容量是多少?<BR>答案20: 2 GB,且在将来版本中该限制可能被取消。<BR ><BR >
leeping 发表于 2006-1-15 18:34
问题21: 为什么当我运行EXE文件时,系统菜单总是在我自己的菜单前出现。<BR>答案21: 把SYSMENU=OFF放入你的Config.FPW文件。<BR><BR><BR>问题22: 我不能从一个对象的VALID事件中把焦点设置到另一个对象上。<BR>答案22: SETFOCUS()方法不能从Valid事件中运行。试着用LostFocus事件作为替代。<BR><BR><BR>问题23: 我怎样让表单设计器使用我自己的表单类为其缺省表单类?<BR>答案23: 从工具菜单中选择"选项"。<BR>选择"表单"页。<BR>在页的底部附近有一个你的表单类的检验框。<BR>给检验框打上钩,从问答中选择你的表单类。<BR>也可以单击"..." 按钮改变你的选择。<BR>若要使你的改娈长期生效,退出之前单击"设置为默认值"。<BR><BR><BR>问题24: 为什么当我要退出VFP时,得到一条信息 '不能退出VFP'。<BR>答案24: 检验ON SHUTDOWN。<BR><BR><BR>问题25: 运行一个表单时,怎样使它停下来?<BR>答案25: 可以在表单的INIT()加入RETURN .F.,该方法适用于所有的对象。<BR><BR><BR>问题26: 什么时候,计时器触发?<BR>答案26: 如果一个菜单弹出或MESSAGEBOX()窗口激活时,计时器将不会触<BR>发,当用户调整控件尺寸,或者拖动表单时,以及用户拖动scrollbar时,<BR>计时器也不会触发。<BR><BR><BR>问题27: 我怎样能不使用鼠标而离开网格?<BR>答案27: 你可以按下CTRL+TAB移动到下一个控件或SHIFT+CTRL+TAB移动到上一个控件。<BR>*****************************************************************<BR>问题28: 包含文件的范围是什么?<BR>答案28: 当你用"表单/包含文件"包括一个文件到表单时,表单的全部对象都可以访问它的内容。<BR>如果你用#include将它包含进一个方法时仅该方法可以访问它的内容。该规则也适用于类设计器。<BR><BR><BR>问题29: 为什么我的MEMLIMIT设置值不起作用?<BR>答案29: VFP在全部支撑的平台上灵活地分配内存。因此,MEMLIMIT设置值不再是必不可少的。<BR><BR><BR>问题30: 我放置了检查框到我的网格,但是,它仅仅出现于当前选的行。<BR>答案30: 设置 Sparse 属性为.F.<BR><BR><BR>问题31: 怎样使用宏扩展?<BR>答案31: 你可在运行时用&来解释,实行指令。<BR><BR><BR>问题32: 怎样从表中选择重复的记录?<BR>答案32: <BR>SELECT * ;<BR>FROM table A ;<BR>WHERE EXISTS ;<BR>(SELECT * ;<BR>FROM table B ;<BR>WHERE B.key = A.key;<BR>GROUP BY key ;<BR>HAVING COUNT(*) > 1 ) ;<BR>ORDER BY fieldlist<BR>或<BR>SELECT * ;<BR>FROM table ;<BR>WHERE key IN ;<BR>( SELECT key ;<BR>FROM table ;<BR>GROUP BY key ;<BR>HAVING count(*) > 1) ;<BR>ORDER BY fieldlist <BR><BR><BR>问题33: DataSource 属性和 ControlSource 属性之间有什么不同?以及 RowSource 属性和 RecordSource 属性?<BR>答案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 属性。对于表格控件,数据是与一个完整的记录绑定的。<BR><BR>问题34: 为什么组合框只显示一行数据?我首先为该组合框定义了一个数组,然后,在表单的 Init 事件中执行了一个 SELECT - SQL 命令来激活数组。<BR>答案34: 在表单的 Init 事件中,您建立了一个没有行或者只有一行的数组。当表单建立后,组合框的 Init 事件发生在表单的 Init 事件之前,所以组合框只包含一列数据。要改正此错误,请在 SELECT - SQL 语句下面紧接着添加下面代码行,在表单的 Init 事件中建立数组:<BR>THISFORM.ComboBox1.RowSource = THISFORM.ComboBox1.RowSource<BR>*****************************************************************<BR>当我的游标用SELECT - SQL INTO CURSOR 更新后,网格内容没有刷新?<BR>由于SELECT - SQL 命令是重新建立网格RecordSource属性里的同名游标,<BR>当新的游标建立时,原有的游标被丢弃了。因此当SELECT - SQL执行时,<BR>网格RecordSource属性被清除复位,并且新网格被建立且未从游标中装入<BR>数据。要刷新网格,设置网格的RecordSource属性新的数据源上:<BR>THISFORM.Grid1.RecordSource=THISFORM.Grid1.RecordSource<BR><BR><BR>问题35: 如何隐藏标准的或定制的工具条?<BR>答案35: 用HIDE WINDOW命令来隐藏工具条。工具条也可用SHOW WINDOW来显示。<BR><BR><BR>问题36: 我怎样用VFP做小的图标(ImagEdit)?<BR>答案36: Windows 95能在资源管理器和启始菜单中显示小图标。你可以ImagEdit<BR>来为你的VFP应用运行在Windows 95下面制作小的图标(ImagEdit包括在VFP的专业版内。)。<BR>在ImagEdit中制作新图标的时候,小图标通过指定小的图标16-的彩色16x16选项制作。<BR>如果这选项不可用,制作新图标的时候把下列行加到坐落于你的WINDOWS目录的IMAGEDIT.INI文件中:<BR>[ImagEdit.Icon]<BR>Small Icon=16,16,16<BR><BR><BR>问题37: 如何在导航中添加记录到表的缓存中?<BR>答案37: 要把记录指示移动到表缓存中添加的记录上,用带负值的GO命令。<BR>RECNO()函数在表缓存中的记录上返回升序负数值。<BR><BR><BR>问题38: 怎样(以编程的方式)复制内容到剪切板?<BR>答案38: 在求助文件中看_ClipText。<BR><BR><BR>问题39: 调试时,怎样保持计时器处于激活状态?<BR>答案39: 把以下代码放入Timer()事件中:<BR>_Screen.ActiveForm.MyTimer.Enabled=.T. <BR>IF WVISIBLE("Trace") THIS.Enabled=.F.<BR>WVISIBLE("Trace"THIS.Enabled=.F。<BR>ENDIF<BR><BR><BR>问题40: 怎样播放声音文件(.WAV)?<BR>答案40: 除了使用第三方产品和API调用之外,播放.WAV的最简单的方法是:<BR>SET BELL TO "c:sound.wav",1 <BR>??CHR(7) <BR>SET BELL TO<BR><BR><BR>问题41: 怎样设置多个过程或类文件?<BR>答案41: 使用ADDITIVE 子句:<BR>SET PROCEDURE TO proc.prg ADDITIVE<BR>SET LIBRARY TO class.vcx ADDITIVE<BR><BR><BR>问题42: 为什么当filter设置时,应该用locate代替seek?<BR>答案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, 在将索引设置为原来的升序。<BR><BR><BR>问题43: 我怎样让属性和方法设置到它们的缺省值?<BR>答案43: 你可以在属性窗口中右击一个属性,将会返回该属性的缺省值。当你想设置一个对象的属性为其父类的属性时,该办法特别有用。例如,如果你使用标签类定义了一个标签,且设置该标签类的FontBold = .T,但该对象<BR>的FontBold = .F.你可仅右击鼠标,并选的"恢复至默认值"来恢复该类的定义默认定义。该动作也适用于属性窗口中的方法。你可以在方法列表上右击鼠标来除掉某方法中的全部方法代码。这是重置当前对象,让它运行类定义中的方法代码的简便方法。如果你不小心让你的方法编码被缺省值复位,不要保存修改,立即退出表单设计器,当系统提示是否保存修改时,选"否"取回它。<BR><BR><BR>问题44: 如何能既执行默认的父类的事件/方法又运行一些补充的代码?<BR>答案44: 你可以在子类的方法中输入代码来忽略父类方法代码。FoxPro <BR>将方法代码中的所有字符串解释为可执行代码包括空格和注释,这样将可以<BR>忽略父类方法代码。如果你想把注解加到方法代码中,同时又保持继承的父类<BR>方法编码,使用范围解析操作符(::)来明确调用父类代码。<BR>一个命令按钮的单击事件过程可能是这样的:<BR>&&<BR>Comments<BR>MyExitButton::Click
leeping 发表于 2006-1-15 18:36
<P 0cm 0cm 0pt; TEXT-ALIGN: left" align=left><BR>问题<FONT face="Times New Roman">45: </FONT>怎样使<FONT face="Times New Roman"> </FONT>工具条按钮的<FONT face="Times New Roman"> </FONT>可用<FONT face="Times New Roman">/</FONT>不可用<FONT face="Times New Roman"> </FONT>和对应的菜单选择协调一致?<BR>答案<FONT face="Times New Roman">45: </FONT>一个协调工具条按钮和菜单选择的简单的方法是<FONT face="Times New Roman">:</FONT>在菜单的<FONT face="Times New Roman"> Skip</FONT>子句中使用<FONT face="Times New Roman"> Enabled</FONT>属性。<BR>例如,你有一个名为<FONT face="Times New Roman">oToolbar</FONT>的工具条<FONT face="Times New Roman">,</FONT>其上有一个新建命令按钮叫<FONT face="Times New Roman">cmdAdd</FONT>同<BR>时你有一个记录菜单其中有一个新建选项。给新建选项的<FONT face="Times New Roman">Skip</FONT>子句加上<FONT face="Times New Roman">"oToolBar.cmdAdd.Enabled = .F."<BR></FONT>或<FONT face="Times New Roman">"!oToolBar.cmdAdd.Enabled"</FONT>则新建菜单选项仅当<FONT face="Times New Roman">oToolBar.cmdAdd</FONT>可用时才是可用的。<BR>记住<BR><FONT face="Times New Roman">Set Skip</FONT>当它的值为<FONT face="Times New Roman">.T.</FONT>时,废止菜单选项,所以在上例中的<FONT face="Times New Roman">NOT </FONT>操作符<FONT face="Times New Roman"> (!)</FONT>或<FONT face="Times New Roman">"= .F."</FONT>是必不可少的。<BR><BR><BR>问题<FONT face="Times New Roman">46: </FONT>怎样同时设置多个对象的同一属性<FONT face="Times New Roman">?<BR></FONT>答案<FONT face="Times New Roman">46: </FONT>用<FONT face="Times New Roman">SetAll</FONT>方法。例如,你决定为全部网格中的标题设置<FONT face="Times New Roman">9</FONT>号宋体。将以下代码放入网格的<FONT face="Times New Roman">Init</FONT>事件:<BR><FONT face="Times New Roman">THIS.SETALL("FontName","Arial","Header")<BR><BR><BR></FONT>问题<FONT face="Times New Roman">47: </FONT>我必须总是打入长长的对象层次列表吗?<BR>答案<FONT face="Times New Roman">47: </FONT>不<FONT face="Times New Roman">.</FONT>你可以使用变量替换<BR>以下两种方法的效果是相同的<FONT face="Times New Roman">:<BR>Thisform.pageframe.page1.container.object.caption="This"<BR>Thisform.pageframe.page1.container.object.left=10<BR>Thisform.pageframe.page1.container.object.top=50<BR><BR>temp = Thisform.pageframe.page1.container.object <BR>temp.caption = "This " <BR>temp.left = 10 <BR>temp.top = 50 <BR></FONT>另一种方法是使用<FONT face="Times New Roman">WITH</FONT>命令,<BR><FONT face="Times New Roman">WITH Thisform.pageframe.page1.container.object <BR>.caption = "This " <BR>.left = 10 <BR>.top = 50 <BR>ENDWITH <BR><BR><BR></FONT>问题<FONT face="Times New Roman">48: </FONT>可以迅速地在属性窗口中定位吗?<BR>答案<FONT face="Times New Roman">48: </FONT>热键<FONT face="Times New Roman">Ctrl+Alt+key</FONT>可使在属性窗口中定位变得快而简单。<BR>例如,当表单对象选中时,在属性窗口中按下<FONT face="Times New Roman">Ctrl+Alt+C</FONT>将快速移动到<FONT face="Times New Roman">Caption</FONT>属性。<BR><BR><BR>问题<FONT face="Times New Roman">49: </FONT>当所有窗口打开时,怎样才能看到<FONT face="Times New Roman">VFP</FONT>桌面上的内容?<BR>答案<FONT face="Times New Roman">49: </FONT>按<FONT face="Times New Roman">ALT+CTRL+SHIFT</FONT>将把全部打开的窗口隐藏起来,直到放开键。<BR><BR><BR>问题<FONT face="Times New Roman">50: </FONT>我能创建文本报表吗?<BR>答案<FONT face="Times New Roman">50: </FONT>可以。将报表表单的<FONT face="Times New Roman">ASCII</FONT>分句打上钩。<BR><BR><BR>问题<FONT face="Times New Roman">51: </FONT>我怎样把事情的动作在<FONT face="Times New Roman">"</FONT>大小调整工具条<FONT face="Times New Roman">"</FONT>中颠倒过来?<BR>答案<FONT face="Times New Roman">51: </FONT>当你单击它的时候,按住<FONT face="Times New Roman">Ctrl</FONT>键不放。<BR><BR><BR>问题<FONT face="Times New Roman">52: </FONT>我怎样能更精确地移动表单中的对象?<BR>答案<FONT face="Times New Roman">52: </FONT>可以一次移动一个对象一个象素。方法是<FONT face="Times New Roman">:</FONT>使用箭头键或拖动它时按下<FONT face="Times New Roman">Ctrl</FONT>键不放。<BR><BR><BR>问题<FONT face="Times New Roman">53: </FONT>可以在多窗口中进行拖放操作吗?<BR>答案<FONT face="Times New Roman">53: </FONT>是,可以在命令窗口中看看效果。你可以拖动在这里打入的代码到任何编程窗口中。<BR><BR><BR>问题<FONT face="Times New Roman">54: </FONT>当修改页属性的时候,我得到一条错误信息<FONT face="Times New Roman"> "</FONT>属性<FONT face="Times New Roman">xyz</FONT>找不到<FONT face="Times New Roman">"</FONT>。<BR>答案<FONT face="Times New Roman">54: </FONT>也许你错误地引用了<FONT face="Times New Roman">pageframe</FONT>容器对象自身:<BR><FONT face="Times New Roman">ThisForm.Page1.xyz=20<BR></FONT>应该是:<BR><FONT face="Times New Roman">ThisForm.Pageframe.Page1.xyz=20<BR><BR><BR></FONT>问题<FONT face="Times New Roman">55: </FONT>如何添加文本到备注字段?<BR>答案<FONT face="Times New Roman">55: <BR>lcMemo='Append this string'<BR>REPLACE Table.MemoField WITH lcMemo ADDITIVE<BR><BR><BR></FONT>问题<FONT face="Times New Roman">56: VFP 5.0</FONT>有那些新功能?<BR>答案<FONT face="Times New Roman">56: </FONT>很多,很多的东西。<BR>新特征,更牢固的环境,更小存储器需求,错误校正,并且更好命名<FONT face="Times New Roman">,</FONT>开发环境<FONT face="Times New Roman">.<BR></FONT>更多的细节的微软公司WWW网点。<BR><BR><BR>问题<FONT face="Times New Roman">57: </FONT>当启动应用程序的<FONT face="Times New Roman"> .EXE </FONT>文件时,如何隐藏<FONT face="Times New Roman"> Visual FoxPro </FONT>桌面?<BR>答案<FONT face="Times New Roman">57: </FONT>在<FONT face="Times New Roman"> CONFIG.FPW </FONT>配置文件中添加如下命令行:<BR><FONT face="Times New Roman">SCREEN=OFF<BR></FONT>注意:如果您无须将<FONT face="Times New Roman"> CONFIG.FPW </FONT>作为单独的文件提供<FONT face="Times New Roman">(</FONT>也就是说,在连编<FONT face="Times New Roman"> .EXE </FONT>文件之后<BR>,您不需要对它作任何改动<FONT face="Times New Roman">) </FONT>。您可向项目中添加<FONT face="Times New Roman"> CONFIG.FPW </FONT>文件,并将之标记为可包含<BR>的,该文件就会连编为<FONT face="Times New Roman"> .EXE </FONT>文件的一部分。只有顶层表单活动时,<FONT face="Times New Roman">Visual FoxPro </FONT>才可<BR>以隐藏桌面。使用如下命令,您可以用编程方式隐藏桌面(假设已有一个顶层表单处于活动状态中)<FONT face="Times New Roman">:<BR>_VFP.Visible = .F.<BR><BR><BR></FONT>问题<FONT face="Times New Roman">58: </FONT>如何建立一个带有顶层菜单的顶层表单?<BR>答案<FONT face="Times New Roman">58: </FONT>要建立一个顶层表单,请将表单的<FONT face="Times New Roman"> ShowWindow </FONT>属性设置为<FONT face="Times New Roman"> 2- </FONT>作为顶层表单。<BR>要建立一个顶层菜单,请打开<FONT face="Times New Roman">"</FONT>菜单设计器<FONT face="Times New Roman">"</FONT>。从<FONT face="Times New Roman">"</FONT>显示<FONT face="Times New Roman">"</FONT>菜单中,选择<FONT face="Times New Roman">"</FONT>常规选项<FONT face="Times New Roman">"</FONT>,然后设<BR>置<FONT face="Times New Roman">"</FONT>顶层表单<FONT face="Times New Roman">"</FONT>选项。要想将顶层菜单放入顶层表单中,请在表单的<FONT face="Times New Roman"> Init</FONT>(或其他)事件中<BR>添加相关的代码。例如<FONT face="Times New Roman">:<BR>DO </FONT></P>with THIS,.T.<BR>如果要查看调用顶层菜单的不同选项,请参阅 generated .mpr 文件中的开始部分。<BR><BR><BR>问题59: 当我从工具菜单中挑选向导时,应用程序向导不出现。怎样才能运行它?<BR>答案59: 要运行应用程序向导, 从工具菜单选向导并从子菜单中选择全部。这将<BR>打开向导选择对话框,从中选择的应用程序向导。<BR><BR><BR>问题60: 如何在组合框中隐藏指定的列,只显示其他的列?<BR>答案60: 在组合框中,隐藏指定列的最简单方法是使用"组合框生成器"。<BR>在"组合框生成器"的"布局"选项卡上,将这些列拖到您所希望的宽度。<BR>如果要通过编程在组合框中隐藏指定的列,请将这些列的 ColumnWidth 属性设置为 0。<BR>在如下的程序代码中,列 1 和列 2 被隐藏,列 3 的宽度为 100 pixels:<BR>THISFORM.ComboBox1.ColumnWidths = 0,0,100<BR><BR><BR>问题61: 在一个编辑窗口中,能否对标注语法的颜色进行定制?<BR>答案61: 从"工具"菜单中选择"选项",很容易定制代码颜色。在"选项"对话框<BR>中选择"语法着色"选项卡,您会发现不同的方法可以定制代码颜色。<BR>如果要将语法颜色全部清除,从"编辑"菜单中选择"属性",显示出"属性"对话<BR>框。然后,清除"语法着色"复选框。<BR><BR><BR>问题62: 在我自己建立的类和表单的事件和方法过程中发生错误时,怎样排除?<BR>我怎样排除他们的缺陷?<BR>答案62: 要查看类和表单的方法或事件过程中程序编码,把SET STEP ON放<BR>在方法或事件过程的开始处(或任何其它你想每次一行的运行程序的代码段开<BR>始处). 然后用跟踪和调试窗口来排除你的编码的缺陷。<BR><BR><BR>问题63: 怎样把空白行加到网格上?<BR>答案63: 网格控件被设计来从表,游标或视图显示记录。你可以用APPEND BLANK <BR>或 INSERT - SQL命令增加一个空行到网格。在设计时, 网格不能显示数组的元素.<BR>如果你不想为网格建立一个磁盘文件,可以考虑用CREATE CURSOR命令来建立一个游<BR>标(在内存中的临时表). 在游标建立后,用INSERT - SQL添加记录到游标中。<BR><BR><BR>问题64: 怎样能计算报表内的行数?<BR>答案64: 你可以使用报表变量来计数报表的行数。从报表菜单中选择"变量"来<BR>建立一个报表变量。给报表变量取一个名字并增加一个IIF()函数到变量。作为<BR>逻辑表达式的IIF()函数,为你要计数的字段指定条件:<BR>第一个IIF()函数返回值指定1。<BR>第二的IIF()函数返回值指定0。<BR>例如,下列IIF()函数用于计数州名为华盛顿的记录(State = 'WA')的记录数。<BR>IIF(State = 'WA', 1, 0)<BR>选择"求和" 按钮, 并保存报表变量.<BR>放入一个字段到报表的分组或页脚带,并为报表表达式指定报表变量。<BR>当报表被预览或打印后,该字段显示一个符合在IIF()函数中指定条件的记录数.
250380407 发表于 2008-5-28 08:17
关于vf连编的问题
[tk05] [tk05] [tk05] [tk05]
我连编完EXE,没有错误(系统没有提示),在VF中运行正常,但是单独点EXE生成文件出现了"cannot locate the Microsoft Visual FoxPro support library"对话框
有没有明白的,帮帮忙!!!!!!!
页:
[1]