VB=>Next4

Oct 09

การเข้าถึงฐานข้อมูล

หัวข้อพิเศษไอที, VB 6.0 No Comments »

การพัฒนาโปรแกรมประยุกต์ Visual Basic ส่วนใหญ่นำมาใช้กับฐานข้อมูล และการประยุกต์แบบ client / server ซึ่ง Visual Basic เป็นเครื่องมือที่อำนวยความสะดวกให้กับผู้พัฒนาโปรแกรมการเข้าถึงข้อมูล  

ความสามารถใหม่ที่สัมพันธ์กับฐานข้อมูลของ Visual Basic มีพื้นฐานจาก ActiveX Data Object (ADO) ซึ่งเป็นเทคโนโลยีที่ให้ผู้ใช้เข้าถึงฐานข้อมูลหรือแหล่งข้อมูล เมื่อมีการใช้ OLE DB provider ติดต่อกับแหล่งข้อมูล 

Visual Basic 6 มีวิธีการติดต่อกับฐานข้อมูลได้หลายวิธี 

ODBC 

ODBC ย่อมาจาก Open Data Connectivity และตั้งค่าการทำงานให้ผู้ใช้ติดต่อกับฐานข้อมูลทั้งภายในพื้นที่และระยะไกล Microsoft เสนอเทคโนโลยีที่เป็นวิธีการเข้าถึงฐานข้อมูลหลายประเภท เช่น dBase, Microsoft FoxPro, Microsoft Access, Microsoft SOL Server, Oracle รวมไฟล์ text แบบ comma-delimited ด้วยการใช้ API ร่วมกัน ส่วนที่โปรแกรมประยุกต์ทำงานกับ DLL เรียกว่า ODBC driver manager ซึ่งจะส่งคำสั่งไปที่ไดร์ฟเวอร์ ODBC ในการระบุฐานข้อมูลที่ผู้ใช้ต้องการ
สิ่งท้าทายของ ODBC เป็นการให้ติดต่อร่วมกับฐานข้อมูลประเภทต่างๆ ในทางทฤษฎี ผู้เขียนโปรแกรมประยุกต์สามารถเตรียมใช้ ODBC ติดต่อกับฐานข้อมูล Access และเปลี่ยนขนาดไปที่ฐานข้อมูล SOL Server โดยการเปลี่ยนไดร์ฟเวอร์ back-end ของ ODBC และมีคำสั่งไม่มาก การทำสิ่งเหล่านี้ได้เนื่องจากคำสั่งที่ส่งไปยังฐานข้อมูล คือ คำสั่งมาตรฐาน SQL ภาษา SOL (Structure Query Language) เป็นภาษาโปรแกรมที่ใช้กับฐานข้อมูล ในการปฏิบัติเลเยอร์ ODBC สามารถแปลงคำสั่ง SQL ให้เป็นภาษาเฉพาะของฐานข้อมูล ผู้เขียนโปรแกรม ODBC มักจะข้าม engine การแปลของ ODBC และส่งคำสั่งโดยตรงกับฐานข้อมูล
ODBC มีประสิทธิภาพเมื่อเปรียบเทียบกับเทคนิคการเข้าถึงข้อมูล ความได้เปรียบของ ODBC คือสนับสนุน API ทั้งประเภท 16 บิต และ 32 บิต ใน ODBC เวอร์ชัน 3 เพิ่มเทคนิคการบู๊ตให้ดีขึ้น เช่น การติดต่อแบบ pool ทำให้โปรแกรมประยุกต์ตอบสนองได้ดีขึ้น Microsoft Transaction Server ใช้การติดต่อแบบ pool เพื่อความเร็วในการเปิดการติดต่อโดย component ของ ActiveX ที่ทำงานอยู่ภายใต้ ODBC 

การใช้ ODBC ไม่ใช่เรื่องง่ายโดยเฉพาะอย่างยิ่งสำหรับผู้พัฒนาโปรแกรมด้วย Visual Basic กลุ่มของฟังก์ชัน API มีความซับซ้อนและถ้ามีความผิดพลาดเกิดขึ้นอาจจะให้โปรแกรมประยุกต์เสียหาย ด้วยเหตุนี้ผู้พัฒนาโปรแกรม Visual Basic น้อยมากที่จะเขียนคำสั่งเรียกฟังก์ชัน ODBC โดยตรง เทคนิคการแก้ไขข้อมูลอื่น ๆ ส่วนใหญ่ให้ Visual Basic ใช้ไดร์ฟเวอร์ ODBC ในฐานะเลเยอร์กลาง ในบางครั้งอาจใช้เทคนิคอื่น ๆ กับการเรียก API โดยตรง แต่ไม่สามารถใช้วิธีการนี้กับ ADO ได้ถึงแม้ว่าภายใน ADO จะใช้ไดร์ฟเวอร์ ODBC 

แนวคิดพื้นฐานของเทคโนโลยี เช่น เมื่อมีการทำงานกับ ADO มีความเกี่ยวข้องกับ Data Source Name (DSN) โดย DSN เป็นกลุ่มของค่าที่โปรแกรมประยุกต์ในการติดต่อกับฐานข้อมูล โดยทั่วไปจะรวมถึงชื่อไดร์ฟเวอร์ของ ODBC ที่ต้องการใช้ ชื่อของไดร์ฟเวอร์เป็น host ของแม่ข่ายฐานข้อมูล (การทำงาน กับ Client-Server engine เช่น SQL Server หรือ Oracle), ชื่อพาร์ทของฐานข้อมูลที่เจาะจง, เวลาสิ้นสุดของการติดต่อ, ชื่อของการเรียกเวิร์คสเตชัน หรือโปรแกรมประยุกต์ เป็นต้น 

การสร้าง DSN ทำได้หลายวิธี ทั้งภายในและภายนอก Visual Basic ศูนย์กลางของคำสั่ง ODBC อยู่ใน control Panel ของระบบปฏิบัติการ Windows ที่ให้ผู้ใช้ติดต่อสร้าง DSN และคอนฟิก ODBC ซึ่งมี DSN หลายประเภท DSN ของผู้ใช้จะเก็บไว้ใน Registry ของระบบ และสามารถใช้ได้เฉพาะผู้ใช้ปัจจุบันโดยไม่สามารถแบ่งให้ผู้ใดได้ DSN ของระบบเก็บไว้ใน Registry เช่นกัน และสามารถเห็นได้โดยผู้ใช้อื่น ๆ รวมถึงแม่ข่าย Windows NT ไฟล์ DSN เก็บในไฟล์ .dsn และสามารถใช้ร่วมกันโดยผู้ใช้ทั้งหมดไฟล์ DSN สามารถคัดลอกได้ง่าย ทำให้การติดตั้งทำได้สะดวก อีกด้านหนึ่งโปรแกรมประยุกต์ต้องการที่เก็บ DSN ต้องใช้คำสั่งที่ระบุพาร์ทของไฟล์ DSN ที่สมบูรณ์ 

การทำงานกับ ODBC โดยไม่เกี่ยวข้องกับ DSN ทำได้โดยการให้สารสนเทศที่ต้องการสำหรับการติดต่อ เช่น ไดร์ฟเวอร์, ชื่อฐานข้อมูล และพาร์ทเป็นต้น ให้ถูกต้องในคำสั่ง วิธีนี้เรียกว่า DSN-Less Connections ซึ่งมีประสิทธิภาพเพราะประหยัดของไดร์ฟเวอร์ ODBC ในการเดินทางไปที่ Registry หรือไฟล์ DSN แต่วิธีการนี้ ผู้พัฒนาโปรแกรมต้องทำงานมากขึ้น 

แท็บ 3 แท็บแรกของไดอะล๊อกบ๊อกซ์ ODBC ใน control Panel ให้ผู้ใช้สร้าง, ลบ และคอนฟิก DSN ทุกประเภท การสร้าง DSN ต้องเปิด ไดอะล๊อกบ๊อกซ์ ที่เกี่ยวข้องหลายชุด 

แท็บ Driver แสดงไดร์ฟเวอร์ ODBC ที่มีการติดตั้งและเปรียบเทียบหมายเลขของเวอร์ชัน Visual Basic 6 มาพร้อมกับไดร์ฟเวอร์ ODBC หลายตัว แต่สามารถซื้อไดร์ฟเวอร์จากผู้ขายรายอื่น 

แท็บ Tracing ของ ODBC Data Source Administrator กำหนดพาร์ทของไฟล์ล๊อกในการทำงานของ ODBC ซึ่งการป้องกันไดร์ฟเวอร์ เมื่อมีการหาข้อผิดพลาดโปรแกรมประยุกต์แบบ ODBC 

แท็บ Connection Pool ให้ผู้ใช้สามารถใช้หรือยกเลิก Connection Pool สำหรับแต่ละไดร์ฟเวอร์ของ ODBC ตามปกติไม่ค่อยมีการเปลี่ยนแปลงการตั้งค่า และเก็บ About ให้ผู้ใช้ตรวจสอบตำแหน่งและเวอร์ชันของ DLL ของระบบย่อย ODBC 

DAO 

DAO หรือ Data Access Object เป็นหัวใจของโปรแกรมประยุกต์ Visual Basic 3 ในพัฒนาการประยุกต์กับฐานข้อมูล DAO เป็นการติดต่อแบบ Object-oriented ไปยัง Microsoft Jet ที่เป็น engine ที่มีความสามารถสูง ผู้พัฒนาโปรแกรมสามารถออกแบบฐานข้อมูล MDB ด้วย Access และใช้ DAO จากโปรแกรมประยุกต์ Visual Basic ในการเปิดฐานข้อมูล เพิ่มและลบเรคคอร์ด และจัดการทรานแซคชัน สิ่งที่ดีที่สุดของ DAO คือไม่จำกัดผู้ใช้กับ Jet database เพราะผู้ใช้สามารถเปิดฐานข้อมูลทุกชนิดที่มีไดร์ฟเวอร์ ODBC ได้โดยตรงหรือผู้ใช้สามารถใช้ Jet attached table ซึ่งเป็น table เสมือนที่ปรากฏตามฐานข้อมูล MDB แต่การดึงและเก็บข้อมูลจริงในแหล่งอื่นของ ODBC 

ถ้าผู้ใช้สามารถใช้ DAO เข้าถึงแหล่ง non-jet ผู้ใช้สามารถเห็นกลไกของฐานข้อมูล Access เช่น โปรแกรมประยุกต์ไม่ใช่ฐานข้อมูล Access ผู้ใช้ยังคงโหลด DLL ของ Jet engine เข้าสู่หน่วยความจำ DAO ไม่สามารถให้ผู้ใช้ทำงานกับฟังก์ชัน API ของ ODBC โดยตรง เช่น การทำงานแบบผลลัพธ์หลายชุด, การคิวรี่แบบ asynchronous หรือการติดต่อด้วย DAO
Data control เป็นตัว control ที่ให้ผู้ใช้เชื่อมตัว control 1 ตัวหรือมากกว่าบนฟอร์มกับแหล่งข้อมูลและมีปุ่ม navigator สำหรับเลื่อนเรคคอร์ดของ table ที่มีการติดต่อ Data control ดูเหมือนเป็นเครื่องมือที่ดีมาก เพราะทำให้สามารถทำการอินเตอร์เฟซ กับผู้ใช้ได้รวดเร็วแต่พบว่า Data control มีข้อจำกัดอยู่หลายอย่าง เมื่อพิจารณาสมรรถนะ Data control มีข้อเสียเปรียบสำคัญประการหนึ่ง คือ ผูกติดการประยุกต์ด้าน Front-end กับข้อมูลในฐานข้อมูล ถ้ามีการเปลี่ยนไปใช้เข้าถึงฐานข้อมูลอื่น จะต้องมีทบทวนฟอร์ม ทั้งในโปรแกรมประยุกต์ ถ้าต้องการเพิ่ม Validation rule ที่ซับซ้อนไปยังฟิลด์ ในฐานข้อมูล ต้องมีการเพิ่มคำสั่งในโมดูลเดียวของโปรแกรมทำให้มีผลกับสถาปัตยกรรม 2-tier และไม่สามารถใช้ได้กับสถาปัตยกรรม 3-tier ซึ่งมีเลเยอร์ชั้นกลางระหว่างโปรแกรมประยุกต์ กับฐานข้อมูล ที่ให้บริการ เช่น การตรวจสอบข้อมูล กฎทางธุรกิจ ความสมดุลของภาระงาน และความปลอดภัย 

Visual Basic 4 ไปปรับปรุง DAO เวอร์ชัน 3 ซึ่งมีส่วน DLL พิเศษ ที่ให้ผู้พัฒนาโปรแกรมด้วยเทคโนโลยี 32 บิต สามารถเข้าถึงฐานข้อมูล 16 บิต Visual Basic 5 ได้ปรับปรุงเป็น DAO 3.54 และ Visual Basic ได้ปรับปรุงเป็น DAO 3.51 และ DAO เวอร์ชัน 4 ได้ปรับปรุงสำหรับ Microsoft Office 2000 

RDO 

RDO หรือ Remote Data Objects เป็นความพยายามครั้งแรกของ Microsoft ในการรวมความง่ายของ DAO กับความสามารถระดับสูงของ Direct ODBC API Programming โดย RDO เป็นแบบจำลองอ๊อบเจคที่ไม่ชัดเจน ภายหลัง DAO แต่ใช้การข้าม Jet engine และ DLL ของ DAO และทำงานโดยตรงกับไดร์ฟเวอร์ ODBC โปรแกรมประยุกต์ที่มาจาก RDO โหลดเฉพาะ DLL จำนวนหนึ่งแทนการใช้ทรัพยากรจำนวนมากของ Jet engine โดยสิ่งสำคัญอยู่ที่การออกแบบเฉพาะของ RDO ให้ทำงานกับทรัพยากรของ ODBC ทำให้สามรถทำงานที่ไม่สามารถเข้าถึงได้โดย DAO เทคโนโลยีของ RDO เป็นเทคโนโลยี 32 บิต จึงไม่สามารถใช้ได้จากโปรแกรมประยุกต์ 16 บิต 

RDO1 ได้รับการแนะนำใน Visual Basic 4 และ engine มีการปรับปรุงใน Visual Basic เป็น RDO2 เวอร์ชันล่าสุดเป็นผลิตภัณฑ์ที่สมบูรณ์และสนับสนุนแบบจำลองการโปรแกรมใหม่ที่เป็นแบบ event ซึ่งมีประโยชน์กับการทำงานแบบ asynchronous การพัฒนา RDO ดูเหมือนได้หยุดลง เนื่องจาก Visual Basic 6 ยังคงใช้เวอร์ชัน 2 และไม่มีการปรับปรุงเพิ่มเติมจากเวอร์ชันที่มาพร้อมกับ Visual Basic 5 

RDO1 และ RDO2 มาพร้อมกับ Remote Data control ซึ่งทำงานเหมือนกับ Data control และให้ผู้ใช้เชื่อมตัว control กับแหล่งข้อมูลระยะไกล จึงทำให้ Remote Data control มีข้อดีและข้อเสียเหมือนกับ Data control รวมถึงปัญหากับสถาปัตยกรรมแบบ n-tier 

ODBC Direct 

Visual Basic 5 ได้รวมเทคโนโลยีการเข้าถึงข้อมูลอีกแบบ ชื่อ ODBC Direct ซึ่งยินยอมให้ผู้พัฒนาโปรแกรมประยุกต์ RDO ด้วยไวยากรณ์ DAO โดย ODBC Direct ทำหน้าที่ในฐานะเทคนิคการส่งผ่านที่การเขียนโปรแกรม Visual Basic ย้ายการประยุกต์ DAO/Jet ไปยังสถาปัตยกรรม client/server ในทางทฤษฎีเป็นการเปลี่ยนคุณสมบัติเพียงเล็กน้อย ซึ่งโปรแกรม DAO ที่เก็บข้อมูลใน Jet database จะแปลงไปเป็นการประยุกต์แบบ client/server ในการติดต่อแหล่ง ODBC ในขณะที่ ODBC Direct ไม่ได้รับการพิจารณาในฐานะเทคโนโลยี แต่เหมือนเป็นวิธีการที่ทำให้ประหยัดเวลาการแปลงโปรแกรมประยุกต์ส่วนเพิ่มใหม่ของ RDO2 ส่วนใหญ่ เช่น แบบจำลองโปรแกรมแบบ event ไม่สามารถใช้ ODBC Direct เพราะคำสั่งเข้าได้กับ DAO แต่พื้นฐานคล้ายกับ RDO คือ ODBC Direct เป็นการประยุกต์ 32 บิต 

OLE DB 

OLE DB เป็นเทคโนโลยีการเข้าถึงข้อมูลระดับล่างที่ Microsoft ผู้พัฒนาให้เข้ามาแทนที่ ODBC ในฐานะวิธีการหลักในการติดต่อกับฐานข้อมูล ส่วนของ OLE DB ที่เทียบได้กับไดร์ฟเวอร์ของ ODBC คือ OLE DB provider ซึ่งทำงานเป็นสะพานระหว่างโปรแกรมประยุกต์กับฐานข้อมูล OLE DB เป็นเทคโนโลยีที่ใหม่ แต่ OLE DB provider พบได้ในฐานข้อมูลจำนวนมาก ถึงแม้ว่า ODBC และ OLE DB มีความคล้ายคลึงกัน แต่มีข้อแตกต่างกัน คือ OLE DB มีพื้นฐานจาก COM ซึ่งเป็นสถาปัตยกรรมที่ให้การย้ายปริมาณข้อมูลจำนวนมากผ่านเครือข่าย ประการต่อมา OLE DB ให้ตัวเองทำหน้าที่ในการติดต่อกับแหล่งข้อมูล ไม่เหมือนกับไดร์ฟเวอร์ ODBC ที่เป็นความสัมพันธ์กับฐานข้อมูล หรือ ISAM ( Indexed sequential access mode)
OLE DB เป็นยุทธศาสตร์ Microsoft’s Universal Data Access ซึ่งเป็นการให้ผู้ใช้อ่านและประมวลข้อมูลโดยไม่ต้องแปลง และนำเข้ามายังฐานข้อมูลแบบแผน การใช้ OLE DB provider ทำให้ผู้ใช้สามารถประมวลข้อมูลใน e-mail, message, HTML, กระดาษทำการและเอกสารข้อความ และแหล่งข้อมูลภายนอก Visual Basic 6 มี provider ของ Microsoft Jet, SOL Server, FoxPro, ไฟล์ข้อความและฐานข้อมูล Oracle สำหรับ OLE DB provider อื่น ๆ สามารถดาวน์โหลดจากเว็บของ Microsoft 

การส่งผ่านระหว่าง ODBC กับ OLE DB เป็นการใช้ OLE DB provider เฉพาะชื่อ MSDASQL ที่รู้จักในชื่อ Kagera ที่ทำหน้าที่เป็นสะพานเชื่อมกับแหล่งต่าง ๆ ของ ODBC แทนที่การติดต่อโดยตรงกับฐานข้อมูล ผู้ใช้สามารถใช้ provider พิเศษในการติดต่อกับไดร์ฟเวอร์ของ ODBC ซึ่งอ่านและเขียนข้อมูลในฐานข้อมูล การใช้เลเยอร์ส่วนเพิ่มนี้มีผลต่อสมรรถนะแต่น่าจะเป็นปัญหาในระยะสั้น 

ADO 

ADO หรือ ActiveX Data Object เป็นการติดต่อระดับสูงของ OLE DB มีบทบาทใกล้เคียง RDO ในทำงานกับ API ของ ODBC ในขณะที่ OLE DB คล้ายกับ API ของ ODBC ที่เป็นการติดต่อระดับล่างที่ไม่สามารถเข้าถึงได้ง่ายจากภาษาระดับสูง เช่น Visual Basic เป็นต้น ADO สร้างบน OLE DB เพื่อให้การทำงานที่ไม่ให้ติดต่อโดยตรง ODBC หรือทำให้ผู้ใช้เขียนคำสั่งที่มีความสามารถ ADO สามารถเปรียบเทียบความสามารถกับ ADO คือทั้งคู่สามารถสร้างคิวรี่แบบ asynchronous และการติดต่อ ADO เพิ่มส่วนใหญ่จำนวนมาก เช่น file-based และ stand-alone Recordset, hierarchical Recordset และอื่น ๆ 

ส่วนสำคัญของ ADO คือส่วนขยาย แทนที่จะซับซ้อนและลำดับชั้นของอ๊อบเจคที่แข็งตัว ซึ่ง DAO และ RDO เป็นอยู่ ADO ประกอบด้วยอ๊อบเจคจำนวนน้อยที่สามารถรวมได้ในหลายวิธีส่วนใหญ่สามารถเพิ่ม ADO ในรูปแบบพิเศษ ของ OLE DB provider เช่น Data Shape provider ซึ่งเสนออ๊อบเจค hierarchical Recordset ไปให้ provider อื่น ๆ Microsoft กำลังสร้างส่วนใหม่ให้ ADO ในรูปแบบพิเศษของไลบรารีแบบแยกที่เชื่อมแบบ dynamic ไปยังแกนไลบรารีรี่ของ ADO เช่น ไลบรารี ADO 2.1 ได้สนับสนุน Data Definition Language และความปลอดภัย (ในการสร้าง table ของฐานข้อมูล, ผู้ใช้ และกลุ่มของผู้ใช้), Jet replica และ Recordset แบบหลายมิติ เพราะตรงข้ามกับ DAO และ RDO ซึ่งจะฝัง DLL ขนาดใหญ่ในทุกส่วน 

ส่วนพิเศษของ ADO ที่ผู้ใช้สามารถใช้ภายในเพ็จ HTML ใน browser เช่น Internet explorer หรือด้านแม่ข่ายด้วย Active Server Page บน Internet information Server ระบบย่อยของ ADO ระบบหนึ่งชื่อ Remote Data Service ให้ผู้ใช้ส่งกลุ่มของเรคคอร์ดไปยัง browser ของลูกข่าย หรือ component ของ active COM บนอินเตอร์เน็ต 

Oct 09

Drag and Drop

หัวข้อพิเศษไอที, VB 6.0 No Comments »

Visual Basic มีความสามารถ drag-and-drop ตั้งแต่เวอร์ชันแรก ๆ แต่ใน Visual Basic 5 ได้เพิ่มกลุ่มของคุณสมบัติ, เมธอด และ event ที่ใช้พัฒนาเครื่องมือสำหรับ OLE มาตรฐานและการ drag-and-drop ข้ามโปรแกรมประยุกต์ 

Automatic Drag-and-Drop 

โดยพื้นฐาน ตัว control สามารถทำงานเป็นต้นทางหรือปลายทางของการ drag-and-drop และมีการทำงานเป็น 2 โหมด คือ automatic หรือ manual ในโหมด automatic การตั้งค่าคุณสมบัติในการออกแบบหรือเรียกใช้และให้ Visual Basic ทำทุกอย่างให้ส่วนโหมด manual เป็นการตอบสนอง event ที่เกิดขึ้นขณะที่มีการ drag ซึ่งทำให้มีการควบคุมกระบวนการที่ดีกว่า 

ถ้าตัว control สนับสนุนการ drag-and-drop แบบอัตโนมัติ ให้ตั้งค่าคุณสมบัติ OLEDragMode หรือ OLEDropMode (หรือทั้ง 2 ค่า) เป็น vbAutomatic เช่น ถ้าต้องการให้โปรแกรมสนับสนุนการ drag-and-drop ข้อความ RTF ให้วาง Rich Text box บนฟอร์ม และตั้งค่าคุณสมบัติ OLEDragMode และ OLEDropMode เป็น vbAutomatic จะทำให้สามารถ drag ข้อความไปที่หรือมาจาก Microsoft Word, WordPad หรือโปรแกรมประมวลผลคำต่าง ๆ ได้ และสามารถ drag-and-drop กับ Rich text box อื่นรวมถึง Text box และ Mask ed box 

Manual Drag-and-Drop 

การ drag-and-drop แบบจัดการเองหรือ manual ต้องการคำสั่งใน event procedure สำหรับ event ต่าง ๆ ที่เกิดขึ้น ทั้งตัว control ต้นทางและปลายทางตามรูป ได้สรุปการเกิด event ของการ drag-and-drop
ตามโปรแกรมตัวอย่างที่ ประกอบด้วย Rich text box ซึ่งทำหน้าที่เป็นต้นทางหรือปลายทางของการ drag-and-drop บนฟอร์มมี List box ที่สามารถวางข้อความได้ ทั้งจาก Rich text box หรือแหล่งอื่น ๆ ถ้ามีการวางข้อความใน List box จะมีการตรวจข้อความ ค้นหาคำที่ไม่ซ้ำ เรียงลำดับ และแสดงผลให้ผู้ใช้โดย List box 

Initiated การทำงาน Drag-and-Drop 

การทำให้ตัว control สามารถ Initiate การทำงานดังกล่าวต้องตั้งค่าคุณสมบัติ OLEDragMode เป็น vbManual และเริ่มกระบวนการโดยการกระตุ้นเมธอด OLEDrag ซึ่งมักจะใช้ MouseDown event 

Private Sub rtfText_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
   ’ เริ่มต้นการ drag ถ้ามีการกดเมาส์ปุ่มชวา
   If Button = 2 Then rtfText.OLEDrag
End Sub 

เมื่อการ drag จากเมธอด OLEDrag จะเกิด OLEStartDrag event ที่ตัว control ต้นทาง ซึ่ง event นี้จะรับอ๊อบเจค DataObject และพารามิเตอร์ AllowedEffects โดยการเก็บข้อมูลในอ๊อบเจคใช้เมธอด SetData 

Private Sub rtfText_OLEStartDrag(Data As RichTextLib.DataObject, AllowedEffects As Long)
   ’ ใช้การเลือกข้อความหรือข้อความทั้งหมดถ้าไม่มีการเลือก
   If chkLoadOnDemand Then
      ’ แจ้งถึงรูปแบบที่ตัว control สนับสนุน
      Data.SetData , vbCFRTF
      Data.SetData , vbCFText
   ElseIf rtfText.SelLength Then
      Data.SetData rtfText.SelRTF, vbCFRTF
      Data.SetData rtfText.SelText, vbCFText
   Else
      Data.SetData rtfText.TextRTF, vbCFRTF
      Data.SetData rtfText.text, vbCFText
   End If
   AllowedEffects = vbDropEffectMove Or vbDropEffectCopy
End Sub 

ควรกำหนดค่าให้พารามิเตอร์ AllwedEffects เพื่อระบุผลที่ต้องการให้สนับสนุน การทำงาน drag-and-drop โดยตั้งค่าเป็น 1-vbDropEffectCopy หรือ 2-vbDropEffectMove หรือ รวมทั้งหมดถ้าต้องการสนับสนุนผลทั้งสองแบบ 

This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

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 / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s