เมนู (MENU)

ผู้ใช้งานสามารถเข้าถึงงานต่างในระบบงานที่เราทำการสร้างได้ก็โดยการเลือกรายการจากเมนู ฉะนั้นการทำเมนูก็มีความสำคัญไม่ยิ่งหย่อนไปกว่าการสร้างโปรแกรมประเภทอื่น เพราะระบบงานของเราจะใช้งานได้สะดวกหรือไม่ ก็ขึ้นอยู่ที่เราทำการออกแบบและสร้างเมนูขึ้นมา
Visual FoxPro ได้จัดทำเครื่องมือในการสร้างเมนูมาให้เราเรียบร้อยแล้ว ถ้าเป็นเมื่อก่อนคุณต้องมาการการเขียนโปรแกรมคำสั่งกันเอง
วิธีการสร้างเมนู

ที่ Project Manager ให้เลือกแท๊ป Other แล้วเลือก Menus คลิ๊กปุ่ม New
หรือ ป้อนคำสั่งที่ command window ดังนี้ CREATE MENU กดปุ่ม Enter

เมนู
* หมายเหตุ ถ้าใช้ Visual FoxPro ต่ำกว่า Version 5.0 จะสามารถทำได้เฉพาะ Menu อย่างเดียว

ใน Visual FoxPro ได้เตรียมเครื่องมือในการสร้างเมนูมาให้ 2 ชนิด คือ
Menu เป็นการสร้างเมนูธรรมดาตามปรกติ
Shortcut เป็นการสร้างเมนูที่เป็น Shortcut Menu ถ้านึกภาพไม่ออก มันก็คือเมนูที่เกิดขึ้นตอนคุณคลิ๊กเมาส์ด้านขวาแล้วจะมีเมนูโผล่ออกมานั่นแหละใช่เลย ของไท ธนาวุฒิ

MENU
วิธีการสร้าง เมนู ให้คุณ คลิ๊กที่ปุ่ม Menu ใน dialog box New Menu หลังจากนั้นก็จะเข้าสู่ในส่วนของ Menu Designer ถ้าคุณต้องการสร้างเมนูในรูปแบบที่ Visual FoxPro มีมาให้สามารถทำได้โดย เลือกเมนู Menu แล้วเลือก Quick Menu โปรแกรมก็จะทำการสร้างเมนูสำเร็จรูปให้คุณในบัดดล แต่ในบทเรียนนี้ไม่ขอแนะนำให้คุณทำตามแบบ เราจะทำการสร้างเมนูด้วยตัวของเราเอง
c9202.gif (7007 bytes)
ให้คุณป้อนเมนูตามตัวอย่างข้างบน
ทีนี้เรามาดูว่าแต่ละส่วนใช้ทำอะไรบ้าง
Prompt เป็นการกำหนดเมนู title และรายการเมนู
Result ใช้บอกว่าคำสั่งในรายการเมนูนั้นๆทำงานอย่างไร
Command กำหนดให้เป็นการป้อนคำสั่ง สามารถป้อนได้เพียง 1 บรรทัด
Pad Name กำหนดชื่อ pad ในการอ้างถึง
Bar# กำหนดให้ใช้ system menu bar ซึ่งมีมากับ Visual FoxPro
Submenu กำหนดให้มี submenu ย่อย
Procedure กำหนดให้มีการป้อนคำสั่งเป็น โพซิเยอร์ย่อย
Create/Edit ใช้สำหรับสร้างแก้ไข submenu หรือ โพซิเยอร์
Option เป็นการกำหนดลักษณะของรายการเมนูของคุณ
Move Control เป็นปุ่มคำสั่งอยู่ด้านหน้า Prompt ใช้สำหรับย้ายตำแหน่งในรายการเมนู
Menu Level ใช้แสดงระดับของเมนูที่ทำงานขณะนั้น และคุณสามรถที่จะย้ายระดับเมนูของคุณได้โดยใช้ menu level
Insert เป็นปุ่มคำสั่งในการเพิ่มรายการในเมนู
Insert Bar… เป็นปุ่มคำสั่งในการเพิ่มรายการเมนูของ Visual FoxPro (sysyem menu bar) เขามาในเมนูของเรา
Delete เป็นปุ่มสำหรับลบรายการในเมนู
Preview เป็นปุ่มสำหรับทดสอบเมนูที่เราสร้างขึ้นมา

ทีนี้เรากลับมาดูเมนูที่เราทำการสร้างกันต่อ
ใน prompt File ให้ทำการคลิ๊กที่ ปุ่ม Create แล้วทำการป้อนรายการต่างๆดังนี้

Prompt

Result

Customer Command DO FORM CUSTOMER
Salesman Command WAIT WINDOWS ‘NO PROGRAM’

ใน prompt Other ให้ทำการคลิ๊กที่ ปุ่ม Create แล้วทำการป้อนรายการต่างๆดังนี้

Prompt

Result

Assign User Command DO FORM USERPRF

ใน prompt Exit ให้ทำการคลิ๊กที่ ปุ่ม Create แล้วทำการป้อนรายการต่างๆดังนี้

Prompt

Result

Quit Command CLEAR EVENT

จากนั้นให้คุณคลิ๊กที่ปุ่ม Preview คุณก็จะได้เห็นรายการเมนูที่คุณได้ทำการสร้างขึ้นมา ผ
ก่อนที่คุณจะนำเมนูที่คุณสร้างไปใช้งานคุณต้องทำการ Generate เมนูของคุณเสียก่อน โดยทำการ คลิ๊กที่ เมนู Menu แล้วเลือก Generate… เมื่อทำการ generate เสร็จเรียบร้อย Visual FoxPro ก็จะสร้างโปรแกรมขึ้นมาให้คุณ มีนามสกุลเป็น .MPR
เวลาคุณจะนำเมนูไปใช้งานคุณต้องใช้คำสั่ง DO ในการเรียกเมนูนั้นๆขึ้นมา เช่น

DO MENU.MPR

เมื่อคุณต้องการกลับไปใช้ เมนูของ Visual FoxPro คุณสามารถทำได้โดยป้อนคำสั่งดังนี้
SET SYSMENU TO DEFAULT
แนะนำ โปรแกรมที่เราใช้สร้างเมนูขึ้นมานี้เป็นเพียงแค่เครื่องมือทุ่นแรงในการสร้าง โดยที่ความสามารถบางอย่างที่มีอยู่ในคำสั่งของเมนูนั้น เครื่องมือตัวนี้ไม่สามารถทำได้ทั้งหมด คุณยังต้องการพึ่งคำสั่งในการโปรแกรมอยู่ดี ดังนั้งจึงขอแนะนำ ให้คุณเข้าไปดูการเขียนโปรแกรมที่เราสร้างจากเมนูและ generate ออกมาเป็นไฟล์ .MPR ว่ามีคำสั่งอะไรบ้างใช้อย่างไร

เกร็ดเล็กเกล็ดน้อย
การกำหนด Keyboard Shortcut
เมื่อเราต้องการให้มีการเข้าถึงเมนูของเราอย่างรวดเร็วเราสามารถทำได้โดยการกำหนด shortcut ในรายการเมนูของเรา ซึ่งมีวิธีการดังนี้
ให้คลิ๊ที่ปุ่ม Option ที่ช่อง Key Label ให้ทำการกดปุ่มบนแป้นพิมพ์ที่ต้องการทำเป็น shortcut เช่น กดปุ่ม Ctrl กับ F, Alt กับ F เป็นต้น
ในช่องของ Key Text จะเป็นการกำหนด ข้อความที่ต้องการให้แสดงหลังรายการเมนู ในช่องนี้สามารถแสดงได้ในส่วนของ รายการเมนู(menu item) เท่านั้น ในส่วนของเมนูไตเติ้ล(menu title)ไม่สามารถแสดงได้
การกำหนดฟอนต์ในรายการเมนู(menu item)
คุณสามารถที่จะเปลี่ยนแปลง font ใน menu item ได้โดยอาศัยเทคนิคเล็กน้อย โดยทำดังนี้
ให้คลิ๊ที่ปุ่ม Option ที่ช่อง Skip For ให้ป้อนคำสั่งตามตัวอย่างนี้
.F. FONT “AngsanaUPC”,16 STYLE “BI”
AngsanaUPC เป็นชื่อฟอนต์ที่ต้องการให้แสดง
16 เป็นขนาดของฟอนต์
B,I เป็นการกำหนดให้แสดงเป็นตัวหนาและเอียง
* การใช้วิธีกำหนด font แบบนี้จะไม่แสดงให้คุณเห็นตอนใช้ปุ่ม Preview คุณต้องทำการ generate ก่อนแล้วค่อยใช้คำสั่ง DO ชื่อเมนู.MPR ถึงจะสามารถแสดงให้เห็นได้

ในช่อง Skip For ถ้าผลลัพธ์ที่ได้มีค่าเป็น จริง(.T.) จะเป็นการทำให้รายการนั้นไม่สามารถทำการคลิ๊กได้

ก้าวต่อไปอีกขั้น
การกำหนดเมนูให้อยู่บนฟอร์ม
คุณสามารถทำให้เมนูให้ไปปรากฎอยู่บนฟอร์มแทนที่จะไปอยู่บน main visual foxpro window ได้โดยทำตามตัวอย่างต่อไปนี้
1. ที่ command window ให้พิมพ์คำสั่ง CREATE MENU MENUFORM
2. ให้เลือก Menu จากนั้นคุณทำการสร้างเมนู เพื่อความรวดเร็วให้คลิ๊กที่เมนู Menu แล้วเลือก Quick Menu โปรแกรมก็จะสร้างเมนูสำเร็จรูปให้คุณ
3. จากนั้นให้ไปที่ เมนู View เลือก General Option ให้ทำการคลิ๊กที่ Top-Level Form
4. ทำการ generate เมนู โดยคลิ๊กที่เมนู Menu แล้วเลือก Generate… เสร็จขั้นตอนในการสร้างเมนูแล้วครับ
5. ทำการสร้างฟอร์ม ที่ command window ให้พิมพ์คำสั่ง CREATE FORM FORMMENU
6. ให้สร้างฟอร์มดังรูป
c9203.gif (4404 bytes)
ที่ form properties กำหนด
ShowWindows เป็น 2 – As Top-Level Form
Init Event ป้อน DO menuform.mpr WITH THIS,.T.
Destroy Event ป้อน RELEASE MENU
ที่ปุ่ม Command1 กำหนด properties
Caption ป้อน Cancel
Click Event ป้อน Thisform.Release
ทำการ save ฟอร์ม แล้วลองรันโปรแกรมดู    โดยพิมพ์คำสั่งที่ command window ดังนี้
DO FORM FORMMENU

SHORTCUT
การสร้าง shortcut ก็คล้ายๆกับการสร้างเมนูปรกติ เรามาดูว่าเราจะทำ shortcut ได้อย่างไรกันก่อน
ให้คุณสร้าง shortcut โดยป้อนคำสั่งที่ command window ดังนี้

CREATE MENU MYSHORT

ให้เลือก Shortcut หลังจากนั้นให้สร้างเมนูดังนี้
ทำการคลิ๊กที่ปุ่ม Insert Bar แล้วเลือก Clear แล้วคลิ๊ที่ปุ่ม Insert
เลือก Paste แล้วคลิ๊ที่ปุ่ม Insert
เลือก Cut แล้วคลิ๊ที่ปุ่ม Insert
เลือก Copy แล้วคลิ๊ที่ปุ่ม Insert
เมื่อคุณทำเสร็จให้ทำการคลิ๊กที่ปุ่ม Close จะได้รายการเมนูดังรูป
c9204.gif (7872 bytes)

ให้คุณทำการ generate เมนู โดยคลิ๊ที่เมนู Menu เลือก Generate…
จากนั้นให้คุณนำฟอร์มที่เราได้สร้างไว้ก่อนหน้านี้ขึ้นมำทำการแก้ไข โดยพิมพ์คำสั่งที่ command windows ดังนี้
MODIFY FORM FORMMENU
ที่ Text1 ทำการป้อนคำสั่งในส่วนของ RightClick Event เป็น DO MYSHORT.MPR
ที่ Text2 ทำการป้อนคำสั่งในส่วนของ RightClick Event เป็น DO MYSHORT.MPR
จากนั้นก็ทำการ save ฟอร์ม แล้วลองเรียกฟอร์มมาดู เวลาจะทดสอบ shortcut menu ให้คุณป้อนข้อความที่ text1 แล้ว darg ข้อความนั้น แล้วคลิ๊กเมาส์ขวา ก็จะปรากฏ short menu ขึ้นมาคุณจะทำอะไรต่อไปก็แล้วแต่คุณ..

แนะนำ คุณสามารถนำ shortcut menu ไปใส่ไว้ใน Control Textbox แล้วเก็บเป็น Visual Class Library เพื่อจะได้ลดเวลาในการป้อนคำสั่ง

ทำความเข้าใจกับเมนู
คุณทราบหรือไม่ว่าเมนูที่เราทำการสร้างขึ้นมาแต่ละส่วนถูกเรียกว่าอะไรบ้าง?
ในเมนูนั้นจะประกอบไปด้วยส่วนต่างๆดังนี้
MENU
PAD
POPUP
BAR

MENU เมนูเป็นส่วนที่ใช้แสดงรายการต่างที่เรากำหนดไว้ เช่น File Edit View …. ทั้งหมดนี้เรารวมเรียกว่าเมนู   (menu bar)
c9205.gif (1502 bytes)
ถ้าเราทำการสร้างเมนูด้วย Menu Designer เมนูที่ได้จะมีชื่อว่า _MSYSMENU ซึงก็คือชื่อเมนูของ Visual FoxPro นั้นเอง ถ้าเราทำการเขียนโปรแกรมขึ้นมาเองเราสามารถจะตั้งชื่อเองได้
คำสั่งที่เราใช้ทำการสร้าง MENU
DEFINE MENU MenuBarName
[BAR [AT LINE nRow]]
[IN [WINDOW] WindowName | IN SCREEN]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[KEY KeyLabel]
[MARK cMarkCharacter]
[MESSAGE cMessageText]
[NOMARGIN]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]
เช่น DEFINE MENU example BAR AT LINE 1
ตัวอย่างข้างต้นเป็นการสร้าง MENU ชื่อ example

PAD เป็นรายการต่างๆที่อยู่ในเมนูซึ่งเราเรียกแต่ละรายการว่า menu title  เช่นเมนูไตเติ้ล File เมนูไตเติ้ง Edit เป็นต้น
คำสั่งที่เราใช้ทำการสร้าง PAD
DEFINE PAD MenuTitle1 OF MenuBarName PROMPT cMenuTitleText
[AT nRow, nColumn]
[BEFORE MenuName2 | AFTER MenuName3]
[NEGOTIATE LEFT | NEGOTIATE MIDDLE | NEGOTIATE RIGHT]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[KEY KeyLabel [, cKeyText]]
[MARK cMarkCharacter]
[SKIP [FOR lExpression]]
[MESSAGE cMessageText]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

เช่น DEFINE PAD syspad OF _MSYSMENU PROMPT ‘\<System’ COLOR SCHEME3 KEY ALT+S, ”
ตัวอย่างข้างต้นเป็นการสร้าง PAD ชื่อ syspad ภายใต้เมนู _MSYSMENU

POPUP รายการต่างๆของเมนู (menu item) ที่อยู่ภายใต้ PAD เรารวมเรียกว่า popup
c9206.gif (4167 bytes)
คำสั่งที่เราใช้ทำการสร้าง POPUP
DEFINE POPUP MenuName
[FROM nRow1, nColumn1]
[TO nRow2, nColumn2]
[IN [WINDOW] WindowName | IN SCREEN]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[FOOTER cFooterText]
[KEY KeyLabel]
[MARGIN]
[MARK cMarkCharacter]
[MESSAGE cMessageText]
[MOVER]
[MULTISELECT]
[PROMPT FIELD FieldName | PROMPT FILES [LIKE FileSkeleton]
| PROMPT STRUCTURE]
[RELATIVE]
[SCROLL]
[SHORTCUT]
[TITLE cMenuTitleText]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]
เช่น ON PAD convpad OF _MSYSMENU ACTIVATE POPUP conversion
DEFINE POPUP conversion MARGIN RELATIVE COLOR SCHEME 4
จากตัวอย่าง เป็นการกำหนดให้ popup convesion อยู่ภายใต้ convpad ของเมนู _MSYSMENU

BAR จะเป็นส่วนรายการ (menu item) ของเมนู  เช่น รายการ New รายการ Open เป็นต้น
คำสั่งที่เราใช้ทำการสร้าง BAR
DEFINE BAR nMenuItemNumber1 | SystemItemName
OF MenuName PROMPT cMenuItemText
[BEFORE nMenuItemNumber2 | AFTER nMenuItemNumber3]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[KEY KeyLabel [, cKeyText]]
[MARK cMarkCharacter]
[MESSAGE cMessageText]
[SKIP [FOR lExpression]]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]
เช่น DEFINE BAR 1 OF conversion PROMPT ‘\<New’ KEY CTRL+E, ‘^N’
จากตัวอย่าง เป็นการสร้าง รายการ New ภายใต้ popup conversion กำหนดหมายเลข 1 ในการอ้างถึงรายการนี้

เราได้ทราบว่าในเมนูที่เราสร้างขึ้นมานั้นประกอบไปด้วยส่วนต่างๆอะไรบ้าง แล้วคำสั่งนั้นๆเป็นอย่างไร คุณลองสำรวจและทำความเข้าใจกับเมนู MENU.MPR ในโปรแกรมตัวอย่างที่ให้ download ดูว่าคุณเข้าใจมากแค่ไหน

การ Skip รายการของเมนู
ถ้าคุณทำการสร้างฟอร์มหรือรายงาน แล้วนำฟอร์มหรือรายงาน ของคุณไปใส่ไว้ในเมนูเมื่อผู้ใช้(user)ทำการเรียกรายการในเมนู ขึ้นมาใช้งาน คุณต้องทำให้รายการในเมนูนั้นไม่สามารถเรียกใช้งานได้อีกจนกว่าผู้ใช้จะทำงานนั้นๆเสร็จสิ้น หรือทำการปิดฟอร์มซึ่งเราสามารถทำได้หลายวิธีการด้วยกัน

วิธีแรก เป็นการกำหนด skip รายการของเมนูไว้ในฟอร์ม
เราจะใช้ คำสั่ง SET SKIP OF โดยนำไปใส่ไว้ที่ form properties ในส่วนของ Init Event และ Destroy Event วิธีการนี้ถ้าตอนที่ทำการสร้างเมนูโดยใช้ Menu Designer และได้มีการกำหนดเงื่อนไข Skip for ใน Prompt Option คำสั่งที่จะกล่าวถึงนี้จะไม่มีผลอะไรเกิดขึ้น ส่วนวิธีการกำหนดเงื่อนไข Skip for จะเป็นวิธีต่อไปที่จะกล่าวถึง เรากลับมาดูวิธีแรกกันต่อ ผมจะให้คุณทำตามตัวอย่างดังต่อไปนี้
1. ให้คุณทำการสร้างเมนูขึ้นมาโดยพิมพ์คำสั่งที่ command window ดังนี้
CREATE MENU MENUS1
2. ทำการคลิ๊กที่ Menu แล้วป้อนรายการดังนี้

Prompt

Result

File Submenu
Exit Command SET SYSMENU TO DEFALUT

จากนั้นให้ทำการคลิ๊กที่ปุ่ม option ของ prompt File เพื่อเข้าสู่ Prompt Option ให้ทำการป้อนชื่อ pad ในช่อง Pad Name ว่า PADFILE แล้วคลิ๊กปุ่ม OK
3. ในส่วนของ prompt File ให้คลิ๊กปุ่ม Create แล้วป้อนรายการดังนี้

Prompt

Result

Form1 Command DO FORM FORMS1
Form2 Command WAIT WINDOW ‘TEST MENU’

ให้คลิ๊กที่เมนู View แล้วเลือก Menu Options… ในช่อง Name พิมพ์ POPFILE (เดิมเป็น FILE) แล้วคลิ๊กปุ่ม OK
จากนั้นให้ทำการคลิ๊กที่ปุ่ม option ของ prompt Form1 เพื่อเข้าสู่ Prompt Option ให้ทำการป้อนชื่อของรายการ ในช่อง Bar# เป็น 1
หมายเหตุ คุณอาจไม่จำเป็นต้องป้อน Bar# ก็ได้ ถ้าไม่ได้ป้อน Visual FoxPro จะกำหนดให้เป็น 1 ในรายการแรก และเลข 2,3… ต่อไปเรื่อยๆในรายการต่อๆไป
4. ทำการ generate เมนู โดยไปที่เมนู Menu เลือก Generate…
หลังจากที่ทำการ generate เมนูเรียบร้อยแล้วเราจะมาสำรวจโปรแกรมเมนูที่เราได้ทำการ generate ขึ้นมา ให้คุณพิมพ์คำสั่งดังนี้
MODIFY COMMAND MENUS1.MPR
ให้คุณสังเกตบรรทัดคำสั่งด้านล่างนี้ดู
DEFINE PAD PADFILE OF _MSYSMENU PROMPT “File” COLOR SCHEME 3 KEY ALT+F, “”
DEFINE PAD _s1r0u94fd OF _MSYSMENU PROMPT “Exit” COLOR SCHEME 3 KEY ALT+E, “”
ถ้าเราไม่ได้ทำการตั้งชื่อให้กับ Pad Name ทางVisual FoxPro จะทำการตั้งชื่อให้เอง เป็น _s1r0u94fd บางท่านอาจได้เป็นชื่ออื่นก็ได้ ผมขอแนะนำว่าคุณควรจะทำการตั้งชื่อให้กับ pad ที่สร้างขึ้นมาทุกๆครั้ง เช่น ชื่อ PADFILE เป็นต้น เพื่อความสะดวกในการอ้างถึงต่อไป
ในส่วนของ เมนู View แล้ว Menu Options… เป็นการกำหนดชื่อให้กับ Popup ของเมนูตามตัวอย่างข้างล่าง
DEFINE POPUP popfile MARGIN RELATIVE SHADOW COLOR SCHEME 4
ส่วนของ Bar# ที่เรากำหนดไว้ให้คุณสังเกตที่บรรทัดต่อไปนี้ดู
DEFINE BAR 1 OF POPFILE PROMPT “Form1”
ON SELECTION BAR 1 OF POPFILE DO FORMS1
หมายเลขหลังคำสั่ง BAR เราสามารถเปลี่ยนเป็นหมายเลขอะไรก็ได้แล้วแต่เราจะกำหนดเพื่อความสะดวกในการอ้างถึงอีกเหมือนกัน
5. ให้ทำการสร้างฟอร์มขึ้นมา โดยพิมพ์คำสั่งที่ command window ดังนี้
CREATE  FORM FORMS1
ให้สร้างฟอร์มดังรูป
c9207.gif (2888 bytes)
ที่ form properties กำหนด
Init Event ป้อน SET SKIP OF BAR 1 OF POPFILE .T.
Destroy Event ป้อน SET SKIP OF BAR 1 OF POPFILE .F.
ที่ปุ่ม Command1 กำหนด properties
Caption ป้อน Cancel
Click Event ป้อน Thisform.Release
ทำการ save ฟอร์ม

เมื่อคุณทำเรียบร้อยแล้ว เราลองมาทำการทดสอบดูว่าได้ผลอย่างไร ให้ป้อนคำสั่งที่ command window
DO MENUS1.MPR

มาถึงตรงนี้จะสังเกตได้ว่าคำสั่งที่ใช้ในการ skip รายการของเมนูเราจะใช้คำสั่ง SET SKIP OF… เรามาดูกันต่อว่าคำสั่งนี้สามารถทำอะไรได้อีก
จากที่กล่าวไว้ข้างต้นว่าเมนูประกอบไปด้วย 4 ส่วนดังนั้นคำสั่ง SET SKIP OF… ก็สามารถทำได้ทั้ง 4 ส่วนเหมือนกัน ซึ่งมีรูปแบบคำสั่งดังนี้
คำสั่งที่ใช้ทำการ skip เมนู
SET SKIP OF MENU MenuBarName1 lExpression1
เช่น SET SKIP OF MENU _MSYSMENU .T. && เมื่อต้องการ skip เมนู
SET SKIP OF MENU _MSYSMENU .F. && เมื่อต้องการยกเลิกการ skip เมนู
คำสั่งที่ใช้ทำการ skip pad
SET SKIP OF PAD MenuTitleName OF MenuBarName2 lExpression2
เช่น SET SKIP OF PAD PADFILE OF _MSYSMENU .T. && เมื่อต้องการ skip PAD
SET SKIP OF PAD PADFILE OF _MSYSMENU .F.&& เมื่อต้องการยกเลิกการ skip PAD
คำสั่งที่ใช้ทำการ skip popup
SET SKIP OF POPUP MenuName1 lExpression3
เช่น SET SKIP OF POPUP POPFILE .T. && เมื่อต้องการ skip POPUP
SET SKIP OF POPUP POPFILE .F. && เมื่อต้องการยกเลิกการ skip POPUP
คำสั่งที่ใช้ทำการ skip รายการ
SET SKIP OF BAR nMenuItemNumber | SystemItemName
OF MenuName2 lExpression4
เช่น SET SKIP OF BAR 1 OF POPFILE .T. && เมื่อต้องการ skip รายการ
SET SKIP OF BAR 1 OF POPFILE .F. && เมื่อต้องการยกเลิกการ skip รายการ

ขอสังเกต การ SKIP เมนูค่า Expression จะมีค่าเป็น .T. หรือ .F.
ค่า .T. จะเป็นการ Skip รายการของเมนูนั้นๆ
ค่า .F. จะเป็นการยกเลิกการ Skip รายการของเมนูนั้นๆ

วิธีที่สอง เป็นการกำหนด skip รายการไว้ที่ Skip for ในส่วนของ OPTION ในเมนู
การกำหนดโดยวิธีนี้เราต้องเขียนฟังก์ชัน(function) ขึ้นมาแล้วให้เกิดเป็น ค่า .T. หรือ .F. เรามาลองดูฟังก์ชันสำหรับการเช็คเมนู Exit กันก่อน เพราะเมนูรายการนี้จะต้องตรวจสอบว่ามีการเปิดฟอร์มอยู่หรือไม่ ถ้ามีการเปิดฟอร์มใดๆอยู่ก็ตามก็ให้ทำการ skip เมนู Exit
ให้คุณทำการแก้ไขเมนู MENUS1 โดยการป้อนคำสั่งดังนี้
MODIFY MENU MENUS1
้ทำการคลิ๊กที่ปุ่ม prompt ของรายการเมนู Exit   แล้วทำการป้อนคำสั่งในช่อง Skip For ดังนี้
_SCREEN.FORMCOUNT > 0
คลิ๊กที่ปุ่ม OK แล้วทำการ generate เมนู โดยคลิ๊กที่เมนู Menu เลือก Generate…
_SCREEN.FORMCOUNT เป็นคำสั่งนับจำนวนฟอร์มที่ทำการเปิดใช้งานอยู่ ณ. ขณะนั้น ถ้าไม่มีจะมีค่าเป็น .F. ถ้ามีเปิดอยู่จะให้ค่าเป็น .T.
ลองทำการทดสอบเมนูดูโดยป้อนคำสั่ง DO MENUS1.MPR

แล้วมีวิธีอื่นที่ใช้ในการตรวจสอบการ skip รายการอีกหรือไม่?
วิธีการต่างๆมีอีกเยอะขึ้นอยู่กับการประยุกต์ใช้และการนำมันมาใช้ เป็นความสามารถพิเศษห้ามเลียนแบบ เด็กเล็กควรอยู่ในความดูแลของผู้ปกครอง คำเตือนไม่ควรดื่มเกินวันละ 2 ขวด ก่อนดื่มควรอ่านคำเตือนก่อนทุกครั้ง

ลองมาดูวิธีนี้อีกวิธีหนึ่ง เป็นการเขียนฟังก์ชันขึ้นมาใช้เอง
ให้ทำการป้อนคำสั่งที่ command window ดังนี้
MODIFY COMMAND CHKSKIP
กดปุ่ม Enter จากนั้นทำการป้อนคำสั่งตามตัวอย่างด้านล่าง

*******************************************************************
* Function Check Skip Menu Item
*******************************************************************
Function chkskip
Para cFormname
with _Screen
nScreen= .Formcount
for i = 1 to nScreen
if upper(allt(.Forms(i).Name)) = upper(allt(cFormname))
return .T.
endif
endfor
endwith
return .F.

เมื่อป้อนเสร็จเรียบร้อยให้ทำการ save โดยการกดปุ่ม Ctrl+W

ให้ทำการสร้างฟอร์มขึ้นมา โดยพิมพ์คำสั่งที่ command window ดังนี้
CREATE  FORM FORMS2
ให้สร้างฟอร์มดังรูป
c9207.gif (2888 bytes)
ที่ form properties กำหนด
Caption = ทดสอบการ skip
Name = Forms2   && เราตั้งชื่อเพื่อใช้สำหรับใช้กับ ฟังก์ชัน chkskip
ที่ปุ่ม Command1 กำหนด properties
Caption ป้อน Cancel
Click Event ป้อน Thisform.Release
ทำการ save ฟอร์ม

ขั้นต่อมาให้คุณทำการแก้ไขเมนู MENUS1 โดยการป้อนคำสั่งดังนี้
MODIFY MENU MENUS1
ทำการคลิ๊กที่ปุ่ม Edit ที่รายการ File
ที่รายการ Form2 แก้คำสั่ง WAIT WINDOW ‘TEST MENU’   ให้เป็น DO FORM FORMS2
แล้วทำการคลิ๊กที่ปุ่ม prompt ทำการป้อนคำสั่งในช่อง Skip For ดังนี้
CHKSKIP(“Forms2”) && Forms2 เป็นชื่อฟอร์มที่เราตั้งขึ้นมา
คลิ๊กที่ปุ่ม OK แล้วทำการ generate เมนู โดยคลิ๊กที่เมนู Menu เลือก Generate…
ลองทำการทดสอบเมนูดูโดยป้อนคำสั่ง DO MENUS1.MPR

เป็นอย่างไรบ้างครับสำหรับเรื่องของเมนูเอาแบบพอหอมปากหอมคอ ถ้าอ่านมาถึงขั้นนี้แล้วยังไม่เข้าใจก็ปรึกษาได้ครับ เพราะการเขียนโปรแกรมมันไหลไปได้เรื่อยๆ มันไม่ตายตัวแต่ละท่านก็เขียนต่างกันไป ก็ขอจบบทนี้เพียงเท่านี้ละครับ.