私たちの ProLan (プログラミング言語) テーマのプロジェクトは、メモ帳の FoxPro バージョンを作成することです。私のフォームはすでにメモ帳と完全に同じに見えます。私はすでにメニューバーで終わっています。ここでの問題は、メニュー プログラムに ThisForm.edit1.Value (テキストを入力または表示できる編集ボックス) にアクセスする方法です。THISFORM をメソッドに含める必要があるというエラーがあるためです。
これは私が変更したいブロックコードのサンプルですが、まだ方法がわかりません。
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 = ""