» ค้นหาข้อมูลจากกูเกิ้ล «
ขนาดตัวอักษร:
 
 
::: Skype Status :::
สถานะการออนไลน์โปรแกรม Skype ครับพี่น้อง
กรมพัฒนาธุรกิจการค้า
จี ทู จี เน็ต ดอต คอม
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์
0407314800231
จับฉ่ายฟรีแลนซ์
รับผลิตเว็บไซต์ - Web Application
รับผลิตโปรแกรม - ซอฟท์แวร์คอมพิวเตอร์
รับผลิตงานคอมพิวเตอร์ช่วยสอน - CAI
ขอขอบคุณ - Special Thank
www.thaiware.com
     บริษัท รัชดาพน จำกัด
บ.อินเทอร์เน็ตประเทศไทย จำกัด (มหาชน)
บริการข้อมูล ข่าวสาร จากแหล่งข่าวสารพัน
 
 
 
 
 
 

เรื่องไม่ลับๆล่อๆอีกสักอย่างของมือปืนรับจ้างพัฒนาโปรแกรม
สำหรับการพัฒนาโปรแกรมขึ้นมาสักตัวนั้น ก็คงเริ่มต้นมาจากการวิเคราะห์ถึงปัญหา แล้วนำไปสู่การออกแบบเพื่อเขียนโปรแกรม (และแก้ Bug กันต่อไป 555) นอกเหนือจากนั้นก็ยังต้องสร้างหน้าตา หน้าจอ เพื่อเชื่อมต่อกับผู้ใช้งาน (Graphic User Interface - GUI) ทำให้ผู้ใช้งาน (End user) มองดูก็รู้แล้วว่าควรจะต้องทำอย่างไร รวมไปถึงสิ่งที่สำคัญประเด็นหนึ่งก็คือ เรื่องความผิดพลาดในการใช้งาน ที่เราเรียกกันว่า "Human Error" ก็คือการคีย์ข้อมูลผิดๆถูกๆนั่นแหละครับ แล้วเราจะทำอย่างไรล่ะ หากเอาแบบง่ายๆก็คือ เขียนโปรแกรมไป ก็เดาใจผู้ใช้งานด้วยไปซิครับ พูดน่ะมันง่ายหรอก แต่ตอนทำน่ะซิมันยากอยู่น้าาา แล้วยังต้องเสียเวลาคิดเพิ่มเติมอีก ซึ่งมันก็เลยกลายเป็นต้นทุนที่สูงขึ้น โดยไม่ได้คาดคิดมาก่อน

บทความนี้ผมคงไม่ได้อธิบายโปรแกรมหรอกน่ะครับ เพราะค่อนข้างจะยืดยาวมาก เพียงแต่จะบอกหลักการ หรือ วิธีการอีกแบบหนึ่งสำหรับใช้ในการป้องกันปํญหา (ไม่ใช่แก้น่ะครับ) ที่อาจจะเกิดขึ้นกับผู้ใช้งาน และเป็นการอำนวยความสะดวกต่อผู้ใช้งานไปในตัวด้วย แน่นอนครับจุดประสงค์ที่สำคัญก็คือ การนำสิ่งที่เป็นความรู้พื้นฐานมาพัฒนาต่อยอดในแบบฉบับของตัวเอง (หรือไม่งั้นก็ทำเป็น User Control หรือ พวก ActiveX ไว้ขายต่อก็ยังไหว)

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


ดูหน้าตาของชิ้นงานก่อนน่ะครับ

ตัวอย่างนี้นำเสนอด้วย MS Visual Basic 6 - Service Pack 6 ซึ่งสามารถ (ผมคิดว่า) นำไปประยุกต์ใช้ได้หลากหลาย โดยการนำเอา Control แบบง่ายๆพื้นฐาน 3 ตัว มาทำงานร่วมกัน ประกอบด้วย

  • Microsoft FlexGird 2 ตัว ตัวนึงจะมีคุณสมบัติมองเห็น Visible = True อีกตัวเป็นเหมือนกับที่พักข้อมูลชั่วคราว (Temporary) ซึ่งต้องทำให้คุณสมบัติ Visible = False
  • DTPicker 2 ตัว ตัวนึงให้แสดงเป็นวันที่ อีกตัวหนึ่งให้แสดงเป็นเวลา
  • Control Command Button 2 ตัว เพื่อทำการเพิ่ม หรือ ลบแถวออกจาก MS FlexGrid


  • เหตุผลที่เลือกใช้งาน Control พื้นฐานเหล่านี้ก็เพราะว่า (ผม) ควบคุมมันง่าย และ ทำงานได้เร็ว (จริงๆ) บางท่านอาจจะชอบตัวอื่นๆ เช่น DataGrid ก็ลองนำไปเป็นแนวทางทดสอบดูก็แล้วกันครับ

    จากภาพชิ้นงานนั้น จะมีจำนวน Column (หลัก) อยู่ทั้งหมด 7 หลัก (กำหนดคุณสมบัติให้คงที่ไปเลย Cols=7) แต่ที่ท่านมองเห็นเพียง 6 หลัก ก็เพราะผมเอาหลักแรก หรือ Col=0 ให้มีความกว้าง (Width) เป็น 0 ครับ เรื่องนี้มีเหตุผลน่ะ คือผมชอบนำเอา Component ต่างๆที่มีลักษณะเป็นแถว - หลัก แล้วเอา Column แรก ไปซ่อนเพื่อทำเป็น Index เช่น 0, 1, 2, 3, ... ไว้เพื่ออ้างถึงเมื่อใช้งานมันน่ะครับกระผม

    ปัญหาก็คือเรื่องของจำนวนแถวนี่แหละ ที่เราไม่สามารถล่วงรู้ได้เลยว่าจะต้องป้อนข้อมูลเป็นจำนวนเท่าไร แต่อย่างน้อยจะต้องกำหนดขั้นต่ำเป็น 1 (กำหนดคุณสมบัติ Rows=1) ไว้เป็น Column Header ก็คือแถวแรกสุดนั่นแหละครับก่อนเลย



    DTPicker1 คือ แสดงวันที่
    DTPicker2 คือ แสดงเวลา
    แล้วเอาไปวางไว้ที่ไหนบนฟอร์มก็ได้ เพราะเราจะเขียนโค้ดเพื่อควบคุมตำแหน่งการแสดงผลของมันอีกทีนึง

    การออกแบบ


      พิจารณาจากหลัก (Column) โดยอาศัยการเคลื่อนที่ของ Cell ไปตาม Column ต่างๆ
    1. หลักที่ 1 เป็นลำดับที่ ปิดการมองเห็นของ DTPicker ทั้งสองให้ Visible = False
    2. หลักที่ 2 และ 3 จะเป็นการแสดงวันที่ ดังนั้นเราจึงต้องเปิดให้ DTPicker ที่เป็นวันที่ให้สามารถมองเห็นได้ ส่วน DTPicker ที่แสดงเวลาจะต้องถูกปิดไว้ ด้วยการกำหนดคุณสมบัติ Visible เอาน่ะครับ
    3. หลักที่ 4 และ 5 ก็ทำกลับกันจากข้อด้านบน
    4. หลักที่ 6 เป็นการคำนวณจำนวนเวลาจากหลักที่ 4 และ 5 ดังนั้นปิดการมองเห็นของ DTPicker ทั้งสองให้ Visible = False
    5. การที่ทำให้ DTPicker ทั้งสองตัวเคลื่อนไปปรากฏตามตำแหน่งเซลล์ต่างๆได้ตรง ก็อาศัยคำสั่ง Move ดังโค้ดด้านล่างนี้ครับ

      ทีนี้มาดูเรื่องของแถว (Row) กันครับ สืบเนื่องจากว่า MSFlexGrid นี้เราต้องคำนวณหาค่าของจำนวนแถวให้แน่นอนตายตัวเสียก่อน ไม่ใช่อยู่ดีๆก็อยากเพิ่มเข้าไปกันได้ทันทีเลย การแก้ปัญหานี้ที่ผมทำก็คืออาศัย MSFlexGrid อีกตัวเข้ามาช่วยเพื่อทำตัวเป็น Dummy เก็บข้อมูลจาก MSFlexGrid ตัวหลักเสียก่อน (มี Control Command Button เพื่อเพิ่ม และ ลบแถวอีก 2 ตัว หรือ จะเอาแบบกดปุ่ม Insert/Delete หรือ ใช้ปุ่ม Function ก็สุดแต่จะจินตนาการกันเอาล่ะครับ ... พี่น้อง 55555)
    1. หลักการก็มีอยู่ว่าให้เราคำนวณหาจำนวนแถวปัจจุบันของ MSFlexGrid ตัวหลักไว้ก่อน พร้อมกับนำค่านี้ส่งไปให้ MSFlexGrid ตัวรองด้วย จากนั้นค่อยให้เพิ่มค่าขึ้น 1 และนำค่าจากแถวทั้งหมดใน MSFlexGrid ตัวหลักไปใส่ไว้ในตัวรอง (จากภาพด้านบนจะเห็นได้ว่า MSFlexGrid ตัวรองจะมีจำนวนแถวน้อยกว่าตัวหลักไป 1)
    2. ต่อไปก็เคลียร์ค่าต่างๆของ MSFlexGrid ตัวหลัก (ควรทำเป็นเป็นโปรแกรมย่อย เพราะมันต้องทำงานหลายรอบ) แล้วให้ค่าจำนวนแถวใหม่กับตัวมัน (ที่เพิ่มค่าขึ้นไปแล้วอีก 1)
    3. ทำการคัดลอกค่าในแถวต่างๆจาก MSFlexGrid ตัวรองเอากลับมาไว้ที่ตัวหลัก ส่วนในแถวสุดท้ายก็เพิ่มค่าเป็นวันที่ และ เวลาปัจจุบันให้กับมัน เท่านี้เองก็เสร็จพิธี
      ส่วนกรณีของการลบแถวก็ทำเช่นเดียวกันกับการเพิ่ม

      ภาพนี้เดิม MSFlexGrid มีทั้งหมด 3 แถว และต้องการลบแถวที่ 2 ออกไป

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

    *** ขอให้ไอเดีย จงบรรเจิดจ้า ขึ้นแก่ใจท่านที่เข้ามาอ่านทุกๆท่านครับ ***

    ::: All in One Freelance Computer Developer :::
    All contents Copyright © 2005 www.g2gnet.com - All Rights Reserved.
    Contact thongkorn@hotmail.com Tel. 08-6862-6560