มากกว่าหนึ่งองค์ประกอบสำหรับโปรแกรมแก้ไข IVTEditLink ใน VirtualTreeView

มีวิธีเพิ่มองค์ประกอบมากกว่าหนึ่งองค์ประกอบในตัวแก้ไข IVTEditLink ของ VirtualTreeView หรือไม่


person Knobik    schedule 07.01.2012    source แหล่งที่มา
comment
ฉันไม่แน่ใจว่าคุณกำลังถามอะไรที่นี่ หากคุณต้องการเขียนโปรแกรมแก้ไข IVTEditLink ฉันไม่ทราบ TPanel และ TEdit สองช่อง แสดงว่าเป็นไปได้ สิ่งเดียวที่คุณควรมีในใจคือการใช้อินเทอร์เฟซ IVTEditLink สำหรับพาเนลนั้นและจัดการเหตุการณ์สำหรับกล่องแก้ไขเหล่านั้น - หากคุณต้องการเช่น หากต้องการยกเลิกการแก้ไขเมื่อคุณ OnExit กล่องแก้ไข คุณจะต้อง CancelEditNode ในเหตุการณ์นั้น   -  person TLama    schedule 07.01.2012
comment
หรือหากคุณถามว่าคุณสามารถใช้อินเทอร์เฟซ IVTEditLink มากกว่าหนึ่งอินเทอร์เฟซได้หรือไม่ เช่น TComboBox สำหรับหนึ่งคอลัมน์และ TDateTimePicker สำหรับอีกคอลัมน์หนึ่ง จากนั้นเพียงพิมพ์คอลัมน์ใน OnCreateEditor และสร้างโปรแกรมแก้ไขที่คุณต้องการใช้ ;)   -  person TLama    schedule 07.01.2012
comment
ขอบคุณสำหรับการตอบกลับของคุณ. หากเป็นไปได้ ฉันจะทำเครื่องหมายโพสต์ของคุณว่าเป็นคำตอบที่ดี   -  person Knobik    schedule 08.01.2012


คำตอบ (2)


ฉันจะใช้แบบฟอร์มสแตนด์อโลนเป็นคอนเทนเนอร์ตัวแก้ไขและทิ้งแนวคิด IVTEditLink ไว้เพื่อจุดประสงค์นี้เนื่องจาก:

  • ถ้าคุณใช้เช่น TPanel ในฐานะคอนเทนเนอร์คอมโพเนนต์ของตัวแก้ไข คุณควรพิจารณาเลือก Parent ที่ถูกต้องของ TPanel; ตัวแก้ไขที่มีหลายฟิลด์อาจซ้อนทับกับสี่เหลี่ยมขอบเขตของแผนผังเสมือนของคุณหรือแม้แต่ขอบเขตของแบบฟอร์มของคุณ
  • การใช้เหตุการณ์ OnDeactivate กับแบบฟอร์มนั้นง่ายกว่าการใช้องค์ประกอบ TPanel มาก
  • คุณสามารถละทิ้งแนวคิด IVTEditLink ได้เลยเพราะมันสูญเสียความรู้สึกที่นี่ IVTEditLink ได้รับการออกแบบสำหรับโหนดและตัวแก้ไขคอลัมน์เฉพาะมากกว่าสำหรับโหนดทั้งหมด คุณสามารถเปิดตัวแก้ไขแบบฟอร์มเมื่อเหตุการณ์ OnEditing มาถึง หรือเมื่อเหตุการณ์ดับเบิลคลิก เป็นต้น

แต่ถ้าฉันไม่โน้มน้าวให้คุณออกจากแนวคิด IVTEditLink สำหรับการแก้ไขโหนดมากกว่าหนึ่งคอลัมน์ คุณสามารถตรวจสอบ this example สำหรับการนำแบบฟอร์มไปใช้เป็นตัวแก้ไขสำหรับอินเทอร์เฟซ IVTEditLink

person TLama    schedule 08.01.2012
comment
แอปพลิเคชันตัวอย่างที่ดีมาก ขอบคุณ - 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
comment
OP ต้องการความคิดเห็นของฉันเป็นกรณีแรก เพื่อเขียนเอดิเตอร์หนึ่งตัวจากมากกว่าหนึ่งคอมโพเนนต์ ไม่ใช้เอดิเตอร์ที่แตกต่างกันสำหรับคอลัมน์ที่ต่างกัน - person TLama; 08.01.2012
comment
คำถามนั้นไม่ชัดเจนมาก OP จำเป็นต้องแก้ไขคำถามของเขาเพื่อให้ชัดเจนยิ่งขึ้นว่าเขาพยายามบรรลุอะไร - person Linas; 08.01.2012
comment
เห็นด้วย นั่นคือเหตุผลที่ฉันขอคำอธิบายในความคิดเห็นของฉัน ;) - person TLama; 08.01.2012