Delphi มอบส่วนประกอบ DBGrid อันทรงพลังเพื่ออำนวยความสะดวกในการออกแบบแอปพลิเคชันฐานข้อมูล แต่ถ้าเราใช้เฉพาะส่วนประกอบ DBGrid แต่ละโฟกัส (Grid) จะเป็นเพียงกล่องแก้ไขข้อความธรรมดา ซึ่งไม่สะดวกสำหรับผู้ใช้ในการป้อนข้อมูล นอกจากนี้ Delphi ยังมีส่วนประกอบข้อมูลอื่นๆ เพื่ออำนวยความสะดวกในการป้อนข้อมูลของผู้ใช้ เช่น DBComboBox, DBCheckBox และส่วนประกอบอื่นๆ แต่ส่วนประกอบเหล่านี้ไม่ได้มีประสิทธิภาพเท่ากับ DBGrid Delphi เช่น Visual FoxPRo สามารถอนุญาตให้ตารางโฟกัสใน DBGrid เป็นส่วนประกอบข้อมูลภาพอื่นๆ เพื่อความสะดวกของผู้ใช้ได้หรือไม่ ในความเป็นจริง เราสามารถบรรลุสิ่งนี้ได้โดยการแทรกส่วนประกอบภาพอื่นๆ ลงใน DBGrid
กลไกภายในของ Delphi สำหรับการประมวลผล DBGrid คือการลอยส่วนประกอบบนกริด - ส่วนประกอบ DBEdit ตารางที่คุณป้อนข้อมูลจริงๆ แล้วเป็นส่วนประกอบ DBEdit แบบลอย และพื้นที่อื่นๆ ที่ไม่ได้รับการโฟกัสเป็นเพียงรูปภาพ ดังนั้น การแทรกองค์ประกอบภาพอื่นๆ ลงใน DBGrid ก็เหมือนกับการลอยองค์ประกอบภาพบนตาราง ดังนั้นส่วนประกอบใดๆ จาก DbCheckBox แบบธรรมดาไปจนถึงกล่องโต้ตอบที่ซับซ้อน จึงสามารถแทรกลงใน DBGrid ได้ ต่อไปนี้เป็นขั้นตอนเกี่ยวกับวิธีการแทรกคอมโพเนนต์ DBComboBox ลงใน DBGrid คุณสามารถแทรกคอมโพเนนต์อื่น ๆ ในลักษณะเดียวกัน
1. สร้างโครงการใหม่ใน Delphi 4.0
2. ลากสี่องค์ประกอบของแหล่งข้อมูลและตารางบนบอร์ดส่วนประกอบการเข้าถึงข้อมูลและ DBGrid และ DBComboBox บนบอร์ดส่วนประกอบการควบคุมข้อมูลไปที่ Form1 ตามลำดับ
3. กำหนดคุณสมบัติของแต่ละส่วนประกอบดังนี้:
โรงงานการตั้งค่าแอตทริบิวต์วัตถุ rcf1
คำอธิบายแบบฟอร์ม 1 'ตัวอย่างการแทรกส่วนประกอบ SpinEdit ลงใน DBGrid'
แหล่งข้อมูล1 ชุดข้อมูล Table1
ตารางที่ 1 ชื่อฐานข้อมูล DBDEMOS
ชื่อตาราง 'teacher.DBF'
ใช้งานจริง
แหล่งข้อมูล DBGrid1 แหล่งข้อมูล1
DBComboBox1 DataField เพศ
แหล่งข้อมูล แหล่งข้อมูล1
เท็จที่มองเห็นได้
รายการสตริง 'ชาย' | 'หญิง'
หมายเหตุ: ฉันใช้ Teacher.dbf ที่นี่ ซึ่งแสดงถึงเพศของคณาจารย์และเจ้าหน้าที่ ซึ่งต้องเป็น "ชาย" หรือ "หญิง" เท่านั้น
4. เหตุการณ์ DrawDataCell คือการวาดเซลล์ เมื่อฟิลด์ที่สอดคล้องกับตารางที่โฟกัสสอดคล้องกับฟิลด์ที่สอดคล้องกับกล่องคำสั่งผสม ให้ย้ายกล่องคำสั่งผสมไปยังตารางที่โฟกัส และ
ทำให้กล่องคำสั่งผสมมองเห็นได้เพื่อให้บรรลุการทำงานของการแสดง DBComboBox บนคอลัมน์ที่ระบุของ DBGrid ตั้งค่าเหตุการณ์ OnDrawDataCell ของ DBGrid1 เป็นดังนี้:
ขั้นตอน TForm1.DBGrid1DrawDataCell (ผู้ส่ง: TObject; const Rect: TRect; ฟิลด์: TField; สถานะ: TGridDrawState);
เริ่ม
ถ้า (gdFocused ในสถานะ) แล้ว
เริ่ม
ถ้า (Field.FieldName = DBComboBox1.DataField ) แล้ว
เริ่ม
DBComboBox1.Left := Rect.Left + DBGrid1.Left;
DBComboBox1.Top := Rect.Top + DBGrid1.top;
DBComboBox1.Width := Rect.Right - Rect.Left;
DBComboBox1.Height := Rect.Bottom - Rect.Top;
DBComboBox1.Visible := จริง;
จบ;
จบ;
จบ;
5. DBComboBox จะไม่แสดงเมื่อเซลล์ที่ระบุใน DBGrid ไม่ได้รับโฟกัส ตั้งค่าเหตุการณ์ OnColExit ของ DBGrid1 ดังนี้:
ขั้นตอน TForm1.DBGrid1ColExit (ผู้ส่ง: TObject);
เริ่ม
ถ้า DBGrid1.SelectedField.FieldName = DBComboBox1.DataField แล้ว
เริ่ม
DBComboBox1.Visible := เท็จ;
จบ;
จบ;
6. เมื่อคอลัมน์ที่ระบุของ DBGrid ได้รับโฟกัส เหตุการณ์ DrawDataCell จะดึงเฉพาะเซลล์และแสดง DBComboBox แต่ DBComboBox ไม่ได้รับการโฟกัส และการป้อนข้อมูลยังคงดำเนินการบนเซลล์ เรียกใช้ฟังก์ชัน SendMessage Windows API ในเหตุการณ์ KeyPress ของ DBGrid1 เพื่อถ่ายโอนข้อมูลที่ป้อนเข้าไปยัง DBComboBox จึงบรรลุการป้อนข้อมูลบน DBComboBox ดังนั้นให้ตั้งค่าเหตุการณ์ KeyPress ดังนี้:
ขั้นตอน TForm1.DBGrid1KeyPress (ผู้ส่ง: TObject; คีย์ var: Char);
เริ่ม
ถ้า (คีย์ < > ch(9)) แล้ว
เริ่ม
ถ้า (DBGrid1.SelectedField.FieldName =DBComboBox1.DataField) แล้ว
เริ่ม
DBComboBox1.SetFocus;
ส่งข้อความ (DBComboBox1.Handle, WM_Char, Word (คีย์), 0);
จบ;
จบ;
จบ;
โปรแกรมผ่านการดีบักภายใต้ Windows 98 ของจีนและ Delphi 4.015 ฉันหวังว่าบทความนี้จะช่วยให้คุณพัฒนาแอปพลิเคชันฐานข้อมูลได้สะดวกและรวดเร็วยิ่งขึ้น