| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1287 人关注过本帖
标题:VFP9.0 进度条的问题
只看楼主 加入收藏
iamhyf
Rank: 1
等 级:新手上路
帖 子:69
专家分:2
注 册:2010-1-5
收藏
得分:0 
sdta版主的话我没有理解啊,用VFP编程,我们用的大多数不是VFP自带的控件吗,比如:textbox、combobox、shape等等,怎么说最好不用啊
2013-12-29 21:44
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 11楼 iamhyf
可能没说清楚,我指的是activeX控件。如进度条控件、日历控件等

坚守VFP最后的阵地
2013-12-29 22:18
iamhyf
Rank: 1
等 级:新手上路
帖 子:69
专家分:2
注 册:2010-1-5
收藏
得分:0 
呵呵,这下理解了,以后尽量不用了
2013-12-29 22:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
以下是引用sdta在2013-12-29 22:18:15的发言:

可能没说清楚,我指的是activeX控件。如进度条控件、日历控件等

不是什麼類型的控件最好不用,而是當現成的控件無法滿足獨特需求而又不能修改的時候就不要用,事實上也用不來。

授人以渔,不授人以鱼。
2013-12-29 22:32
iamhyf
Rank: 1
等 级:新手上路
帖 子:69
专家分:2
注 册:2010-1-5
收藏
得分:0 
版主帮我看一下这段过程代码:
***********************************************************************
*                    将DBF数据导出到指定EXCEL文件中                   *
***********************************************************************
PROCEDURE EXPORTTOXLS
  DIMENSION  PidArr(5000)
  LOCAL oExcel,DrtPhoto,RecordNum,nDataTotal1,nDataTotal2,mm,nn
  SET DATE YMD
  STORE "" TO PidArr
  frmEi.oleStatusBar.Visible = .F.
  frmEi.lblProgressBar.Caption = "正在导出数据,请稍候..."
  frmEi.shpProgressBar1.Left = LEN(frmEi.lblProgressBar.Caption)*120*_rateV/22
  frmEi.shpProgressBar2.Left = LEN(frmEi.lblProgressBar.Caption)*120*_rateV/22
  frmEi.lblProgressBar.Visible = .T.
  frmEi.shpProgressBar1.Visible = .T.
  frmEi.shpProgressBar2.Visible = .T.  
  
  oExcel=CREATEOBJECT('Excel.Application')
  IF NOT TYPE("oExcel") = "O"
    =MESSAGEBOX("Excel对象创建失败,程序将中止!", 16, "错误")
    RETURN
  ENDIF
  cExcelFile=GETFILE("MicroSoft Office Excel 工作薄:xls")
  IF .NOT. SUBSTR(SUBSTR(cExcelFile,RAT("\",cExcelFile)+1),1,AT(".",SUBSTR(cExcelFile,RAT("\",cExcelFile)+1))-1)=="员工基本信息采集表—生成数据库"
    =MESSAGEBOX("请打开“员工基本信息采集表—生成数据库!”工作薄",64,"系统提示")
    RETURN
  ENDIF

  oExcel.Workbooks.Open("&cExcelFile")
  oExcel.Visible=.F.
  oExcel.Worksheets("生成数据库").Activate
  oExcel.ActiveSheet.UnProtect('711205')
  oExcel.Application.ScreenUpdating = .F.
  FOR I=4 TO 5000
    IF EMPTY(oExcel.Worksheets("生成数据库").Cells(I,1).Value)
    nDataTotal1=I
    EXIT
  ENDIF
  PidArr(I-3)=oExcel.Worksheets("生成数据库").Cells(I,3).Value
  ENDFOR
  oExcel.Worksheets("员工照片").Activate
  oExcel.ActiveSheet.UnProtect('711205')
  FOR I=2 TO 5000
    IF EMPTY(oExcel.Worksheets("员工照片").Cells(I,1).Value)
      nDataTotal2=I
      EXIT
    ENDIF
  ENDFOR
  nFldCount =AFIELDS(aFldList,"Ei")
  J=0
  P=0
  SCAN FOR &ExportCondition
    J=J+1
    frmEi.shpProgressBar1.Width = J*200*_rateV/(ExportReccount+nFldCount-1)
    SCATTER MEMVAR MEMO
    PersonnelName=TRIM(Ei.姓名)
    PersonnelIdcard=TRIM(Ei.身份证号)
    IF ASCAN(PidArr,PersonnelIdcard)<>0
      IF MESSAGEBOX("身份证号为“"+PersonnelIdcard+"”("+PersonnelName+")的员工信息已存在,"+CHR(10)+CHR(10)+"现在更新吗?",36,"系统询问")=6
        P=P+1
        mm=ASCAN(PidArr,PersonnelIdcard)+3
        nn=ASCAN(PidArr,PersonnelIdcard)+1
      ELSE
        LOOP
      ENDIF
    ELSE
      P=P+1
      mm=nDataTotal1
      nn=nDataTotal2
      nDataTotal1=nDataTotal1+1
      nDataTotal2=nDataTotal2+1
    ENDIF
    oExcel.Worksheets("员工照片").Activate
   
    RecordNum=oExcel.ActiveSheet.Cells(nn-1,1).Value
    IF TYPE("RecordNum")="N"
      oExcel.ActiveSheet.Cells(nn,1).Value=RecordNum+1
    ELSE
      oExcel.ActiveSheet.Cells(nn,1).Value=1
    ENDIF
    dValue=TRIM(Ei.姓名)
    IF NOT ISNULL(dValue)
      oExcel.ActiveSheet.Cells(nn,2).Value=dValue
    ENDIF
    dValue=TRIM(Ei.身份证号)
    IF NOT ISNULL(dValue)
      oExcel.ActiveSheet.Cells(nn,3).Value=dValue
    ENDIF
    IF oExcel.ActiveSheet.Rows(nn).RowHeight=108
      FOR EACH DrtPhoto IN oExcel.ActiveSheet.DrawingObjects
        IF !ISNULL(oExcel.Intersect(DrtPhoto.TopLeftCell,oExcel.ActiveSheet.Cells(nn, 4)))
          DrtPhoto.Delete
        ENDIF
      ENDFOR
    ENDIF
    IF !EMPTY(Ei.照片)
      COPY TO temp FIELDS Ei.照片 NEXT 1
      handlein=FOPEN("temp.fpt")
      lcFile=DefaultPath+"test.bmp"
      handleout=FCREATE(lcFile)
      gnEnd=FSEEK(handlein,0,2)
      gnTop=FSEEK(handlein,0)
      str1=FREAD(handlein,gnEnd)
      str2=RIGHT(str1,LEN(str1)-599)
      n=FWRITE(handleout,str2)
      =FCLOSE(handlein)
      =FCLOSE(handleout)
      ERASE temp.*
      oExcel.ActiveSheet.Cells(nn,4).Select
      IF FILE("&lcFile")
        oExcel.Selection.RowHeight=108
        oExcel.ActiveSheet.Pictures.Insert(lcFile).Select
        oExcel.Selection.ShapeRange.LockAspectRatio=.F.
        oExcel.Selection.ShapeRange.Height=107.25
        oExcel.Selection.ShapeRange.Width=82.5
        oExcel.Selection.ShapeRange.Top=oExcel.ActiveSheet.Cells(nn,4).Top + 0.75
        oExcel.Selection.ShapeRange.Left=oExcel.ActiveSheet.Cells(nn,4).Left + 0.75
        oExcel.Selection.Placement = 2
        ERASE &lcFile
      ELSE
        oExcel.ActiveSheet.Cells(nn,4).RowHeight=14.25
      ENDIF
    ELSE
      oExcel.ActiveSheet.Cells(nn,4).RowHeight=14.25
    ENDIF
    oExcel.ActiveSheet.Cells(nn,1).Select
    oExcel.Worksheets("生成数据库").Activate
    RecordNum=oExcel.ActiveSheet.Cells(mm-1,1).Value
    IF TYPE("RecordNum")="N"
      oExcel.ActiveSheet.Cells(mm,1).Value=RecordNum+1
    ELSE
      oExcel.ActiveSheet.Cells(mm,1).Value=1
    ENDIF
    FOR J=2 TO nFldCount-14
      mmm=ALLTRIM(STR(mm))
      oExcel.ActiveSheet.Range("A"+mmm+":BU"+mmm).VerticalAlignment =1
      dValue = .NULL.
      IF AT(aFldList[J,2],"CDLMNFIBYT")=0
        LOOP
      ENDIF
      cFieldName=aFldList[J,1]
      dValue = EVALUATE(cFieldName)
      DO CASE
        CASE aFldList[J,2]="C"
          dValue=TRIM(dValue)
        CASE aFldList[J,2]="D"
          dValue=IIF(!EMPTY(dValue),DTOC(dValue),"")
        CASE aFldList[J,2]="T"
          dValue=IIF(!EMPTY(dValue),TTOC(dValue),"")
        CASE INLIST(aFldList[J,2],"N","F","I","B","Y")
        CASE aFldList[J,2]="L"
          IF dValue
            dValue=IIF(J=30 .OR. J=34,"是","有")
          ELSE
            dValue=IIF(J=30 .OR. J=34,"否","无")
          ENDIF      
          IF J=34 .AND. dValue="否"
            oExcel.Worksheets("生成数据库").Cells(mm,J-1).Value="无"
          ENDIF
        CASE aFldList[J,2]="M"
        OTHERWISE
          dValue=.NULL.
      ENDCASE
      IF VARTYPE(dValue)="C" .AND. EMPTY(dValue)
        LOOP
      ENDIF
      IF NOT ISNULL(dValue)
        DO CASE
          CASE J<30
            oExcel.Worksheets("生成数据库").Cells(mm,J).Value=dValue
          CASE J>30 .AND.J<34
            oExcel.Worksheets("生成数据库").Cells(mm,J-1).Value=dValue
          CASE J>34
            oExcel.Worksheets("生成数据库").Cells(mm,J-2).Value=dValue
        ENDCASE
      ENDIF
    ENDFOR
    oExcel.ActiveSheet.Cells(mm,1).Select
  ENDSCAN
  cChrStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  FOR J=2 TO nFldCount-1
    frmEi.shpProgressBar1.Width = (ExportReccount+J)*200*_rateV/(ExportReccount+nFldCount-1)
    IF aFldList[J, 2]="M"
      cColumn=SUBSTR(cChrStr,INT((J-1)/26),1)+SUBSTR(cChrStr,IIF(MOD(J,26)=0,26,MOD(J, 26)),1)
      oExcel.Worksheets("生成数据库").Columns(cColumn+":"+cColumn).WrapText=.T.
    ENDIF
  ENDFOR
  oExcel.Worksheets("员工照片").Activate
  oExcel.ActiveSheet.Protect('711205',.T.,.T.,.T.)
  oExcel.Worksheets("生成数据库").Activate
  oExcel.ActiveSheet.Protect('711205',.T.,.T.,.T.)
  oExcel.Application.ScreenUpdating = .T.
  oExcel.ActiveWorkbook.Save
  =MESSAGEBOX("成功导出"+ALLTRIM(STR(P))+"名员工的数据记录!", 64, "系统提示")
  oExcel.Visible=.T.
  frmEi.lblProgressBar.Caption = ""
  frmEi.shpProgressBar1.Width = 0
  frmEi.oleStatusBar.Visible = .T.
  frmEi.lblProgressBar.Visible = .F.
  frmEi.shpProgressBar1.Visible = .F.
  frmEi.shpProgressBar2.Visible = .F.
  oExcel=.NULL.
ENDPROC
***********************************************************************

这段代码在6.0中一点问题也没有,可在9.0中运行时,首先说
nDataTotal1=nDataTotal1+1  这句是数据类型不匹配

我在前面加一一句:
STORE 0 TO RecordNum,nDataTotal1,nDataTotal2,mm,nn

又说
RecordNum=oExcel.ActiveSheet.Cells(nn-1,1).Value  这句Cells不是一个对象,搞得我很晕
2013-12-29 22:39
iamhyf
Rank: 1
等 级:新手上路
帖 子:69
专家分:2
注 册:2010-1-5
收藏
得分:0 
有人可能会说了,干什么这么费劲,用COPY命令导入Excel很简单。不是这样的,我的DBF里还有备注型字段,存放员工家庭成员信息、学习教育信息、工作经历信息和获取奖励信息,还有通用字段,存放员工的照片,这些用COPY命令是导不到Excel中的,用这段代码却能把DBF中的数据全部导入到Excel中。
2013-12-29 22:49
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
照片最好另存在单独的文件夹中,不要放在通用型字段中。

坚守VFP最后的阵地
2013-12-29 23:26
iamhyf
Rank: 1
等 级:新手上路
帖 子:69
专家分:2
注 册:2010-1-5
收藏
得分:0 
因为只有存在通用字段,程序运行时才能显示员工完整信息。
图片附件: 游客没有浏览图片的权限,请 登录注册
2013-12-29 23:47
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
理解不完整。
不使用通用字段也可以保存和显示完整信息,如图像、声音、视频等。这些内容单独保存为相应的文件,数据表中仅保存其文件名即可。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2013-12-30 08:04
Eric1111
Rank: 2
等 级:论坛游民
威 望:1
帖 子:183
专家分:88
注 册:2013-11-25
收藏
得分:3 
回复 3楼 iamhyf
有,你点击ole那个右击有个什么定义那个,然后就全是e文的介绍
2013-12-30 11:05
快速回复:VFP9.0 进度条的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019500 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved