builderx.prg
来自「MSComm控件资料,Visual Basic 6.0(以下简称VB) 是一种功」· PRG 代码 · 共 289 行
PRG
289 行
* Program...........: BUILDERX.PRG
* Author............: Ken R. Levy
* Project...........:
* Created...........: 07/16/1995
* Copyright.........: (c) Flash Creative Management, Inc., 1995
*) Description.......: Wrapper program for _Builder.
LPARAMETERS toObject , ;
tuSource , ;
tcRunBuilder
LOCAL lcBuilder , ;
lcBuilder2 ,;
llControlInit
LOCAL laSelObj[1]
*--------------------------------------
*-- Check for a public memvar _BuilderX
*-- to override \vfp\builder.app.
*--------------------------------------
IF TYPE( '_BuilderX' )=='C' AND NOT EMPTY( _BuilderX )
RETURN DoBuilder(toObject, tuSource, _BuilderX)
ENDIF
lcBuilder=HOME() + 'builder.app'
IF TYPE('toObject')#'O'
IF ASELOBJ(laSelObj)#1
IF TYPE('tuSource')#'C'
tuSource=''
ENDIF
DO (lcBuilder) WITH (toObject),(tuSource)
RETURN
ENDIF
toObject=laSelObj[1]
laSelObj=.F.
ENDIF
*-- Check for form object containing a lControlInit property.
IF NOT ISNULL(tcRunBuilder) AND NOT toObject.BaseClass=='Form' AND ;
TYPE('toObject.parent.lControlInit')=='L' AND ;
toObject.parent.lControlInit AND EMPTY(toObject.Comment)
lcControlInit=toObject.parent.ReadMethod('ControlInit')
RELEASE o
PRIVATE o
o=toObject
=CodeBlck( lcControlInit )
RELEASE o
IF EMPTY(toObject.Comment)
toObject.Comment='*'
ENDIF
IF NOT toObject.parent.lControlBuilder
RETURN
ENDIF
ENDIF
*-- Check for object containing a Builder property.
IF NOT ISNULL(tcRunBuilder)
*-- Check for specified tcRunBuilder.
IF TYPE('tcRunBuilder')=='C'
IF NOT EMPTY(tcRunBuilder)
RETURN DoBuilder(toObject,tuSource,tcRunBuilder,.T.)
ENDIF
DO (lcBuilder) WITH (toObject),(tuSource)
RETURN
ENDIF
*-- Check for specified BuilderX property.
IF TYPE('toObject.BuilderX')=='C' AND NOT EMPTY(toObject.BuilderX)
RETURN DoBuilder(toObject,tuSource,toObject.BuilderX)
ENDIF
*-- Check for specified Builder property.
IF TYPE('toObject.Builder')=='C' AND NOT EMPTY(toObject.Builder)
RETURN DoBuilder(toObject,tuSource,toObject.Builder)
ENDIF
ENDIF
IF NOT EMPTY(lcBuilder) AND NOT FILE(lcBuilder)
lcBuilder2=LOWER(FULLPATH(TrimPath(lcBuilder),HOME()))
IF NOT FILE(lcBuilder2)
=FileNotFoundMsg(lcBuilder)
RETURN .F.
ENDIF
lcBuilder=lcBuilder2
ENDIF
IF TYPE('tuSource')#'C'
tuSource=''
ENDIF
DO (lcBuilder) WITH (toObject),(tuSource)
RETURN
FUNCTION DoBuilder( toObject, tuSource, tcBuilder, tlSkipSearch )
LOCAL lcBuilder , ;
lnAtPos , ;
lcClass , ;
lcLastOnError
LOCAL laInstance[1]
lcBuilder=ALLTRIM(MLINE(tcBuilder,1))
lnAtPos=AT(',',lcBuilder)
IF lnAtPos=0
lcClass=''
ELSE
lcClass=LOWER(ALLTRIM(SUBSTR(lcBuilder,lnAtPos+1)))
lcBuilder=LOWER(ALLTRIM(MLINE(LEFT(lcBuilder,lnAtPos-1),1)))
IF EMPTY(lcBuilder)
lcBuilder=toObject.ClassLibrary
ENDIF
IF NOT EMPTY(lcBuilder) AND NOT '.'$lcBuilder
lcBuilder=lcBuilder+'.vcx'
ENDIF
ENDIF
IF lcBuilder=='?'
*-- Execute dialog to select builder program.
lcBuilder=GETFILE('prg;scx;app','Select Builder program:','Open')
IF EMPTY(lcBuilder)
RETURN
ENDIF
ENDIF
IF lcBuilder=='*'
*-- Create public reference o and activate the Command window.
RELEASE o
PUBLIC o
o=toObject
WAIT WINDOW LEFT('Name: '+toObject.Name+SPACE(10)+CHR(13)+ ;
'Type: '+tuSource+SPACE(10)+CHR(13)+ ;
'Class: '+toObject.Class+SPACE(10)+CHR(13)+ ;
'ParentClass: '+toObject.ParentClass+SPACE(10)+CHR(13)+ ;
'Base Class: '+toObject.BaseClass+SPACE(10)+CHR(13)+ ;
'Reference: o'+SPACE(10),254) NOWAIT
ACTIVATE WINDOW Command
RETURN
ENDIF
*-- Execute builder specified in _BuilderX memvar.
IF NOT EMPTY(lcBuilder) AND NOT '.'$lcBuilder
lcBuilder=lcBuilder+'.prg'
ENDIF
IF (NOT EMPTY(lcBuilder) OR EMPTY(lcClass)) AND NOT FILE(lcBuilder)
IF NOT '\'$lcBuilder
lcBuilder=FULLPATH(TrimPath(lcBuilder),toObject.ClassLibrary)
ENDIF
IF NOT FILE(lcBuilder)
lcBuilder2=LOWER(FULLPATH(TrimPath(lcBuilder),HOME()))
IF NOT FILE(lcBuilder2)
=FileNotFoundMsg(lcBuilder)
RETURN .F.
ENDIF
lcBuilder=lcBuilder2
ENDIF
ENDIF
DO CASE
CASE NOT EMPTY(lcClass)
IF TYPE('_BuilderEdit')=='L' AND _BuilderEdit
_BuilderEdit=.F.
IF AINSTANCE(laInstance,lcClass)>0
WAIT WINDOW "Class '"+lcClass+"' is in use" NOWAIT
RETURN
ENDIF
MODIFY CLASS (lcClass) OF (lcBuilder) NOWAIT
RETURN
ENDIF
lcLastSetClassLib=SET('CLASSLIB')
SET CLASSLIB TO (lcBuilder) ADDITIVE
lnCount=0
DO WHILE .T.
lnCount=lnCount+1
lcObjName=PROPER(lcClass+ALLTRIM(STR(lnCount)))
IF TYPE(lcObjName)=='U'
EXIT
ENDIF
ENDDO
lcLastOnError=ON('ERROR')
ON ERROR =.F.
oNewObject=CREATEOBJECT(lcClass,toObject,tuSource,tlSkipSearch)
IF EMPTY(lcLastOnError)
ON ERROR
ELSE
ON ERROR &lcLastOnError
ENDIF
IF TYPE('oNewObject')#'O' OR ISNULL(oNewObject)
IF NOT SET('CLASSLIB')==lcLastSetClassLib
RELEASE CLASSLIB (lcBuilder)
ENDIF
RETURN ShowMsg("Class ("+lcClass+ ;
") of '"+LOWER(lcBuilder)+"' could not be instantiated.")
RETURN .F.
ENDIF
PUBLIC (lcObjName)
lcCode=lcObjname+[=oNewObject]
&lcCode
IF NOT SET('CLASSLIB')==lcLastSetClassLib
RELEASE CLASSLIB (lcBuilder)
ENDIF
IF oNewObject.lAutoShow
oNewObject.Show()
ENDIF
IF TYPE('oNewObject')#'O' OR ISNULL(oNewObject)
RETURN .F.
ENDIF
IF oNewObject.lAutoRelease
oNewObject.Release()
RELEASE (lcObjName)
ENDIF
RETURN
CASE LOWER(RIGHT(lcBuilder,4))=='.scx'
IF TYPE('_BuilderEdit')=='L' AND _BuilderEdit
_BuilderEdit=.F.
MODIFY FORM (lcBuilder) NOWAIT
RETURN
ENDIF
DO FORM (lcBuilder) WITH (toObject),(tuSource)
RETURN
CASE LOWER(RIGHT(lcBuilder,4))=='.vcx'
RETURN ShowMsg("File '"+LOWER(lcBuilder)+ ;
"' requires class name (ex. TestLib,TestClass).")
CASE LOWER(RIGHT(lcBuilder,4))=='.prg'
IF TYPE('_BuilderEdit')=='L' AND _BuilderEdit
_BuilderEdit=.F.
MODIFY COMM (lcBuilder) NOWAIT
RETURN
ENDIF
DO FORM (lcBuilder) WITH (toObject),(tuSource)
RETURN
ENDCASE
IF TYPE('tuSource')#'C'
tuSource=''
ENDIF
DO (lcBuilder) WITH (toObject),(tuSource)
RETURN
FUNCTION ShowMsg
LPARAMETERS tcMessage
LOCAL lnResult
lnResult=MESSAGEBOX(tcMessage,48,'BuilderX')
WAIT CLEAR
RETURN lnResult
FUNCTION FileNotFoundMsg
LPARAMETERS tcFileName
RETURN ShowMsg("File '"+LOWER(tcFileName)+"' not found.")
PROCEDURE TrimPath
LPARAMETERS tcFileName,tlTrimExt,tlPlatformType
LOCAL lcFileName,lnAtPos
IF EMPTY(tcFileName)
RETURN ''
ENDIF
lcFileName=tcFileName
lnAtPos=AT(':',lcFileName)
IF lnAtPos>0
lcFileName=SUBSTR(lcFileName,lnAtPos+1)
ENDIF
IF tlTrimExt
lcFileName=trimext(lcFileName)
ENDIF
IF tlPlatformType
lcFileName=IIF(_dos OR _unix,UPPER(lcFileName),LOWER(lcFileName))
ENDIF
lcFileName=ALLTRIM(SUBSTR(lcFileName,AT('\',lcFileName,;
MAX(OCCURS('\',lcFileName),1))+1))
DO WHILE LEFT(lcFileName,1)=='.'
lcFileName=ALLTRIM(SUBSTR(lcFileName,2))
ENDDO
DO WHILE RIGHT(lcFileName,1)=='.'
lcFileName=ALLTRIM(LEFT(lcFileName,LEN(lcFileName)-1))
ENDDO
RETURN lcFileName
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?