⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gotchas.prg

📁 MSComm控件资料,Visual Basic 6.0(以下简称VB) 是一种功能强大、简单易学的程序设计语言。它不但保留了原先Basic语言的全部功能
💻 PRG
📖 第 1 页 / 共 3 页
字号:
        ENDIF
        EXIT
      ENDDO
      IF toIterator.Next()
        LOOP
      ENDIF
      EXIT
    ENDDO

  *====================================
  *-- cRecursiveMetadataVisitor::VisitDBCRecord( o)
  *====================================
  FUNCTION VisitDBCRecord( loIterator)
    *? Not supported as of yet
    RETURN

    LOCAL lnOldSelect
    lnOldSelect= SELECT()
    SELECT( loIterator.cAlias)
    IF ObjectType= "Field"
      ? "DBC Field Record", RECNO(loIterator.cAlias)
    ENDIF
    SELECT (lnOldSelect)

  *====================================
  *-- cRecursiveMetadataVisitor::VisitExpression( c)
  *====================================
  FUNCTION VisitExpression( tcExpression)

  *====================================
  *-- cRecursiveMetadataVisitor::VisitSCXRecord( o)
  *====================================
  FUNCTION VisitSCXRecord( loIterator)
    
  *====================================
  *-- cRecursiveMetadataVisitor::VisitMNXRecord( o)
  *====================================
  FUNCTION VisitMNXRecord( loIterator)


  *====================================
  *-- cRecursiveMetadataVisitor::VisitPJX( o)
  *====================================
  FUNCTION VisitPJX( toIterator)
    LOCAL lcProjItem, nAtPos, lcExt, loEngine
    DO WHILE .T.
      lcProjItem= THIS.GetCurrentSourceID( toIterator)
      nAtPos= RAT(".", lcProjItem)
      IF nAtPos> 0
        lcExt= LOWER( SUBS(lcProjItem, nAtPos))
        
        DO CASE
        CASE lcExt == ".scx"         
          loEngine= CREATE( "cSCXIterator", lcProjItem)
          IF !ISNULL( loEngine) AND TYPE( "loEngine")= "O"
            loEngine.Accept( THIS)
          ENDIF

        CASE lcExt == ".vcx"         
          loEngine= CREATE( "cVCXIterator", lcProjItem)
          IF !ISNULL( loEngine) AND TYPE( "loEngine")= "O"                  
            loEngine.Accept( THIS)
          ENDIF

        CASE lcExt == ".mnx" 
          loEngine= CREATE( "cMNXIterator", lcProjItem)
          IF !ISNULL( loEngine) AND TYPE( "loEngine")= "O"        
            * THIS.Visit( loEngine)
            loEngine.Accept( THIS)            
          ENDIF

        CASE lcExt == ".frx" 
          loEngine= CREATE( "cFRXIterator", lcProjItem)
          * THIS.Visit( loEngine)
          IF !ISNULL( loEngine) AND TYPE( "loEngine")= "O"                  
            loEngine.Accept( THIS)          
          ENDIF
        
        CASE lcExt == ".dbc" 
          loEngine= CREATE( "cTableIterator", lcProjItem)
          * THIS.Visit( loEngine)
          IF !ISNULL( loEngine) AND TYPE( "loEngine")= "O"                  
            loEngine.Accept( THIS)          
          ENDIF
          
        CASE lcExt == ".prg" OR ;
             lcExt == ".spr" OR ;
             lcExt == ".mpr" OR ;
             lcExt == ".ini" OR ;
             lcExt == ".h" 

          THIS.VisitCodeFile( lcProjItem) 
        ENDCASE
      ENDIF
      IF toIterator.Next()
        LOOP
      ENDIF
      EXIT
    ENDDO

  *====================================
  *-- cRecursiveMetadataVisitor::VisitFRXRecord( o)
  *-- Override to suit.  
  *====================================
  FUNCTION VisitFRXRecord( loIterator)

  *====================================
  *-- cRecursiveMetadataVisitor::VisitString( c[c])
  *-- Override to suit.
  *====================================
  FUNCTION VisitString( tcElement, tcOrigin)

  
ENDDEFINE

*///////////////////////////////////
* A B S T R A C T I T E R A T O R
*
* Abstract iterator class
*///////////////////////////////////
DEFINE CLASS cAbstractIterator AS Custom
 cType= "Abstract"
 Abstract_ID= "Visual INTL Iterator"   && Class signature, don't change.

 *====================================
 *-- cAbstractIterator::Accept( o)
 *====================================
 * Accept a visitor object
 *
 FUNCTION Accept( toPassed)
   IF TYPE( "toPassed")="O" AND PEMSTATUS( toPassed, "Visit", 5)
     RETURN toPassed.Visit( THIS)
   ENDIF

 *====================================
 *-- cAbstractIterator::Close()
 *====================================
 FUNCTION Close()
   RETURN .NULL.
 *====================================
 *-- cAbstractIterator::First()
 *====================================
 FUNCTION First()
   RETURN .NULL.

 *====================================
 *-- cAbstractIterator::GetAlias(c)
 *====================================
 FUNCTION GetAlias(x)
   RETURN .NULL.

 *====================================
 *-- cAbstractIterator::GetCurrentSourceID(x)
 *====================================
 FUNCTION GetCurrentSourceID(x)
   RETURN .NULL.
   
 *====================================
 *-- cAbstractIterator::GetStructure()
 *====================================
 FUNCTION GetStructure(x)
   RETURN .NULL.

 *====================================
 *-- cAbstractIterator::GetType()
 *====================================
 FUNCTION GetType(x)
   RETURN THIS.cType
   
 *====================================
 *-- cAbstractIterator::Init( x)
 *====================================
 FUNCTION Init( x)

 *====================================
 *-- cAbstractIterator::Last()
 *====================================
 FUNCTION LastItem()
   RETURN .NULL.

 *====================================
 *-- cAbstractIterator::Next()
 *====================================
 FUNCTION Next
   RETURN .NULL.

 *====================================
 *-- cAbstractIterator::Open(xx)
 *====================================
 FUNCTION Open( x,y)
   RETURN .NULL.
 *====================================
 *-- cAbstractIterator::Prior()
 *====================================
 FUNCTION Prior()
   RETURN .NULL.
 *====================================
 *-- cAbstractIterator::ProgrammaticChange()
 *====================================
 PROTECTED FUNCTION ProgrammaticChange()
   RETURN .NULL.
 *====================================
 *-- cAbstractIterator::Release()
 *====================================
 FUNCTION Release()
   RELEASE THIS

 *====================================
 *-- cAbstractIterator::SetAlias(c)
 *====================================
 FUNCTION SetAlias(x)
   RETURN .NULL.

 *====================================
 *-- cAbstractIterator::SetStructure()
 *====================================
 FUNCTION SetStructure(x)
   RETURN .NULL.
   
ENDDEFINE


*///////////////////////////////////
* T A B L E I T E R A T O R
*
* General purpose table iterator
*///////////////////////////////////
DEFINE CLASS cTableIterator AS cAbstractIterator
 PROTECTED cType, cStructure, cAlias
 cType  = "Table"
 cStructure = ''
 cAlias = ''
 cSuffix= ".DBF"
 lTableOpened=.f.

 *====================================
 *-- cTableIterator::Close( )
 *====================================
 * Close the table
 * 
 FUNCTION Close()
   LOCAL llRetVal
   IF USED( THIS.GetAlias())
     LOCAL lcAlias
     lcAlias= THIS.GetAlias()
     USE IN ( lcAlias)
     llRetVal= .T.
   ENDIF
   RETURN llRetVal

 *====================================
 *-- cTableIterator::Destroy( )
 *====================================
 FUNCTION Destroy()
   IF THIS.lTableOpened
     THIS.Close()
   ENDIF

 *====================================
 *-- cTableIterator::First()
 *====================================
 * Go to top of file
 *
 FUNCTION First
   IF ! USED( THIS.GetAlias())
     RETURN .F.
   ENDIF
   IF ! BOF( THIS.GetAlias())
     LOCAL lcAlias
     lcAlias= THIS.GetAlias()
     GO TOP IN (lcAlias)
   ELSE
     RETURN .F.
   ENDIF
   THIS.ProgrammaticChange()

 *====================================
 *-- cTableIterator::GetAlias()
 *====================================
 * Return the alias of the table being iterated
 *
 FUNCTION GetAlias( )
   RETURN THIS.cAlias

 *====================================
 *-- cTableIterator::GetStructure( )
 *====================================
 * Return the name of the table being iterated
 *
 FUNCTION GetStructure()
   RETURN THIS.cStructure
   
 *====================================
 *-- cTableIterator::Init( c)
 *====================================
 FUNCTION Init( tcPassed)

   IF ISNULL( tcPassed) OR ;
      EMPTY( tcPassed) OR ;
      TYPE( "tcPassed") <> "C"
     RETURN .F.
   ENDIF

   *-- Parse the passed string
   THIS.SetAlias( STRTRAN(TrimPath( tcPassed),"."))

   THIS.SetStructure( FULLPATH(tcPassed + IIF( "." $ tcPassed, '', THIS.cSuffix)))

   IF !USED( THIS.GetAlias())
     IF ! THIS.Open(THIS.GetStructure(), THIS.GetAlias())
       RETURN .F.
     ENDIF
   ELSE
     *-- could have the same alias used, but a different file!
     IF ! THIS.GetStructure() $ DBF( THIS.GetAlias())
       RETURN .F.
     ENDIF
   ENDIF

 *====================================
 *-- cTableIterator::Last()
 *====================================
 * Go to the last record in the table
 *
 FUNCTION Last
   IF ! USED( THIS.GetAlias())
     RETURN .F.
   ENDIF
   LOCAL lcAlias
   lcAlias= THIS.GetAlias()
   GO BOTTOM IN ( lcAlias)
   THIS.ProgrammaticChange()

 *====================================
 *-- cTableIterator::Next()
 *====================================
 * Go to the last next record in the table
 *
 FUNCTION Next
   LOCAL lcAlias
   lcAlias= THIS.GetAlias()
   IF ! USED( lcAlias)
     RETURN .F.
   ENDIF
   IF ! EOF( lcAlias)
     SKIP IN ( lcAlias)
     IF EOF( lcAlias)
       GO BOTTOM IN ( lcAlias)
       RETURN .F.
     ENDIF
   ELSE
     RETURN .F.
   ENDIF
   THIS.ProgrammaticChange()

 *====================================
 *-- cTableIterator::Open( x)
 *====================================
 * Open the table to be iterated
 *
 FUNCTION Open( tcFilename, tcAlias)
   IF ISNULL(tcFilename) OR ISNULL(tcAlias)
     RETURN .NULL.
   ENDIF
   IF EMPTY( tcFileName) OR TYPE( "tcFileName") <> "C"
     tcFileName= THIS.GetStructure()
     IF EMPTY( tcFileName) OR TYPE( "tcFileName") <> "C"
       RETURN .F.
     ENDIF
   ENDIF

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -