มีวิธีเพิ่มองค์ประกอบมากกว่าหนึ่งองค์ประกอบในตัวแก้ไข IVTEditLink ของ VirtualTreeView หรือไม่
มากกว่าหนึ่งองค์ประกอบสำหรับโปรแกรมแก้ไข IVTEditLink ใน VirtualTreeView
คำตอบ (2)
ฉันจะใช้แบบฟอร์มสแตนด์อโลนเป็นคอนเทนเนอร์ตัวแก้ไขและทิ้งแนวคิด IVTEditLink
ไว้เพื่อจุดประสงค์นี้เนื่องจาก:
- ถ้าคุณใช้เช่น
TPanel
ในฐานะคอนเทนเนอร์คอมโพเนนต์ของตัวแก้ไข คุณควรพิจารณาเลือกParent
ที่ถูกต้องของTPanel
; ตัวแก้ไขที่มีหลายฟิลด์อาจซ้อนทับกับสี่เหลี่ยมขอบเขตของแผนผังเสมือนของคุณหรือแม้แต่ขอบเขตของแบบฟอร์มของคุณ - การใช้เหตุการณ์
OnDeactivate
กับแบบฟอร์มนั้นง่ายกว่าการใช้องค์ประกอบTPanel
มาก - คุณสามารถละทิ้งแนวคิด
IVTEditLink
ได้เลยเพราะมันสูญเสียความรู้สึกที่นี่IVTEditLink
ได้รับการออกแบบสำหรับโหนดและตัวแก้ไขคอลัมน์เฉพาะมากกว่าสำหรับโหนดทั้งหมด คุณสามารถเปิดตัวแก้ไขแบบฟอร์มเมื่อเหตุการณ์OnEditing
มาถึง หรือเมื่อเหตุการณ์ดับเบิลคลิก เป็นต้น
แต่ถ้าฉันไม่โน้มน้าวให้คุณออกจากแนวคิด IVTEditLink
สำหรับการแก้ไขโหนดมากกว่าหนึ่งคอลัมน์ คุณสามารถตรวจสอบ this example
สำหรับการนำแบบฟอร์มไปใช้เป็นตัวแก้ไขสำหรับอินเทอร์เฟซ IVTEditLink
person
TLama
schedule
08.01.2012
แอปพลิเคชันตัวอย่างที่ดีมาก ขอบคุณ
- person James L.; 13.08.2017
เพียงสร้างเครื่องมือแก้ไขที่กำหนดเองในกิจกรรม OnCreateEditor
เนื่องจากเหตุการณ์นี้มีพารามิเตอร์ Column
คุณจึงสามารถสร้างเอดิเตอร์ที่แตกต่างกันสำหรับคอลัมน์ที่แตกต่างกันได้ เช่น.:
procedure TForm1.OnCreateEditor(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; out EditLink: IVTEditLink);
begin
case Column of
0: EditLink := TColorEditLink.Create;
1: EditLink := TFontEditLink.Create;
//etc..
end;
end;
person
Linas
schedule
08.01.2012
OP ต้องการความคิดเห็นของฉันเป็นกรณีแรก เพื่อเขียนเอดิเตอร์หนึ่งตัวจากมากกว่าหนึ่งคอมโพเนนต์ ไม่ใช้เอดิเตอร์ที่แตกต่างกันสำหรับคอลัมน์ที่ต่างกัน
- person TLama; 08.01.2012
คำถามนั้นไม่ชัดเจนมาก OP จำเป็นต้องแก้ไขคำถามของเขาเพื่อให้ชัดเจนยิ่งขึ้นว่าเขาพยายามบรรลุอะไร
- person Linas; 08.01.2012
เห็นด้วย นั่นคือเหตุผลที่ฉันขอคำอธิบายในความคิดเห็นของฉัน ;)
- person TLama; 08.01.2012
IVTEditLink
ฉันไม่ทราบTPanel
และTEdit
สองช่อง แสดงว่าเป็นไปได้ สิ่งเดียวที่คุณควรมีในใจคือการใช้อินเทอร์เฟซIVTEditLink
สำหรับพาเนลนั้นและจัดการเหตุการณ์สำหรับกล่องแก้ไขเหล่านั้น - หากคุณต้องการเช่น หากต้องการยกเลิกการแก้ไขเมื่อคุณOnExit
กล่องแก้ไข คุณจะต้องCancelEditNode
ในเหตุการณ์นั้น - person TLama   schedule 07.01.2012IVTEditLink
มากกว่าหนึ่งอินเทอร์เฟซได้หรือไม่ เช่นTComboBox
สำหรับหนึ่งคอลัมน์และTDateTimePicker
สำหรับอีกคอลัมน์หนึ่ง จากนั้นเพียงพิมพ์คอลัมน์ในOnCreateEditor
และสร้างโปรแกรมแก้ไขที่คุณต้องการใช้ ;) - person TLama   schedule 07.01.2012