สร้างลูกศรหันตามเมาส์

ไปหน้าแรก | สารบัญ | Laploy.comระเบียนบทความ | บทความจากลาภลอย

บทความนี้เขียนขึ้นเมื่อ วันอังคารที่ 28 สิงหาคม พ.ศ. 2550

ผู้เขียน : ลาภลอย วานิชอังกูร www.laploy.com

ลงพิมพ์ในนิตยสาร Windows IT Pro

 

สร้างลูกศรหันตามเมาส์

เขียนโปรแกรมภาษา ActionScript 3.0 สร้างออพเจ็กต์ลูกศรที่หันหัวชี้ไปตามการเคลื่อนไหวของเมาส์พอยน์เตอร์ ได้ผลลัพธ์เป็น Flash Movie ไว้ใช้งานในหน้าเว็บ

 

ในบทความตอนที่แล้วผู้เขียนแนะนำวิธีพัฒนาโปรแกรมด้วยภาษา ActionScript เวอร์ชัน 3.0 (ต่อไปจะเรียกว่า AS3) เบื้องต้น ได้แนะนำไว้ว่าภาษา AS3 ต่างจากภาษา ActionScript เวอร์ชันก่อนๆ มาก ภาษา ActionScript เวอร์ชัน 1 และ 2 เป็นเพียงภาษาสคริปต์ที่ผูกติดกับทามน์ไลน์ (time line) แต่ AS3 เป็นภาษาเพื่อการเขียนโปรแกรมอย่างเต็มรูปแบบ เราสามารถพัฒนาโปรแกรมได้ด้วยวิธีการใกล้เคียงกับการสร้างแอพลิเกชันด้วยภาษาจาวาและ C#

 

เครื่องมือสำหรับพัฒนาโปรแกรมหรือ IDE ที่แนะนำให้ใช้คือโปรแกรม Adobe Flex Builder 2 (ต่อไปจะเรียกย่อว่า AFB2) มีวิธีใช้งานคล้ายกับ IDE ที่เราคุ้นเคย (เช่นวิสชวลสตูดิโอและเน็ตบีนส์) ทำให้นักพัฒนาโปรแกรมมืออาชีพสามารถก้าวเข้าสู่โลกแห่งการสร้าง rich internet application (โปรแกรมประยุกต์ในอินเตอร์เน็ตที่มีลักษณะการใช้งานใกล้เคียงกับโปรแกรมในเดกส์ท็อป) ได้อย่างรวดเร็ว และที่สำคัญคือภาษา AS3 สนับสนุนหลักการ OOP เหมือนจาวาและ C# (ทุกอย่างเป็นออพเจ็กต์ ใช้คลาสเพื่อสืบคุณสมบัติ ไม่ได้ใช้โปรโตไทป์เหมือนอย่างเวอร์ชันก่อน) ช่วยให้การนำโค้ดกลับมาใช้ใหม่ทำได้อย่างมีประสิทธิภาพ

 

คลาสกับออพเจ็กต์

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

 



แม่ค้าขายขนมครกที่เก่ง OOP

ลองนึกภาพเตา (กระทะ) ของขนมครกสิงค์โปร เตาจะมีหลายหลุม แต่ละหลุมมีลวดลายแตกต่างกัน (เป็นรูปปลา รูปนก ฯลฯ) เมื่อแม่ค้าแคะขนมครก จะได้ขนมรูปร่างต่างๆ กัน ตามลักษณะของหลุม ออพเจ็กต์เทียบได้กับขนมครกแต่ละชิ้น คลาสเทียบได้กับหลุม และเตาทั้งเตาเทียบได้กับแพคเกจ (package คำเรียกกลุ่มคลาสในภาษา AS3)

เรานิยามคลาสเพื่อใช้ทำหน้าที่เป็นแม่พิมพ์ของออพเจ็กต์ ในบทความนี้เราจะนิยามคลาสชื่อ Arrow ทำหน้าที่สร้างภาพลูกศร คลาส ArrowRotate ทำหน้าที่สร้างออพเจ็กต์ลูกศร และทำให้มันเคลื่อนหันตามเมาส์ได้ และสุดท้ายคือคลาส test ใช้ทดสอบการทำงาน

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

 

คลาสสร้างภาพลูกศร

คลาสสร้างภาพลูกศรชื่อคลาส Arrow ทำหน้าที่วาดภาพลูกศรหนึ่งตัว ในภาษา ActionScript หรือในโลกของแฟลช ภาพทั้งหลายมีภาวะเป็น “สไปรท์” (Sprite) หรือภาพกราฟิกเล็กๆ ที่สามารถเคลื่อนไหวได้อย่างอิสระ ลูกศรที่เราจะสร้างก็เป็นสไปรท์ตัวหนึ่ง คลาส Arrow ของเราจึงจำเป็นต้อง “รับคุณสมบัติ” (inherit) ต่างๆ มาจากคลาส Sprite (Sprite เป็นคลาสที่อยู่ภายในคลาสไลบรารีของแฟลช)

 

โค้ดย่อแบบโครงสร้าง (outline) ของคลาส Arrow

 

โค้ดที่เห็นข้างบนคือ โค้ดย่อแบบโครงสร้าง (outline) ของคลาส Arrow จะเห็นว่าคลาส Arrow มีสมาชิกเพียงสองตัว เป็นเมธอดทั้งคู่ คำสั่งบรรทัดที่ 1 ประกาศแพคเกจ (package เหมือนแพคเกจในจาวาและเนมสเปสใน C# ทำหน้าที่เป็นแหล่งเก็บกลุ่มของคลาส เหมือนคลาสไลบรารี) ชื่อ LoyClass ไฟล์เก็บนิยามต่างๆ ของแพคเกจนี้จะต้องอยู่ในโฟลเดอร์ชื่อเดียวกันนี้

บรรทัดที่ 3 คำสั่ง import ทำหน้าที่จับรวมนิยามต่างๆ ในแพคเกจที่ระบุรวมเข้ามา ทำให้เราสามารถอ้างถึงนิยามเหล่านั้นได้โดยไม่ต้องระบุชื่อแบบยาว (fully qualified name)

บรรทัดที่ 5 ทำหน้าที่ประกาศส่วนหัวของคลาส จะเห็นว่าประกอบด้วยคำว่า public ทำหน้าที่กำหนดขอบเขตการเข้าถึงว่าให้เรียกได้จากทุกแห่ง (หากไม่กำหนดจะมีค่าโดยปริยายเป็น internal) คำว่า class เป็นคำสงวน บอกให้รู้ว่านี่คือการนิยามคลาส Arrow เป็นชื่อคลาสที่เราตั้งขึ้น คำว่า extends ทำหน้าที่บอกการ inherit (เหมือนภาษาจาวา และเหมือนเครื่องหมาย : ใน C#) Sprite คือชื่อคลาสที่เราต้องการสืบคุณสมบัติ

บรรทัดที่ 7 และ 11 คือนิยามเมธอด ที่จะอธิบายในหัวข้อถัดไป

 

สมาชิกแบบเมธอดของคลาส Arrow

สมาชิกแบบเมธอดของคลาส Arrow มีเพียงสองตัว ตัวแรกเป็นคอนสทรักเตอร์ (constructor) มีโค้ดดังนี้

 

บรรทัดแรกนิยามส่วนหัวของเมธอด โปรดสังเกตว่ามันมีตัวจำกัดการเข้าถึงเป็น public ไม่มีรีเทินไทป์ (return type ค่าส่งกลับ) และมีชื่อเดียวกับคลาส ซึ่งเป็นปรกติของคอนสทรักเตอร์ ผู้เขียนกำหนดให้คอนสทรักเตอร์ของคลาส Arrow มีพารามิเตอร์หนึ่งตัวชื่อ color ทำหน้าที่รับค่าสี ซึ่งเราจะนำไปกำหนดให้เป็นสีของลูกศร พารามิเตอร์นี้มีดาต้าไทป์เป็น unit (เลขจำนวนเต็มไม่มีเครื่องหมายขนาด 32 บิต)

ไส้ในของคอนสทรักเตอร์นี้มีเพียงบรรทัดเดียว ทำหน้าที่เรียกเมธอด DrawArrow ที่จะอธิบายในหัวข้อถัดไป

 

เมธอด DrawArrow

เมธอด DrawArrow ทำหน้าที่ลากเส้นวาดภาพลูกศร มีโค้ดดังนี้

 

บรรทัดแรกนิยามส่วนหัวของเมธอด คำว่า private จำกัดการเข้าถึงเมธอดนี้ ให้เข้าถึงได้จากโค้ดภายในคลาสนี้เท่านั้น คำว่า void ทางขวาสุดระบุว่าเมธอดนี้ไม่มีค่าส่งกลับ บรรทัดที่ 3 คำว่า graphics เป็นชื่อคลาสในแพคเกจ flash.Graphics ทำหน้าที่เกี่ยวข้องกับการวาดภาพที่เกิดจากการลากเส้น (vector shape) lineStyle คือชื่อเมธอด (ของ graphics) ทำหน้าที่กำหนดลักษณะของเส้น

บรรทัดที่ 14 beginFill คือเมธอดทำหน้าที่กำหนดสีที่จะระบายภายในสไปร์ท เราใช้พารามิเตอร์ color เป็นตัวกำหนด บรรทัดที่ 15 moveTo คือเมธอดทำหน้าที่กำหนดตำแหน่งที่จะวาด

บรรทัดที่ 16 ถึง 22 เรียกเมธอด lineTo เพื่อวาดภาพ อาร์กิวเมนต์ทางซ้ายคือค่าในตำแหน่งที่จะวาดในแนว x อาร์กิวเมนต์ทางขวาคือค่าในแนว y บรรทัดที่ 23 เมธอด endFill ทำหน้าที่ระบายสีที่กำหนดไว้แล้วด้วย beginFill

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

 

  << ภาพลูกศรที่เกิดจากเมธอดนี้

 

คลาสที่ทำให้ลูกศรหันตามเมาส์

คลาสซึ่งทำหน้าที่ให้ลูกศรเคลื่อนไหวได้คือคลาสชื่อ ArrowRotate มีโค้ดย่อแบบโครงสร้าง (outline) ดังนี้

 

บรรทัดแรกกำหนดแพคเกจเป็น LoyClass เพราะไฟล์นี้อยู่ในโฟลเดอร์ชื่อเดียวกันนี้ เนื่องจากทั้งคลาสนี้และคลาส Arrow เป็นคลาสที่อยู่ในแพคเกจเดียวกัน (แต่อยู่คนละไฟล์) ทำให้คลาสนี้อ้างถึงคลาส Arrow ได้โดยไม่ต้อง import ก่อน

บรรทัดที่ 3 ถึง 5 จับแพคเกจไลบรารีของแฟลช (ที่เราต้องการใช้) ผนวกเข้ามาด้วยคำสั่ง import บรรทัดที่ 7 คือนิยามส่วนหัวของคลาส ArrowRotate โปรดสังเกตว่าคลาสนี้ก็สืบสันดานจากคลาส Sprite เช่นเดียวกับคลาส Arrow เพราะในคลาสนี้เราจำเป็นต้องอ้างถึงคุณสมบัติบางอย่างของสไปรท์ด้วยเช่นกัน

บรรทัดที่ 9 ถึง 13 คือสมาชิกแบบดาต้าฟิลด์ ที่จะอธิบายรายละเอียดในหัวข้อถัดไป บรรทัดที่ 15 ถึง 17 คือสมาชิกแบบพร็อพเพอร์ตี ซึ่งจะอธิบายรายละเอียดในหัวข้อถัดจากดาต้าฟิลด์ และสุดท้าย บรรทัด 19 ถึง 33 เป็นสมาชิกแบบเมธอด ซึ่งจะอธิบายรายละเอียดในหัวข้อถัดจากพร็อพเพอร์ตี

 

สมาชิกแบบดาต้าฟิลด์ของคลาส ArrowRotate

สมาชิกแบบดาต้าฟิลด์ทำหน้าที่เก็บข้อมูลของออพเจ็กต์ เพราะตามหลักการเอ็นแคปซูเลชัน (encapsulation) เราต้องผนวกส่วนข้อมูลและส่วนปฏิบัติงานไว้ภายในออพเจ็กต์ สมาชิกแบบดาต้าฟิลด์ทั้งหมดมีส่วนจำกัดการเข้าถึงเป็นแบบ private เพื่อให้เข้าถึงได้จากโค้ดภายในคลาสนี้เท่านั้น

สมาชิกแบบดาต้าฟิลด์ของคลาส ArrowRotate มีห้าตัวดังนี้

  • arrow : มีชนิดข้อมูลเป็น Arrow ทำหน้าเก็บค่าอ้างอิงออพเจ็กต์ลูกศร
  • bkg : มีชนิดข้อมูลเป็น Stage ทำหน้าที่เก็บค่าอ้างอิงฉากหลัง (background) หรือพื้นที่วาดภาพ
  • posX : มีชนิดข้อมูลเป็น int ทำหน้าที่กำหนดค่าตำแหน่งทางแนวนอนของลูกศร
  • posY : มีชนิดข้อมูลเป็น int ทำหน้าที่กำหนดค่าตำแหน่งทางแนวตั้งของลูกศร
  • color : มีชนิดข้อมูลเป็น uint ทำหน้าที่เก็บค่าสีของลูกศร

 

โปรดสังเกตว่าฟิลด์บางฟิลด์ (เช่น posX) เรากำหนดค่าเริ่มต้นไว้ในบรรทัดเดียวกับการประกาศเลย (เช่น posX:int = 0) ภาษา AC3 ยินยอมให้ทำเช่นนี้ได้ ซึ่งนับว่าสะดวกดี และทำให้โค้ดกะทัดรัดขึ้น

 

สมาชิกแบบพร็อพเพอร์ตีของคลาส ArrowRotate

สมาชิกแบบพร็อพเพอร์ตีช่วยให้โค้ดภายนอก (หมายถึงคลาสที่นำคลาสนี้ไปสร้างออพเจ็กต์หรือ client class หรือ caller class) สามารถเปลี่ยนแปลงค่าของออพเจ็กต์ได้ เราจะไม่ให้โค้ดภายนอกเข้าถึงฟิลด์โดยตรง แต่จะให้ติดต่อผ่านพร็อพเพอร์ตีแทน พร็อพเพอร์ตีของคลาส ArrowRotate มีสามตัว เป็นแบบเซตเตอร์ (setter ตัวรับข้อมูล) ทั้งสามตัวดังนี้

  • PosX : ใช้เซตตำแหน่งทางแนวนอนของออพเจ็กต์ลูกศร
  • PosY : ใช้เซตตำแหน่งทางแนวตั้งของออพเจ็กต์ลูกศร
  • Color : ใช้เซตสีของออพเจ็กต์ลูกศร

 

โปรดสังเกตว่าพร็อพเพอร์ตีต้องมีตัวจำกัดการเข้าถึงเป็น public และตามปรกติจะมีไทป์ตรงกันกับฟิลด์ที่มันทำหน้าที่เซตค่า (ยกตัวอย่างเช่นฟิลด์ posX มีไทป์เป็น int พร็อพเพอร์ตี PosX ก็จะมีไทป์เป็น int ด้วย)

 

สมาชิกแบบเมธอดของคลาส ArrowRotate

เมธอดคือโค้ดส่วนกำหนดการทำงานหรือส่วนประมวลผลของออพเจ็กต์ คลาส ArrowRotate มีเมธอดสามตัว รายละเอียดของเมธอดแต่ละตัวเป็นดังนี้

 

โค้ดข้างบนคือเมธอดซึ่งเป็นคอนสทรักเตอร์ จะทำงานโดยอัตโนมัติเมื่อโค้ดภายนอกสร้างออพเจ็กต์จากคลาสนี้ด้วยคำสั่ง new มีพารามิเตอร์หนึ่งตัวชื่อ bkg ทำหน้าที่รับค่าอ้างอิงพื้นที่วาดภาพจากโค้ดภายนอก คำสั่งบรรทัดที่สามทำหน้าที่นำค่าในพารามิเตอร์ไปใส่ในฟิลด์ชื่อเดียวกัน โปรดสังเกตว่า bkg ทางซ้ายคือฟิลด์สมาชิกของคลานี้ ส่วนตัวทางขวาคือตัวแปรพารามิเตอร์ แม้จะมีชื่อเดียวกันแต่ก็เป็นตัวแปรคนละตัวกัน

 

โค้ดข้างบนคือเมธอดชื่อ Show ทำหน้าที่สร้าง กำหนดค่าเริ่มต้น และแสดงภาพลูกศร บรรทัดที่ 25 สร้างออพเจ็กต์ลูกศรโดยใช้สีที่ระบุไว้ในพร็อพเพอร์ตี color บรรทัดที่ 26 นำลูกศรไปใส่ในฉากหลัง ซึ่งเป็นพื้นที่วาดภาพที่รับค่าอ้างอิงมาจากโค้ดภายนอก บรรทัดที่ 27 และ 28 กำหนดตำแหน่งของลูกศร บรรทัดที่ 29 และ 30 กำหนดขนาดของลูกศร บรรทัดที่ 31 เรียกเมธอด addEventListener (เป็นเมธอดของคลาส EventDispatcher) ทำหน้าที่กำหนดเมธอดบริการอีเวนต์ (event handler method) ในโค้ดนี้กำหนดให้เมธอด onEnterFrame ทำงานทุกครั้งที่มีการอัพเดตเฟรม

 

โค้ดข้างบนคือเมธอดชื่อ onEnterFrame ทำหน้าที่เป็นเมธอดบริการอีเวนต์ จะทำงานทุกครั้งที่เกิดเหตุการณ์ enterframe (อีเวนต์นี้เกิดเมื่อมีการอัพเดตพื้นที่แสดงภาพ flash movie อัพเดตพื้นที่แสดงภาพโดยอัตโนมัติอย่างต่อเนื่องในความถี่ที่กำหนดไว้ตอนคอมไพล์ ค่าโดยปริยายคือ 24 ครั้งต่อวินาที) เมธอดนี้มีตัวจำกัดการเข้าถึงเป็น private เพราะเราต้องการใช้งานภายในคลาสนี้เท่านั้น มีรีเทินไทป์เป็น void เพราะเราไม่ต้องการส่งค่าอะไรกลับไปให้ผู้เรียก

คำสั่งบรรทัดที่ 35 ประกาศตัวแปรชื่อ dx คำว่า mouseX คือพร็อพเพอร์ตีของคลาส DisplayObject ทำหน้าที่ให้ค่ำตำแหน่งทางแกน x ของเมาส์ คำสั่งบรรทัดที่ 36 ประกาศตัวแปรชื่อ dy และพร็อพเพอร์ตี mouseY ให้ค่าตำแหน่งทางแกน y คำสั่งบรรทัดที่ 37 ประกาศตัวแปรชื่อ radians คำว่า Math.atan2 คือคลาสทำหน้าที่คำนวณหามุมของ y และ x บรรทัดที่ 38 นำค่าใน radians มาคำนวณหาค่าการหมุนของลูกศร

 

โปรแกรมทดสอบการทำงาน

เมื่อนิยามคลาสต่างๆ ที่จำเป็นครบแล้ว เราต้องเขียนโปรแกรมเพื่อทดสอบคลาสเหล่านั้นด้วย เราจะนิยามคลาสชื่อ test ซึ่งทำหน้าที่นำคลาส ArrowRotate มาสร้างออพเจ็กต์ลูกศรสองตัว ตัวหนึ่งสีเหลืออยู่ที่ตำแหน่ง 100,100 และอีกตัวสีแดง อยู่ที่ตำแหน่ง 200,100

คลาส test ประหลาดกว่าคลาส Arrow และคลาส ArrowRotate เพราะเราไม่ต้องนำคลาส test ไปสร้างออพเจ็กต์ก่อนจึงจะใช้งานได้ แต่รันทามน์ (run-time) ของแฟลชจะเรียกคลาส test ให้ทำงานโดยอัตโนมัติ ที่เป็นเช่นนั้นเพราะเราวางคลาสนี้ไว้ในระดับบนสุดของเส้นทางคลาส (class path) ทำให้มันมีภาวะเหมือนเมธอด Main ในภาษาจาวาและ C#

 

โปรแกรมทดสอบการทำงาน

 

เมื่อกดปุ่ม Run โปรแกรม AFB2 จะเปิดหน้าต่างเว็บบราวเซอร์ (เช่น IE และ FireFox) แล้วแสดงหน้าเว็บซึ่งมีลูกศรสองอัน เมื่อลองเลื่อนเมาส์ดูจะเห็นว่าหัวลูกศรจะหันชี้ไปตามทิศทางของเมาส์พอยน์เตอร์ โปรดสังเกตว่าแม้ลูกศรทั้งสองจะถูกสร้างจากคลาสเดียวกัน แต่ก็เป็นออพเจ็กต์คนละตัวกัน จึงมีการทำงานที่เป็นอิสระต่อกัน

 

  ทดลองรันโปรแกรมที่ระบุในบทความนี้แบบออนไลน์

ท่านสามารถดาวน์โหลดซอร์สโค้ดของบทความนี้ได้จากเว็บไซต์ laploy.com (เลือกหัวข้อดาวน์โหลด ไฟล์ชื่อ AS3002.zip ภายในเป็นโปรเจ็กต์ที่สร้างจาก AFB2)

 

ซอร์สโค้ด

โค้ดทั้งหมดในบทความนี้เป็นแฟ้มข้อมูลตัวอักษรธรรมดา (plain text file)สามารถป้อนพิมพ์ด้วยโปรแกรมแก้ไขแฟ้มข้อมูลตัวอักษร (text editor) อะไรก็ได้ (เช่นโปรแกรม Notepad ในวินโดวส์) แล้วจัดเก็บไฟล์ไว้เป็นนามสกุล .as แต่ถ้าใช้โปรแกรม AFB2 ให้สร้างโปรเจ็กต์โดยเลือกเมนู New/ActionScript Project แล้วให้ใส่ไฟล์ test.as ไว้ระดับนอกสุด (ที่รูทโฟลเดอร์ของโปรเจ็กต์)

ให้สร้างโฟลเดอร์ชื่อ LoyClass แล้วใส่ไฟล์ Arrow และ ArrowRotate ไว้ในนั้น เนื่องจากชื่อโฟลเดอร์และชื่อแพคเกจจะต้องตรงกัน ดังนั้นหากท่านไม่ชอบชื่อ LoyClass และต้องการเปลี่ยนโฟลเดอร์เป็นชื่ออื่น ท่านต้องแก้ไขโค้ดทุกแห่งที่อ้างอิงถึงชื่อแพคเกจให้ตรงกันด้วย

ขณะป้อนพิมพ์โค้ดหากต้องการตรวจสอบข้อผิดพลาด ท่านไม่จำเป็นต้อง build หรือคอมไพล์โปรแกรมก่อน เพียงกดปุ่ม Save (ปุ่มรูปแผ่นดิสก์เก็ต) โปรแกรม AFB2 จะตรวจสอบและแจ้งความผิดพลาดขณะคอมไพล์ (compile-time error) ในหน้าต่าง Problems ให้โดยอัตโนมัติ เมื่อต้องการคอมไพล์ให้กดปุ่ม Run (ปุ่มกลมเขียวมีสามเหลี่ยมขาวภายใน) AFB2 จะคอมไพล์โปรแกรมและเก็บไฟล์ผลลัพธ์ไว้ในโฟลเดอร์ bin

 

หากท่านมีข้อสงสัยใดๆ โปรดโพสคำถามไว้ที่กระดานถาม-ตอบซึ่งอยู่ในเว็บไซต์เดียวกัน

 

เกี่ยวกับผู้เขียน
ลาภลอย วานิชอังกูร
ทำงานด้านคอมพิวเตอร์มานานกว่ายี่สิบปี เขียนโปรแกรมคล่องหลายภาษา เคยทำงานด้านคอมพิวเตอร์ที่ประเทศสหรัฐอเมริกา ประเทศเยอรมัน และประเทศสวิส เคยเป็นครูสอนวิชาคอมพิวเตอร์ เคยเป็นบรรณาธิการนิตยสารคอมพิวเตอร์ มีผลงานบทความ และตำราคอมพิวเตอร์จำนวนมาก ปัจจุบันทำหน้าที่เป็นผู้ให้คำปรึกษาด้าน .Net ให้แก่บริษัท Accenture ท่านสามารถติดต่อผู้เขียนได้ที่ กระดานบทความในเว็บไซต์ laploy.com และที่อีเมล laploy@gmail.com

       

Post a comment or leave a trackback: Trackback URL.

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: