返回列表 回复 发帖

VISUAL FOXPRO开发技巧

---摘自《电脑报》
1.组合框ComboBox的多栏使用
  熟悉VFP的用户都知道ComboBox对象若显示多栏式时,正常选择结果会以第一栏的内容显示在选择项目上。但实际系统设计中要显示多个栏位如图书编号、名称、作者和出版商,而选定的结果及要传递的值则可能是其中的任意一项,此时实现方法如下:
  (1)设定ComboBox对象的属性ColumnCount为4;属性ColumnCountWidth为12,40,12,40;属性RowSourceType为Field;属性RowSource为bookcode,title,writer,publisher。
  (2)设定ComboBox对象的属性BoundColumn为2,表示图书名称为要显示的内容。
  (3)设定ComboBox对象的事件Interactive Change Event的内容如下:
  ThisDisplayValue=ThisValue
  如欲将显示的内容贮存于其他变量,可添加如下内容:
  PublicUnknow_str
  Unknow_str=Thisvalue

2.组合框Combobox的使用
  (1〉组合框内要显示多列,可改变ColumnCount特性,但此时若不设置列宽度,将仅显示第一列。可以通过逗号分隔的清单列来指定列宽。如:用“10,50,100”设置三列宽度。
  (2〉要想让用户每次查找时输入一个字母,把IncrementalSearch特性设置为True,运行时,当用户输入一个字母时,高亮条将移列表中第一个字母和输入字母相匹配的第一条目上。
  (3〉要将输入的内容加入到下拉列表中,可在组合框的Valid事件中加入This.Additem(This.Displayvalue)代码。

3、ComboBox(组合框)的选择性输出
  控件ComboBox综合了TextBox(文本框)和ListBox(列表框)的特性,可显示一列项目。但要在ComboBox中对Table(表)中的某个Field(字段)的内容进行选择性输出却较为困难。现利用Foxpro的Query,举出一种解决办法:
  (1)设置Combo1的Style属性为2-Dropdown List(下拉列表框)。
  (2)设置Combo1.Rowsourcetype为4-Query(.QPR)查询文件。
  (3)设置Combo1.Rowsource为符合要求的查询文件。
  如:Select Sinfor.name &&选择表中的字段
  From Database!Sinfor &&标明表所在的数据库
  Where Sinfor.name IN(″王″)
  OR(Sinfor.name IN(″李″))
  这样便能在数据库Database中的表Sinfor的字段name中找出姓王和姓李的名字,并在ComboBox中输出。此外,查询文件可利用Foxpro的Query自动生成。

4.网格(Grid)的使用
  (1〉在网格中交替显示颜色
  记录号有序排列时,可以在网格的列中交替显示白色和灰色的记录,代码如下:
  thisform.Grid1.SetAll("DynamicBackColor","IIF(MOD(RECNO(),2)=0,RGB(255,255,255),RGB(192,192,192))","Column",&&交替显示白色和绿色的记录
  (2〉符合条件的记录显示颜色
  进行查询时,想在网格中动态地显示符合条件的记录的颜色,可以充分利用DynamicBackColor和DynamicForeColor特性。下例将符合条件的记录的字体变为红色Thisform.Grid1.Column1.DynamicForeColor="IIf(Database.Category_ID='A02',RGB(225,0,0),RGB(0,0,124))"

vf技巧

vfp9.0可以使用以下语句查询重复记录vfp9.0可以使用以下语句查询重复记录

select a.* ;
     from ctaisde as a,;
          ( select a31 ;
                  from ctaisde ;
                  group by a31 having count(a31)>1)  as b;
     where a.a31=b.a31
&&ctaisde 指表名,a31指关键字(即以哪一个字段为准检索重复记录)

vf技巧

VFP打印解决方案(修改报表)示例-修正版用VFP以前最头痛的是报表给用户后,打印机变换报表就有时刚好一页的变成两页
或移位。解决方法用WORD、EXCEL表来开放给用户。但打发票一次200多张转到EXCEL
中用不好。
  VFP9的报表是柳暗花明,可保护性的开放给最终用户。我写后给用户试用反映效果好。
现写成一示例抛砖引玉。

   使用修改的cPrint类方法,将类加入你的项目
*************************************
RELEASE oPreview &&如有同类变量名须先释放
PUBLIC oPreview  &&声明公用变量
cReportName="prnfast"  &&prnfast为打印报表名,可根据你的自行修改,不用加后缀。
*要做到报表的环境中表在当前目录,公用变量也已声明,不然出错。
Set Classlib To Cprint  Additive  &&指明类打开
oPreview=Creat([FrmReport],cReportName) &&创建报表浏览
oPreview.Show( )       &&显示报表浏览
CLEAR CLASSLIB Cprint  &&关闭打开的类
*************************************
  注:同时要注册mscomctl.ocx
  目录树控件TREEVIEW、图像IMAGELIST控件在mscomctl.ocx(本目录中有),在其它机上用要注册它,可用打包软件处理。
  也可手动注册:
   在WINDOWS的开始菜单中《运行》处输入
   regsvr32 路径\mscomctl.ocx      (注册)
   regsvr32 /u 路径\mscomctl.ocx   (取消注册)

  但你用我修改的简单类就不用注册mscomctl.ocx


  报表是在cPrint类的基础上更改。鸣谢冰火提供SP1的汉化及其它不知名的大侠。
主要有以下一些:
1、解决路径的问题。我是以 VFPPRJ 第一层文件夹。下有 prg,form,data等文件夹。
    a、在VFP的编程环境下
      运行defaut.prg
         cCurrentdir="D:\lab\dbftoword-excel" &&因是编程环境,要改写成你的绝对路径
         SET DEFAULT TO (cCurrentdir)         &&设置默认路径        
         DO prg\defpath.prg WITH (cCurrentdir)&&设置主目录下的有所文件夹路径defpath.prg放
         *主目录的 prg\下
    b、编成exe用的main.prg加入以下几句
       cPath=SYS(5)+SYS(2003)
       SET DEFAULT TO (cPath)         &&设置默认目录
       DO prg\defpath WITH (cPath)    &&设置VFP搜索目录
   如果是局域中多机操作同一数据库,其路径也要加入。
2、VFP的DBF表转成EXCEL两方法,一是先创建EXCEL报表,加入DBF表资料。
                               另一是调用已创建的EXCEL模板,加入DBF表资料。做复杂报表可用此。
3、VFP的DBF表转成WORD两方法,一是先创建WORD报表,加入DBF表资料。
                               另一是调用已创建的WORD模板,加入DBF表资料。
4、自编写的报表预览
5、报表修改两方法,先将FRX和FRT报表文件在编程下创建发,用FileToStr()加入DBF的TEXT字段
   
    预览修改是从数据库中用StrToFile()还原成报表,修改后退出时保存报表。如用户修改不能还
    原时,预览修改之前选默认报表,可将最原始的报表从数据库调出覆盖。
      方法1是用原cprint的VFP9自编功能,太复杂,不推荐此方法。
      方法2是VFP9的保护性修改,我在例子中是只能移位置。
          KEYBOARD "{ctrl+f10}"   &&最大化窗口
          MODIFY REPORT (oForm.cFrxName) IN  SCREEN  PROTECTED  SAVE
      我最中意及推荐此方法,所见既所得。如果你的用户习惯看中文,
      ****将表报的绑定临时DBF的字段名用中文**********
    select 字段1 as 中文名 ... from 数据表 order by into table 临时表

6、自定义打印纸张,有的打印机须进入设置界面调用其自身的自定义。
    我试过WINDOWS 2000系统中可加入0.5cm 高的纸,但没找到适合的打印机支持。打一行的此方法未找到。

  以上例子只须run文件夹的文件和VFP9的运行库(不是SP1)就可以了。或者你可重编EXE。
   注:编EXE时记得将报表文件排除。

级别这么高的人也灌水
这些是最基础的东西
返回列表