 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
CCB2000
註冊時間: 2009-03-25 文章: 97
第 1 樓
|
發表於: 星期日 四月 08, 2012 4:40 pm 文章主題: VFP 9.0 FIX - LARGE PROCEDURE IN THE FORM |
|
|
Hello everyone:
In vfp9, the procedure size can greater than 64KB.
But if there is a large procedure in the form, sometimes the form can't run correctly.
There is a program for test:
*PROC testlargeform
SET STEP OFF
SET ECHO OFF
SET DEBUG OFF
SET ESCAPE OFF
SET TALK OFF
SET SAFETY OFF
_SCREEN.VISIBLE=.T.
_SCREEN.WINDOWSTATE=2
PRIVATE m.x2
m.x2=""
COMPILE FORM testlargeform.scx
=MESSAGEBOX("Now the form file testlargeform.scx is good."+CHR(13)+;
"We will run DO FORM testlargeform.scx and there is no problem.",0,"TEST LARGEFORM")
DO FORM testlargeform.scx
=MESSAGEBOX("Please make some changes."+CHR(13)+;
"For example, Comment or Uncomment some statements.",0,"TEST LARGEFORM")
MODIFY FORM testlargeform.scx method INIT
COPY FILE testlargeform.scx TO testlargeform_bad.scx
COPY FILE testlargeform.sct TO testlargeform_bad.sct
USE testlargeform_bad.scx
LOCATE FOR objname="Form1"
=STRTOFILE(objcode,"testlargeform_bad.fxp")
USE
COPY FILE testlargeform.scx TO testlargeform_good.scx
COPY FILE testlargeform.sct TO testlargeform_good.sct
COMPILE FORM testlargeform_good.scx
USE testlargeform_good.scx
LOCATE FOR objname="Form1"
=STRTOFILE(objcode,"testlargeform_good.fxp")
USE
USE testlargeform.scx
LOCATE FOR objname="Form1"
PRIVATE m.q_com
m.q_com=methods
PRIVATE m.q_procedures
m.q_procedures=""
DO WHILE AT("PROCEDURE ",m.q_com)>0
m.q_com=SUBS(m.q_com,AT("PROCEDURE ",m.q_com))
m.q_procedures=m.q_procedures+LEFT(m.q_com,AT(CHR(13),m.q_com))
m.q_com=SUBS(m.q_com,AT(CHR(13),m.q_com)+1)
ENDDO
USE
m.q_procedures=STRTRAN(m.q_procedures,"PROCEDURE Init","PROCEDURE Init (LARGE PROCEDURE)")
IF FILETOSTR("testlargeform_bad.fxp")==FILETOSTR("testlargeform_good.fxp")
=MESSAGEBOX("It seems the form file testlargeform.scx is good."+CHR(13)+;
m.q_procedures+;
"We will run DO FORM testlargeform.scx and there is no problem.",0,"TEST LARGEFORM")
DO FORM testlargeform.scx
ELSE
=MESSAGEBOX("Now the form file testlargeform.scx is bad."+CHR(13)+;
m.q_procedures+;
"If we run DO FORM testlargeform.scx then VFP will crash.",16,"TEST LARGEFORM")
DO FORM testlargeform.scx
ENDIF
RETURN
* END OF PROC TESTLARGEFORM.
In the testlargeform.scx:
PROCEDURE Load
SET TALK OFF
?"Load"
ENDPROC
PROCEDURE Init
* Please make some changes.
* For example, Comment or Uncomment some statements.
SET TALK OFF
SET TALK OFF
SET TALK OFF
?"Init"
PRIVATE m.x2
m.x2="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
m.x2="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
...
m.x2="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
m.x2="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
ENDPROC
PROCEDURE Destroy
SET TALK OFF
?"Destroy"
ENDPROC
The size of the procedure Init is about 100KB, it is a large procedure.
More details please refer to:
VFP 9.0 FIX - LARGE PROCEDURE IN THE FORM
http://www.baiyujia.com/vfpdocuments/default.asp
source code download:
http://www.baiyujia.com/f_download.asp _________________ VFP C++編譯軟件 (VFP C++ Compiler): http://www.baiyujia.com/vfpcompiler |
|
回頂端 |
|
 |
CCB2000
註冊時間: 2009-03-25 文章: 97
第 2 樓
|
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|