Advanced AutoCAD : VBA (part 3)

จากที่ได้ลองเขียนโปรแกรมตัวอย่างกันไปแล้ว ในตอนที่ 2 ซึ่งเป็นโปรแกรมสั้น ๆ และ ยังไม่มีการโต้ตอบกับผู้ใช้ในการใช้งานเลย
สำหรับตอนนี้ จะได้กล่าวถึงการใช้ form เพื่อเป็นส่วนที่จะโต้ตอบกับ ผู้ใช้โปรแกรม ในระหว่างการใช้งาน เช่น เพื่อ รับข้อมูล รับค่าตัวเลือกที่ผู้ใช้กำหนด รับคำสั่งให้โปรแกรมทำงาน หรือ แสดงข้อความเมื่อ เกิดความผิดพลาดในโปรแกรม
หลังจากที่เข้าสู่ หน้า Visual Basic Editor แล้ว(ใช้คำสั่ง ใน AutoCAD) การเรียก form มาใช้งานสามารถทำได้โดยการใช้คำสั่ง insert จากเมนู Insert / Userform ดังรูป


หลังจากนั้น จะเกิด form เปล่า ๆ แสดงขึ้นมา โดยจะถูกกำหนดชื่อให้ว่า UserForm1 และ 2 , 3 ไปตามลำดับในกรณีเรียกมาใช้มากกว่า หนึ่งฟอร์ม ทางด้านซ้ายในช่อง Properties ซึ่งแสดงข้อมูลคุณสมบัติต่าง ๆ ของ form เช่น caption คือ ข้อความที่แสดงที่มุมบนซ้ายของฟอร์ม , BackColor คือสีของพื้นฟอร์ม และคุณสมบัติอื่น ๆ ซึ่ง สามารถเปลี่ยนแปลงได้ตามต้องการ


อีกสิ่งหนึ่งซึ่งเกิดขึ้นมาพร้อมกับ form คือ panel ที่มีชื่อว่า Toolbox ซึ่งบรรจุแทป ชื่อ control ซึ่งประกอบด้วย control แบบ ต่าง ๆ ที่สามารถนำมาใช้ คือนำมาวางในฟอร์มได้ เช่น ปุ่มกด , รูปภาพ , ตัวอักษรแสดงข้อความ , ช่องสำหรับคลิกเลือก ฯลฯ ซึ่งมีตัวอย่างในการนำออบเจคต่าง ๆ มาใช้ในฟอร์มดังรูป


 

 

 

 

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

Control ต่าง ๆ ที่จะต้องใช้ใน form นี้ ได้แก่ ปุ่มกด สั่งวาดเส้น ,ช่องรับข้อมูลค่า x จุดที่ 1 ,2 และรับค่า y จุดที่ 1,2 รวม 4 ช่อง ดังตัวอย่างด้านล่าง

หลักการทำงานของโปรแกรมคือ ใส่ค่า x1,y1,x2,y2 ทั้ง 4 ให้ครบ แล้วกดปุ่ม draw เพื่อให้วาดเส้นใน AutoCAD เหตุการณ์ที่สั่งให้โปรแกรมเริ่มทำงานคือ เมื่อมีกาคลิกที่ปุ่ม draw ดังนั้นเราจะเขียนโปรแกรมเมื่อมีการคลิกที่ปุ่ม draw โดยการดับเบิลคลิกที่ ปุ่ม draw ซึ่ง Visual Basic ทำการสร้างโค้ดให้ดังตัวอย่างรูปด้านบน

ให้พิมพ์โค้ด ของโปรแกรมดังนี้

อธิบายโค้ด

Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double

ส่วนนี้เป็นการกำหนดตัวแปรขึ้นมา โดยให้ตัวแปรชื่อ lineObj (กำหนดเอง) เป็นตัวแปรชนิด Acadline ซึ่งเป็นออบเจคที่ AutoCAD มีให้เพื่อการเขียนโปรแกรม
กำหนดตัวแปร startPoint และ endPoint เป็นตัวแปร แบบ array เก็บข้อมูล 3 ค่า (0,1,2) ซึ่งเก็บ ค่า x, y ,z ซึ่งคือ โคออร์ดิเนตนั่นเอง ค่าแต่ละค่าที่เก็บใน array ต้องเป็นตัวแปรชนิด Double เนื่องจาก คำสั่งในการวาดเส้น (Addline) ต้องการรับข้อมูลชนิด Double


startPoint(0) = TextBox1.Text: startPoint(1) = TextBox2.Text: startPoint(2) = 0
กำหนดให้ startPoint(0) ซึ่งคือช่องเก็บข้อมูลช่องแรกใน array ให้เก็บค่าจาก ช่องรับข้อมูล textbox1 จากฟอร์มซึ่งคือค่า x1
กำหนดให้ startPoint(1) ซึ่งคือช่องเก็บข้อมูลช่องที่สองใน array ให้เก็บค่าจาก ช่องรับข้อมูล textbox2 จากฟอร์มซึ่งคือค่า y1
กำหนดให้ startPoint(2) ซึ่งคือช่องเก็บข้อมูลช่องที่สามใน array ให้เท่ากับ 0 ซึ่งหมายถึง ค่า z1 = 0 นั่นเอง

endPoint(0) = TextBox3.Text: endPoint(1) = TextBox4.Text: endPoint(2) = 0
การเก็บค่าตัวแปร endPoint เหมือนกับ ตัวแปร startPoint แต่จะเก็บโคออร์ดิเนต x2,y2,z2

Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
กำหนดให้ตัวเแปร lineObj เกิดจาก ฟังก์ชัน addline จากจุดที่ 1 ไปจุดที่ 2 (ข้อมูล และรูปแบบ การใช้งาน ฟังก์ชันต่าง ๆ สามารถดูได้จาก help ที่AutoCAD ให้มา โดยเลือกที่เมนู Help/Developer Help

ZoomAll
สั่งให้ AutoCAD ซูมเพื่อให้เห็น ภาพทั้งหมด

Unload Me
ปิดฟอร์มที่แสดงอยู่ปัจจุบัน

End Sub จบโปรแกรมย่อย

ลองทดสอบการทำงานของโปรแกรม ได้ที่เมนู Run / Run Sub !> ป้อนค่า x1,y1 x2,y2 และกดปุ่ม Draw แล้วกลับไปดูที่ AutoCAD จะปรากฎ เส้นตามที่ต้องการ

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






Copyright 2000-2003 CADThai.com

Contact webmaster