2013-10-04 2 views
0

우리 ProLan (프로그래밍 언어) 주제의 프로젝트는 이며 메모장의 FoxPro 버전을 만듭니다. 내 양식은 이미 메모장과 완전히 똑같아 보입니다. 이미 메뉴 모음으로 끝났어. 이제 내 문제는 내 메뉴 프로그램에 어떻게 내 ThisForm.edit1.Value (입력 또는 텍스트를 볼 수 편집 상자) 액세스 할 수 있습니다. THISFORM은 메소드에 있어야한다는 오류가 있기 때문입니다.메뉴의 항목 (Visual FoxPro)

여기에 변경하려는 샘플 블록 코드가 있지만 여전히 방법을 알지 못합니다.

PROCEDURE proc_Save 
cMessage = ALLTRIM(ThisForm.Edit1.Value) 
cFile = GETFILE('Txt:TXT', 'Enter File:', 'Open', 0, 'Open files') && contains the complete path for your file 
gnErrFile = FCREATE(cFile) 
IF gnErrFile < 0 
    WAIT 'Cannot open or create out[ut file' WINDOW NOWAIT 
ELSE 
    = FWRITE(gnErrFile, cMessage) 
ENDIF 
= FCLOSE(gnErrFile) 
IF gnErrFile = 0 
    MESSAGEBOX("File saved.", 64, "Saved") 
    ENDIF 
cMessage = "" 

위의 코드는 저장 메뉴 팝업 내 코드를 보여줍니다,하지만 저장을 클릭하려고 해요 때마다, 그것은 오류를 반환합니다. 이 코드는 명령 단추에서 완벽하게 작동합니다. 그러나 메뉴 프로그램 (명령은 팝업 메뉴에 있어야 함)을 사용하고 있기 때문에 편집 상자에 액세스 할 수 없습니다.

어쨌든 내 전체 소스 코드가 있습니다. 유일한 오류는 THISFORM.edit1.Value가있는 행입니다.

LPARAMETERS oFormRef, getMenuName, lUniquePopups, parm4, parm5, parm6, parm7, parm8, parm9 
LOCAL cMenuName, nTotPops, a_menupops, cTypeParm2, cSaveFormName 
IF TYPE("m.oFormRef") # 'O' OR ; 
    LOWER(m.oFormRef.BaseClass) # 'form' OR ; 
    m.oFormRef.ShowWindow # 2 
    MESSAGEBOX("Error") 
      RETURN 
ENDIF 
m.cTypeParm2 = TYPE("m.getMenuName") 
m.cMenuName = SYS(2015) 
m.cSaveFormName = m.oFormRef.Name 
IF m.cTypeParm2 = "C" OR (m.cTypeParm2 = "L" AND m.getMenuName) 
    m.oFormRef.Name = m.cMenuName 
ENDIF 
IF m.cTypeParm2 = "C" AND !EMPTY(m.getMenuName) 
    m.cMenuName = m.getMenuName 
ENDIF 
DIMENSION a_menupops[3] 
IF TYPE ("m.lUniquePopups")="L" AND m.lUniquePopups 
    FOR nTotPops = 1 TO ALEN(a_menupops) 
      a_menupops[m.nTotPops] = SYS(2015) 
    ENDFOR 
ELSE 
    a_menupops[1] = "file" 
    a_menupops[2] = "edit" 
    a_menupops[3] = "help" 
ENDIF 

DEFINE MENU (m.cMenuName) IN (m.oFormRef.Name) BAR 

DEFINE PAD mpFile OF (m.cMenuName) PROMPT "\<File" COLOR SCHEME 3 ; 
    KEY ALT+F, "" 
DEFINE PAD mpEdit OF (m.cMenuName) PROMPT "\<Edit" COLOR SCHEME 3 ; 
    KEY ALT+E, "" 
DEFINE PAD mpHelp OF (m.cMenuName) PROMPT "\<Help" COLOR SCHEME 3 ; 
    KEY ALT+W, "" 

ON PAD mpFile OF (m.cMenuName) ACTIVATE POPUP (a_menupops[1]) 
ON PAD mpEdit OF (m.cMenuName) ACTIVATE POPUP (a_menupops[2]) 
ON PAD mpHelp OF (m.cMenuName) ACTIVATE POPUP (a_menupops[3]) 

DEFINE POPUP (a_menupops[1]) MARGIN RELATIVE SHADOW COLOR SCHEME 4 
DEFINE BAR 1 OF (a_menupops[1]) PROMPT "\<New" ; 
    KEY CTRL+N, "Ctrl+N" 
DEFINE BAR 2 OF (a_menupops[1]) PROMPT "\<Open..."; 
    KEY CTRL+O, "Ctrl+O" 
DEFINE BAR 3 OF (a_menupops[1]) PROMPT "\<Save" ; 
    KEY CTRL+S, "Ctrl+S" 
DEFINE BAR 4 OF (a_menupops[1]) PROMPT "\-" 
DEFINE BAR 5 OF (a_menupops[1]) PROMPT "E\<xit" 

ON SELECTION BAR 1 OF (a_menupops[1]) ; 
    DO proc_New 
ON SELECTION BAR 2 OF (a_menupops[1]) ; 
    DO proc_Open 
ON SELECTION BAR 3 OF (a_menupops[1]) ; 
    DO proc_Save 
ON SELECTION BAR 5 OF (a_menupops[1]) QUIT 

DEFINE POPUP (a_menupops[2]) MARGIN RELATIVE SHADOW COLOR SCHEME 4 
DEFINE BAR _med_cut OF (a_menupops[2]) PROMPT "Cu\<t" ; 
    KEY CTRL+X, "Ctrl+X" ; 
    MESSAGE "Removes the selection and places it onto the Clipboard." 
DEFINE BAR _med_copy OF (a_menupops[2]) PROMPT "\<Copy" ; 
    KEY CTRL+C, "Ctrl+C" ; 
    MESSAGE "Copies the Selection onto the Clipboard." 
DEFINE BAR _med_paste OF (a_menupops[2]) PROMPT "\<Paste" ;  
    KEY CTRL+V, "Ctrl+V" ; 
    MESSAGE "Paste the contents on the Clipboard." 
DEFINE BAR 6 OF (a_menupops[2]) PROMPT "\-" 
DEFINE BAR 7 OF (a_menupops[2]) PROMPT "Select \<All" ; 
    KEY CTRL+A, "Ctrl+A" ; 
    MESSAGE "Selects all items on this page." 

DEFINE POPUP (a_menupops[3]) MARGIN RELATIVE SHADOW COLOR SCHEME 4 
DEFINE BAR 8 OF (a_menupops[3]) PROMPT "\<View Help" ; 
    KEY CTRL+H, "Ctrl+H" 
DEFINE BAR 9 OF (a_menupops[3]) PROMPT "\-" 
DEFINE BAR 10 OF (a_menupops[3]) PROMPT "\<About Notepad" ; 
    KEY CTRL+A, "Ctrl+A" 


ACTIVATE MENU (m.cMenuName) NOWAIT 

IF m.cTypeParm2 = "C" 
    m.getMenuName = m.cMenuName 
    m.oFormRef.Name = m.cSaveFormName 
ENDIF 


PROCEDURE proc_New 
    cMessage = ALLTRIM(ThisForm.Edit1.Value) 
    cFile = GETFILE('Txt:TXT', 'Enter File:', 'Open', 0, 'Open files') 
    gnErrFile = FCREATE(cFile) 
    IF gnErrFile < 0 
      WAIT 'Cannot open or create out[ut file' WINDOW NOWAIT 
    ELSE 
      = FWRITE(gnErrFile, cMessage) 
    ENDIF 
      = FCLOSE(gnErrFile) 
    IF gnErrFile = 0 
    MESSAGEBOX("File saved.", 64, "Saved") 
      ENDIF 
    cMessage = "" 

PROCEDURE proc_Open 
    LOCAL cFile 
    cFile = "" 
    cFile = GETFILE('Txt:TXT', 'Enter File:', 'Open', 0, 'Open files') 
    DO CASE 
      CASE ".txt" $ LOWER(cFile) && checks if path has a ".txt" string 
        WAIT WINDOW "opening file..." NOWAIT 
          LOCAL gnFileHandle, nSize 
          gnFileHandle = FOPEN(cFile) 
          nSize = FSEEK(gnFileHandle, 0, 2) 
          IF nSize <= 0 
            MESSAGEBOX("This file is empty.", 64, "Message") 
          ELSE 
            = FSEEK(gnFileHandle, 0, 0) 
            cMessage = FREAD(gnFileHandle, nSize) 
            ThisForm.edit1.Value = ALLTRIM(cMessage) 
          ENDIF 
            = FCLOSE(gnFileHandle) 
          WAIT CLEAR 
      OTHERWISE 
        MESSAGEBOX("Error please choose a valid text file.", 16, "Error") 
    ENDCASE 

PROCEDURE proc_Save 
    cMessage = ALLTRIM(ThisForm.Edit1.Value) 
    cFile = GETFILE('Txt:TXT', 'Enter File:', 'Open', 0, 'Open files') 
    gnErrFile = FCREATE(cFile) 
    IF gnErrFile < 0 
      WAIT 'Cannot open or create out[ut file' WINDOW NOWAIT 
    ELSE 
      = FWRITE(gnErrFile, cMessage) 
    ENDIF 
    = FCLOSE(gnErrFile) 
    IF gnErrFile = 0 
      MESSAGEBOX("File saved.", 64, "Saved") 
      ENDIF 
    cMessage = ""  

답변

2

메뉴에서 ThisForm 대신 _SCREEN.ActiveForm을 사용하십시오. 메뉴 사용에 그런

if not pemstatus(_Screen, "myNotePadForm", 5) 
    _Screen.AddProperty("myNotePadForm") 
endif 

_Screen.myNotePadForm = THISFORM 

같은 다말 언급 한 바와 같이, 나는이 경우 귀하의 형태로 뭔가를 할 것이라고이 경우 다른 변수 ... 를 사용

1

또는 '초기화() 메소드 수

_Screen.myNotePadForm.whatEver.... 

다른 보조 양식을 시작하면 걱정할 필요가 없습니다이 방법을하고 IT는 "ActiveForm을"

된다