Нашият проект в нашата тема ProLan (езици за програмиране) е да създадем FoxPro версия на Notepad. Формулярът ми вече изглежда перфектно като бележник. Вече приключих с лентата с менюта. Сега проблемът ми е как мога да получа достъп до моя 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 = ""