โปรแกรมหลัก(Main Program)

สำหรับโปรแกรมหลักที่ผมจะนำเสนอนี้เป็นเพียงแนวทางหนึ่งในหลายๆแนวทาง คุณอาจประยุกต์ไปเป็นอย่างอื่นก็ได้
ใน Visual FoxPro ได้จัดเตรียมเครื่องมือไว้สำหรับให้เราสร้างระบบงานให้เราซึ่งก็คือ โปรแกรม Project Manager หลายๆท่านคงคุ้นกับมันดี เพราะเมื่อเรา ติดตั้งระบบแล้วทำการเรียกโปรแกรม Visual FoxPro เป็นครั้งแรกโปรแกรมตัวนี้ก็จะโผล่ออกมา แต่ตอนนี้ผมจะให้คุณทำการสร้างมันใหม่ และเพื่อให้การเรียนรู้และการสร้างเป็นไปในแนวทางเดียวกัน ให้คุณทำการสร้าง sub-directory ขึ้นมาเก็บระบบงานของเราก่อนโดยพิมพ์คำสั่งที่ command window ดังนี้

! MD C:\MYAPP
SET DEFAULT TO C:\MYAPP
CREATE PROJECT MyProject

ตอนนี้เรามาทำความรู้จักกับลัษณะทั่วๆไปของ main Visual FoxPro window กันก่อน การอ้างถึง main windows นั้นเราจะใช้คำสั่ง _SCREEN ซึ่งคุณก็เคยเห็นมาบ้างแล้ว ผมจะขอยกตัวอย่างให้ลองทำตามโดยป้อนคำสั่งที่ commnd window ดังนี้

_SCREEN.Caption = ‘โปรแกรมของฉัน’   && เป็นการเปลี่ยนข้อความไตเติ้ล
_SCREEN.Backcolor = rgb(192,192,192) && เปลี่ยนสีฉากหลังเป็นสีเทา
_SCREEN.Controlbox = .F. && ไม่แสดง control box ทั้งหมด
_SCREEN.Controlbox = .T.
_SCREEN.Closeable = .F. && ปิดปุ่ม close box
_SCREEN.MaxButton = .F. && ปิดปุ่มขยาย windows
_SCREEN.MinButton = .F. && ปิดปุ่มย่อ windows
_SCREEN.Height =  SYSMETRIC(2) && เป็นการกำหนดความสูงของ Main Visual FoxPro Window ส่วนฟังก์ชัน SYSMETRIC(2) จะเป็นการส่งค่าความสูงของ จอภาพที่ได้ทำการ set ไว้ในโปรแกรม Windows ถ้าคุณ set จอภาพเป็น 640 x 480 ค่าที่ส่งมาก็จะเป็น 480 เป็นต้น หรือง่ายๆก็เป็นการกำหนดขนาดให้สูงเต็มหน้า โปรแกรม Windows ไม่ว่าจะทำการ set ความละเอียดเป็นเท่าไหร่ก็ตาม
_SCREEN.Width =  SYSMETRIC(1) && เป็นการกำหนดความกว้างของ Main Visual FoxPro Windows
_SCREEN.Visible = .F. && เป็นคำสั่งให้ทำการซ่อน Main Visual FoxPro Window

*หมายเหตุ ถ้าคำสั่งไหนเป็น .F. ถ้าเปลี่ยนเป็น .T. ก็จะเป็นการทำงานตรงกันข้าม

คุณได้ทราบถึงคำสั่งในการควบคุม Main Visual FoxPro Window บ้างพอสมควร แต่มีอีกสิ่งหนึ่งที่จะอธิบายให้ทราบเป็นเรื่องเกี่ยวกับการกำหนดสภาพแวดล้อม (environment) ของ Visual FoxPro ซึ่งผมคิดว่าท่านทั้งหลายควรอย่างยิ่งที่จะต้องรู้ไว้ ซึ่งแฟ้มข้อมูลที่จะกำหนดสภาพแวดล้อมของ Visual FoxPro ก็คือ แฟ้ม CONFIG.FPW การสร้างแฟ้มนี้คุณสามารถสร้างได้โดยใช้ text editor ใดๆก็ได้ หรือใช้ คำสั่ง modify command ถึงตอนนี้เรามาดูกันก่อนว่าเราจะทำอะไรกับแฟ้ม CONFIG.FPW ได้บ้าง
เช่นการที่เราจัดการกับ Main Visual FoxPro Window  โดยใช้คำสั่ง _SCREEN นั้นเราต้องทำในขณะอยู่ใน Main Visual FoxPro Windows แต่ถ้าเราต้องการทำในขณะที่เรียกโปรแกรมเราก็ต้องใช้ แฟ้ม CONFIG.FPW เข้าช่วย หรือถ้าเราต้องการ SET ค่าต่างๆ เป็นต้น
เรามาดูกันว่า CONFIG.FPW นั้นทำอะไรได้บ้าง ให้ทำการพิมพ์คำสั่ง
modify commmand CONFIG.FPW
พิมพ์คำสั่งตามนี้

TITLE = โปรแกรมของฉัน             && กำหนด title
DEFAULT = C:\MYAPP    && กำหนด default directory
DATE = ANSI         && กำหนดรูปแบบวันที่เป็นแบบ  yy.mm.dd
CENTURY = ON     && กำหนด ปีเป็น 4 หลัก yyyy
ESCAPE = OFF      && ยกเลิกการใช้ ปุ่ม Esc
DELETE = ON      && กำหนดไม่ให้แสดงเรคคอร์ดที่ถูกลบไปแล้ว
HELP = OFF   && ยกเลิก help
TALK = OFF               && ไม่ให้แสดงผลขณะทำงาน
TMPFILE = C:\TEMP    && กำหนด directory ของ tempolary file (คุณต้องสร้าง directory TEMP ขึ้นมาเองด้วย)
COMMAND = DO ใส่ชื่อโปรแกรม       && ให้ทำการเรียกโปรแกรมขึ้นมาทำงานเลย คุณสามารถใช้คำสั่ง _STARTUP แทนคำสั่ง COMMAND ก็ได้

เคล็ดไม่ลับ ถ้าคุณไม่ต้องการให้ Main Visual FoxPro Window ปรากฏขึ้นมาขณะทำการเรียก Application ของคุณให้ใส่คำสั่ง SCREEN = OFF ใน CONFIG.FPW

การกำหนดสภาพแวดล้อมของ Visual FoxPro นั้นเราสามารถที่จะทำให้โปรแกรมเราทำงานได้ดีขึ้นและเร็วขึ้น เมื่อคุณได้ทำการสร้าง แฟ้ม CONFIG.FPW เรียบร้อยแล้วคุณต้องนำมันไปใส่ไว้ใน Project Manager ที่เราได้สร้างเตรียมไว้ คือ MyProject โดยทำดังนี้

1.  ที่ Project Manager ให้ คลิ๊กที่ Other
2. ให้เลือก Text File แล้วคลิ๊กปุ่ม Add
3. ให้พิมพ์ไฟล์ CONFIG.FPW ที่ Select file แล้ว คลิ๊กปุ่ม OK

เราสามารถเรียก config ไฟล์จากที่อื่นได้หรือไม่ แล้วสามารถสร้างเป็นชื่ออื่นได้ด้วยหรือไม่ ?
ถ้าเราจะทำการเรียกไฟล์ config จากที่อื่น แล้วเป็นชื่ออื่นด้วยเราสามารถทำได้ โดยใช้ พารามิเตอร์(parameter) -c
เช่น เราได้ทำการสร้างระบบงานของเราแล้ว build เป็น .exe ชื่อว่า myproject.exe เวลาเรียกใช้ให้พิมพ์ดังนี้
MYPROJECT.EXE -CC:\MYAPP\MyConfig.FPW
หรือถ้าเรียกจาก Visual FoxPro ก็ได้ โดยพิมพ์
VFP.EXE -CC:\MYAPP\MyConfig.FPW

การสร้างเมนโปรแกรม

ในระบบงานหนึ่งๆ จะต้องมีโปรแกรมตัวหนึ่งเป็นตัวหลักที่จะนำผู้ใช้ผ่านไปสู่ส่วนต่างๆของโปรแกรมซึ่งก็คือ เมนโปรแกรม(main program) การสร้างเมนโปรแกรมนั้นก็แล้วแต่ท่านจะสร้างไม่ได้มีกฏเกณฑ์อะไรตายตัว แต่ผมจะขอแนะนำเพื่อเป็นแนวทางในการสร้างต่อๆไป
ก่อนอื่นเรามาดูความต้องการของเราก่อนว่าจะให้โปรแกรมเป็นไปอย่างไร (มันขึ้นอยู่ที่ความอยากของแต่ละบุคคล)

นี้เป็นความต้องการส่วนตัว ห้ามลอกเลียนให้ก๊อปปี้ไปเลยแล้วกัน
1. ต้องการให้แสดง โลโก้ขณะทำการเปิดระบบงาน (แสดงยี่ห้อว่างั้นเหอะ)
2. จากนั้นให้ผู้ใช้ป้อนรหัสผ่านเพื่อเข้าสู่โปรแกรม (มิให้ผู้ประสงค์ดีเข้ามาทำงาน)
3. เรียกเมนูขึ้นมา แล้วแสดงโลโก้ ด้วย

ระบบงานแต่ละระบบงานนั้นจะต้องมีคำสั่ง READ EVENTS อยู่ด้วยเสมอ ซึ่งส่วนใหญ่เราจะเอาไว้ที่เมนโปรแกรม คุณคงสงสัยว่าใส่ไว้ทำไม ถ้าคุณเคยลอง build application เป็น .EXE โดยไม่ใส่คำสั่ง READ EVENTS   แล้วลองเรียกโปรแกรมดูถ้าเป็นมือใหม่ ร้อยละร้อยห้าสิบขึ้นมาแว๊บเดียวแล้วก็หายไปเหมือนสายลม ใน help ของ Visual FoxPro บอกไว้ว่าเป็นการ start event processing ในความคิดของผมนั้นมันก็เป็นคำสั่งให้รอรับค่าจากผู้ใช้งานเหมือนเป็น ลูปไม่รู้จบ จนกว่าเราจะใช้คำสั่งยกเลิก ซึ่งคำสั่งที่ใช้ในการยกเลิก READ EVENTS ก็คือ CLEAR EVENTS หลังจากที่เราทำการใช้คำสั่งนี้แล้วโปรแกรมก็จะหลุดจาก READ EVENTS มาทำงานในบรรทัดต่อมา ส่วนใหญ่เราจะใส่คำสั่ง READ EVENTS ไว้ที่ main program แล้วใส่คำสั่ง CLEAR EVENT ไว้ที่เมนู ที่ทำการ ออกจากโปรแกรม (quit) คุณสามารถใช้ READ EVENTS กี่ครั้งก็ได้ แต่ก่อนใช้ก็ควรจะ CLEAR EVENT ของเก่าก่อน เรามาดูตัวอย่างการใช้กันก่อน

1.ให้ทำการ คลิ๊กที่ Code ใน Project Manager
2.ต่อมาให้คลิ๊กขวาที่ Programs เลือก รายการ New แล้วทำการป้อนคำสั่งดังนี้

SET PROCEDURE TO UTILITY
ON SHUTDOWN DO SHUT_DOWN
ON ERROR DO errhand WITH ;
ERROR( ), MESSAGE( ), MESSAGE(1),;
PROGRAM( ), LINENO( )
SET CURSOR OFF
DO FORM License NAME License
INKEY(5)
SET CURSOR ON
DO Startup
License.Release
DO FORM Login
READ EVENT
DO Cleanup
*** End of Program ***

3. ทำการ save โปรแกรม โดยการคลิ๊กที่ เมนู File เลือก Save As ใส่ชื่อ โปรแกรมว่า MAIN

คุณก็ได้ทำความรู้จักกับคำสั่ง READ EVENTS และ CLEAR EVENTS ไปบ้างแล้ว ยังมีคำสั่งที่ผมจะขอกล่าวถึงอีก 2 คำสั่ง เป็นคำสั่งที่ควบคุมการเกิดข้อผิดผลาดของโปรแกรม ซึ่งในการเขียนโปรแกรมนั้นบางครั้งสิ่งที่เราคาดไม่ถึงก็สามารถเกิดขึ้นได้ เราก็ควรจะทำการควบคุมการเกิดข้อผิดพลาดเหล่านั้นเสียก่อนที่มันจะเกิดขึ้น เมื่อมันเกิดขึ้นแล้วให้มันแสดงข้อผิดพลาดขึ้นมาแจ้งให้เราทราบ เราจะได้หาทางแก้ไขข้อผิดพลาดเหล่านั้นอีกทีคำ สั่งที่จะกล่าวถึงก็คือ

คำสั่ง ON ERROR
รูปแบบคำสั่ง ON ERROR [Command]
เมื่อเกิด ข้อผิดพลาดแล้วให้ทำตามคำสั่งที่ต้องการ เช่น

ON ERROR DO errhand WITH ERROR( ), MESSAGE( ), MESSAGE(1),PROGRAM( ), LINENO( )

ส่วนโปรแกรม errhand นั้นให้ทำการสร้างโปรแกรมชื่อว่า utility เพื่อทำการเก็บ โพซิเยอร์(procedure) errhand โดยทำการสร้างดังนี้

1.ให้ทำการ คลิ๊กที่ Code ใน Project Manager
2.ต่อมาให้คลิ๊กขวาที่ Programs เลือกรายการ New แล้วทำการป้อนคำสั่งดังนี้

*******************************************************************
* Procedure OnError
*******************************************************************
PROCEDURE errhand
PARAMETER merror, mess, mess1, mprog, mlineno
ON SHUTDOWN
messagebox(‘หมายเลขข้อผิดพลาด: ‘ + LTRIM(STR(merror)) + CHR(13) + ;
‘ข้อผิดพลาด: ‘ + mess + CHR(13) + ;
‘บรรทัดข้อผิดพลาด: ‘ + mess1 + CHR(13) + ;
‘บรรทัดที่ผิดพลาด: ‘ + LTRIM(STR(mlineno)) + CHR(13) + ;
‘โปรแกรม: ‘ + mprog + CHR(13) + ;
‘Please contact your Vendor ‘+ CHR(13) + ;
‘ถ้าคุณเปิด Visual FoxPro อยู่ก่อนแล้วให้ปิดแล้วเรียกโปรแกรมอีกครั้ง’ , 288,””)
QUIT
ENDPROC

3. ทำการ save โปรแกรม โดยการคลิ๊กที่ เมนู File เลือก Save As ใส่ชื่อ โปรแกรมว่า UTILITY

คำสั่ง ON SHUTDOWN
รูปแบบคำสั่ง ON ERROR [Command]
เป็คำสั่งเมื่อเราทำการคลิ๊กที่ปุ่ม close box แล้วให้ทำตามคำสั่งที่ต้องการ เช่น

ON SHUTDOWN DO SHUT_DOWN

โพซิเยอร์ SHUT_DOWN ก็ให้ทำการสร้างเก็บไว้ที่ โปรแกรม UTILITY เหมือนกันโดยพิมพ์คำสั่งดังนี้

*******************************************************************
* Procedure ShutDown
*******************************************************************
PROCEDURE Shut_Down
LOCAL nAnswer
nAnswer = messagebox(“ต้องการออกจากโปรแกรม”,292,””)
IF nAnswer = 6
QUIT
ENDIF
ENDPROC

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