ตัวอย่างโค้ด: คุณรู้จัก Delphi ดีจริง ๆ หรือไม่?
ขั้นตอนการแก้ไขขั้นตอน (strgrid: TStringGrid; ขั้นตอน: TStep);
var
sValue, sField: สตริง;
คลาสตัวแก้ไข: TStepEditorClass;
บรรณาธิการ: TStepEditor;
เริ่ม
sField := strgrid.Cells[0, strgrid.Selection.Top];
sValue := strgrid.Cells[1, strgrid.Selection.Top];
EditorClass := EditorClassList.Editors[ sField ];
ตัวแก้ไข := EditorClass.Create;
Editor.Field := sField;
Editor.Step := ขั้นตอน;
Editor.Edit(sValue);
บรรณาธิการฟรี;
strgrid.Cells[ 1, strgrid.Selection.Top ] := sValue;
จบ;
EditorClass คือคลาสของคลาส นั่นคือ คลาสของคลาส
ตัวอย่างเช่น
TFormClass = คลาสของ TForm;
แต่มันแตกต่างจาก: TFormClass = Class(TForm); นี่เป็นสองแนวคิด!
EditorClassList เก็บรายการคลาส
ตัวแก้ไข := EditorClass.Create;
Create เป็นวิธีการเรียน ไม่ใช่วิธีวัตถุ ดังนั้นอินสแตนซ์ของ EditorClass จึงสามารถสร้างได้จาก EditorClass
เติมเงิน:
TStepEditor = คลาส (TObject)
-
จบ;
TStepEditorClass = คลาสของ TStepEditor;
เหตุใด Object Inspector จึงสามารถจัดเตรียมสภาพแวดล้อมการแก้ไขที่สะดวกได้
เหตุใดฟิลด์ที่ต่างกันจึงมีค่าการเลือกที่แตกต่างกัน วิธีการยืนยันที่แตกต่างกัน และกล่องแก้ไขป๊อปอัป
ไม่เหมือนกันเหรอ? เนื่องจากมีการลงทะเบียนผู้แก้ไขทรัพย์สินที่แตกต่างกันตามประเภทฟิลด์ที่แตกต่างกัน
การลดความซับซ้อนของฟังก์ชันการลงทะเบียนตัวแก้ไขคุณสมบัติที่ Delphi ให้มาสามารถอธิบายได้ดังต่อไปนี้:
RegisteryPropertyEditor( PropertyFieldType, EditorClass );
^นี่คือชื่อประเภท เช่น Bool, Integer, ...etc
^นี่คือชื่อคลาสของเอดิเตอร์ที่เกี่ยวข้อง โปรดทราบว่าไม่ใช่คำอธิบายอักขระของชื่อคลาส
เมื่อทำงานจริง เมื่อผู้ใช้คลิกฟิลด์ใน Object Inspector
Delphi ค้นหาคลาสตัวแก้ไขภายในที่สอดคล้องกับประเภทฟิลด์ จากนั้นสร้างอินสแตนซ์ของคลาสจากคลาสที่พบ
ดำเนินการที่เกี่ยวข้อง (ตัดสินใจว่ามีกล่องดรอปดาวน์หรือไม่ มีปุ่มหรือไม่ ฯลฯ )
บทความเพิ่มเติม