ส่วนประกอบ Visual เป็นคลาส แต่ในการเขียนการควบคุมคุณต้องใช้แพ็คเกจ เลือกใหม่จากเมนูไฟล์และสร้างแพ็คเกจใหม่นี้เป็นแพ็คเกจที่ใช้ในการจัดเก็บและติดตั้งตัวควบคุม จากนั้นคลิกปุ่มเพิ่มในหน้าต่างแพ็คเกจเพื่อเพิ่มส่วนประกอบ (หน่วย)
เลือกส่วนประกอบใหม่ที่ด้านบนของกล่องโต้ตอบป๊อปอัพ เนื่องจากแอตทริบิวต์วิธีการและเหตุการณ์ทั้งหมดของการควบคุมไม่สามารถประกอบได้ด้วยตัวเองคุณต้องเลือกคลาสบรรพบุรุษ (หรือ "คลาสแม่" หรือ "คลาสพื้นฐาน") จากนั้นเพิ่มแอตทริบิวต์วิธีการและเหตุการณ์ของคุณเอง . เลือกคลาสบรรพบุรุษที่ต้องการในกล่องดรอปดาวน์หลังจากประเภทบรรพบุรุษ เนื่องจากคุณต้องวาดภาพโดยการเขียนการควบคุมภาพ TGraphicControl จึงถูกเลือกให้เป็นคลาสบรรพบุรุษ จากนั้นป้อนชื่อของตัวควบคุมใหม่ (คลาส) ในกล่องชื่อคลาสซึ่งมักจะเริ่มต้นด้วย "t" หน้า Palette ใช้เพื่อเลือกชื่อหน้าควบคุมของตัวควบคุมใหม่ในหน้าต่าง Delphi เช่น "มาตรฐาน" ซึ่งสามารถถ่ายได้ด้วยตัวเอง เพิ่มเส้นทางและชื่อไฟล์ของไฟล์ควบคุมใหม่ในชื่อหน่วยไฟล์และคลิกปุ่มตกลง มีการเพิ่มการควบคุมใหม่ ตอนนี้คุณสามารถเขียนโค้ดสำหรับการควบคุมนี้
ต่อไปนี้เป็นตัวอย่างของการเขียนแถบเลื่อนที่สามารถปรับแต่งภาพเพื่อแสดงวิธีการเขียนการควบคุมภาพ
ทำตามวิธีการข้างต้นเลือก tgraphicControl เป็นคลาสบรรพบุรุษและชื่อของการควบคุมใหม่คือ tpighorizontalscroller (แถบเลื่อนแนวนอนหมู) หลังจากเลือกพา ธ ไฟล์และชื่อไฟล์ให้คลิกปุ่มตกลงเพื่อเริ่มเขียนโค้ด
การควบคุมแต่ละครั้งจะถูกสร้างและลบดังนั้นคุณต้องเขียนสองกระบวนการนี้ก่อน สำหรับแต่ละกระบวนการในการควบคุมจะต้องมีการกำหนดก่อนและเขียนในภายหลัง มีกระบวนการหรือแอตทริบิวต์สามประเภทที่กำหนดไว้:
1. การกำหนดหลังจากส่วนตัวถูกนำมาใช้ภายในเพื่อควบคุมและบุคคลที่ใช้การควบคุมไม่สามารถมองเห็นได้
2. สิ่งที่กำหนดไว้หลังจากได้รับการปกป้องโดยทั่วไปจะมองไม่เห็นและสามารถมองเห็นได้ก็ต่อเมื่อคนอื่นใช้การควบคุมเป็นคลาสบรรพบุรุษเพื่อเขียนการควบคุมอื่น ๆ ;
3. มีเพียงคนอื่นเท่านั้นที่สามารถเรียกได้ในโปรแกรมหลังจากสาธารณะ
4. การกำหนดหลังจากการเผยแพร่สามารถเห็นได้ในหน้าต่างคุณสมบัติ (ผู้ตรวจสอบวัตถุ) เนื่องจากกระบวนการสร้างและลบไม่เพียง แต่จะดำเนินการโดยอัตโนมัติเมื่อมีการสร้างการควบคุมในระหว่างกระบวนการเขียนโปรแกรมจึงอาจถูกเรียกเมื่อตัวควบคุมถูกสร้างขึ้นแบบไดนามิกในระหว่างการทำงานของโปรแกรมดังนั้นจึงถูกกำหนดหลังจากสาธารณะ (หมายเลขลำดับนี้ระบุตำแหน่งของรหัสในโปรแกรม Source ที่แนบมาด้านล่างเหมือนกัน) ตอนนี้บางทีฉันไม่รู้ว่าจะเขียนอะไรในกระบวนการทั้งสองนี้และวิธีการแก้ไข เราจะพูดถึงเรื่องนี้ด้านล่าง
ก่อนอื่นให้เพิ่มคุณสมบัติบางอย่างในการควบคุมนี้ เรากำหนดคุณสมบัติสูงสุดเพื่อตั้งค่าหรืออ่านค่าสูงสุดของแถบเลื่อน เนื่องจากแอตทริบิวต์ไม่ได้ใช้โดยตรงในโปรแกรมคุณต้องกำหนดตัวแปรที่สอดคล้องกับแอตทริบิวต์ในขณะที่การแก้ไขหรืออ่านค่า เนื่องจากมันถูกใช้ภายในการควบคุมเท่านั้นเราจึงกำหนดหลังจากส่วนตัว⑵ (โดยทั่วไปตัวแปรที่เกี่ยวข้องกับแอตทริบิวต์เริ่มต้นด้วย "F" เช่น FMAX) หลังจากกำหนดตัวแปรกำหนดคุณลักษณะ คุณสมบัตินี้จะต้องมองเห็นได้ในหน้าต่างผู้ตรวจสอบวัตถุดังนั้นกำหนดและเผยแพร่หลังจาก⑶ ไวยากรณ์ที่กำหนดคือ:
คุณสมบัติ <property name>: <ply> อ่าน <ตัวแปรตอบสนองเมื่ออ่านคุณสมบัตินี้> เขียน <ตัวแปรตอบสนองหรือกระบวนการเมื่อเขียนคุณสมบัตินี้>
ตัวแปรและแอตทริบิวต์อื่น ๆ ก็มีการกำหนดในทำนองเดียวกัน (เช่นค่าต่ำสุดขั้นต่ำค่าปัจจุบันค่า ฯลฯ ) ด้านล่างเรากำหนดคุณลักษณะและตัวแปรหลายตัวเพื่อตั้งค่าภาพแถบเลื่อน (เนื่องจากตัวแปรภาพมีความพิเศษฉันจะพูดถึงพวกเขาแยกกัน) เรากำหนด leftbuttonuppicture (รูปภาพปุ่มซ้าย), leftButTondOwnPicture (ปุ่มซ้ายกดรูปภาพ) และอื่น ๆ เป็นประเภท TBITMAP (ต้องกำหนดตัวแปรที่เกี่ยวข้อง)
ทุกคนต้องสังเกตว่าในโปรแกรมแหล่งที่มาที่แนบมาเมื่อกำหนดคุณสมบัติเหล่านี้ตัวแปรที่สอดคล้องกันเมื่ออ่านคุณสมบัติที่ระบุหลังจากการอ่านคือ F ... และตัวแปรที่เกี่ยวข้องเมื่อเขียนคุณสมบัติที่ระบุหลังจากการเขียนไม่ใช่ตัวแปร ตั้ง…มันเป็นกระบวนการที่กำหนดเอง กระบวนการตามฟังก์ชั่นนี้หมายถึง:
โพรซีเดอร์ <ชื่อกระบวนการ> (ค่า: <ประเภทของค่าของคุณสมบัติชุด>)
เนื่องจากสิ่งอื่น ๆ ต้องทำเมื่อเขียนแอตทริบิวต์ของคลาสนี้จึงไม่สามารถประมวลผลได้ด้วยตัวแปรเดียว แต่ควรดำเนินการกับกระบวนการ กระบวนการนี้ถูกกำหนดโดยทั่วไปหลังจากได้รับการปกป้อง ในกระบวนการคลาสนี้คำสั่งเช่นนี้ที่⑷ใช้เพื่อกำหนดค่าให้กับตัวแปรของประเภท TBITMAP ซึ่งถูกนำมาใช้เนื่องจากตัวแปรประเภทนี้ไม่สามารถกำหนดได้โดยตรง
หลังจากกำหนดคุณสมบัติของตัวแปรประเภท TBITMAP เหล่านี้รหัสจะต้องเขียนในกระบวนการสร้างและทำลายกระบวนการที่กล่าวถึงข้างต้น เนื่องจาก TBITMAP เป็นคลาสจึงต้องสร้างในกระบวนการสร้าง⑸และต้องปล่อยฟรีในระหว่างกระบวนการทำลาย คำสั่งที่สืบทอดมาที่อ้างถึงที่นี่ใช้เพื่อระบุว่ากระบวนการนั้นสืบทอดมาจากคลาสบรรพบุรุษ (สิ่งนี้จะต้องไม่ถูกทิ้ง)
เนื่องจากเราเขียนการควบคุมด้วยภาพเราต้องวาดรูปภาพบนตัวควบคุม คลาสบรรพบุรุษของการควบคุมของเรา TgraphicControl ห่อหุ้มวัตถุผ้าใบซึ่งเราสามารถใช้โดยตรงเพื่อวาดรูปภาพ หากคุณไม่คุ้นเคยกับการใช้ผ้าใบคุณควรค้นหาหนังสือที่จะอ่าน
งานต่อไปนี้คือการวาดภาพ วิธีการวาดภาพในการควบคุม? มีเหตุการณ์สีในคลาสบรรพบุรุษ tgraphicControl ซึ่งจะกระตุ้นโดยอัตโนมัติเมื่อต้องมีการควบคุมใหม่ สิ่งที่เราต้องทำตอนนี้คือการเขียนโปรแกรมสำหรับกิจกรรมนี้ ขั้นแรกให้กำหนดวัตถุผ้าใบหลังจากได้รับการปกป้อง เนื่องจากมันอยู่ในคลาสบรรพบุรุษอยู่แล้วจึงไม่จำเป็นต้องเพิ่มคำอธิบายใด ๆ เราจะใช้วัตถุนี้เพื่อวาด ถัดไปคุณต้องกำหนดกระบวนการทาสีและเขียนรหัสเพื่อวาดการควบคุม ก่อนกำหนดกระบวนการทาสีในที่สาธารณะ เนื่องจากมีการกระตุ้นโดยคลาสบรรพบุรุษไม่ใช่โดยผู้ใช้จึงต้องเพิ่มการแทนที่หลังจากนั้นมิฉะนั้นการควบคุมจะไม่กลายเป็นตัวควบคุมภาพเนื่องจากขั้นตอนการทาสีจะไม่ถูกเรียก มาเขียนรหัสสำหรับกระบวนการทาสี⑽
ตัวแปรเช่น t_height ในกระบวนการทาสีของโปรแกรมต้นทางที่แนบมากับบทความนี้ใช้เพื่อบันทึกขนาดของปุ่มสไลด์ ฯลฯ ในแถบเลื่อน ซึ่งส่วนใหญ่ถูกต้องฉันเชื่อว่าทุกคนจะเข้าใจการทำงานของผืนผ้าใบได้อย่างรวดเร็ว เป็นที่น่าสังเกตว่าการตัดสินต่อไปนี้เกี่ยวกับตัวแปร fautosize ⑾
Fautosize เป็นตัวแปรบูลีนที่เกี่ยวข้องกับคุณสมบัติอัตโนมัติของการควบคุม โปรดทราบว่าในรหัสควบคุมแอตทริบิวต์จะไม่เรียกโดยตรง แต่ใช้ตัวแปรที่เกี่ยวข้อง
หลังจากที่โปรแกรมได้รวบรวมไว้ที่นี่แม้ว่าในที่สุดฉันก็ดูการควบคุมใหม่ของฉันมันก็ไม่สามารถเลื่อนได้ ตอนนี้เรามาเขียนเหตุการณ์เมาส์เพื่อให้เราสามารถจัดการได้ คำจำกัดความของกระบวนการเหตุการณ์เมาส์นั้นคล้ายกับกระบวนการทาสีมากยกเว้นคำอธิบายพารามิเตอร์ควรเพิ่มในภายหลัง
เหตุการณ์เมาส์จะถูกแบ่งออกเป็น mousedown, mousemove และ mouseup และการแทนที่จะต้องเพิ่มหลังจากคำจำกัดความ ถัดไปเขียนรหัสในภายหลัง หมายเหตุ: เหตุการณ์เมาส์ที่นี่คือเมาส์…ไม่ใช่ Onmouse ปกติ…. แต่คำจำกัดความใน⒀คืออะไร? คำจำกัดความของเหตุการณ์ที่นี่คือทั้งหมดที่ผู้ใช้จะใช้นั่นคือเมื่อใช้การควบคุมนี้พวกเขาจะแสดงในหน้าเหตุการณ์ในผู้ตรวจสอบวัตถุ
รหัสสำหรับเหตุการณ์เมาส์เหล่านี้นั้นง่ายมาก เป็นที่น่าสังเกตว่าเมื่อเรียกเหตุการณ์ที่กำหนดเองคุณต้องใช้คำสั่งดังกล่าวก่อนที่⒁เพื่อพิจารณาว่าผู้ใช้มีรหัสเขียนสำหรับเหตุการณ์หรือไม่ สิ่งนี้สำคัญมากมิฉะนั้นจะเกิดข้อผิดพลาดในการโทร
ทุกคนสังเกตเห็นว่าเหตุการณ์ที่เรียกว่าตอนนี้มีการปรับแต่งทั้งหมดและวิธีการนิยามนั้นง่ายมากซึ่งคล้ายกับแอตทริบิวต์นิยาม แต่ tnotifyEvent เมื่อพิมพ์
TnetifyEvent เป็นเหตุการณ์เริ่มต้นซึ่งกำหนดเป็น:
tnetifyEvent = ขั้นตอน (ผู้ส่ง: tobject)
หากคุณต้องการกำหนดรูปแบบของเหตุการณ์อื่นคุณต้องทำสิ่งนี้: ก่อนอื่นเขียนเป็นประเภทแล้ว
<ชื่อประเภทเหตุการณ์> = ขั้นตอน (<parameter>: <ply>)
ตัวอย่างเช่น:
tcustomevent = ขั้นตอน (a: จำนวนเต็ม; b: string);
จากนั้นหลังจากคำจำกัดความสาธารณะ:
<ชื่อเหตุการณ์>: <ชื่อประเภทเหตุการณ์>
ตัวอย่างเช่น:
Anevent: tcustomevent;
หลังจากอ่านสิ่งเหล่านี้คุณควรเข้าใจโปรแกรมทั้งหมด หากมีข้อผิดพลาดในการรวบรวมหรือดำเนินการโปรดตรวจสอบประเด็นต่อไปนี้:
1. ไม่ว่าจะมีข้อความที่สืบทอดมาในกระบวนการสร้างและทำลายหรือไม่
2. ไม่ว่าจะเป็นตัวแปรของประเภท TBITMAP สร้างและฟรีถูกสร้างขึ้นหรือฟรี
3. มีชื่อควบคุมก่อนกระบวนการตัวอย่างเช่น: tpighorizontalscroller.mosemove
วิธีตรวจสอบว่าเมาส์เข้าหรือออกจากการควบคุม:
กำหนดกระบวนการต่อไปนี้:
ขั้นตอน Mouseenter (VAR MSG: TMessage); ข้อความ CM_MOUSENTER;
ขั้นตอน Mouseleave (var msg: tmessage);
เพียงแค่เขียนรหัสด้านล่าง!
วิธีนี้มีประโยชน์มากสำหรับการเขียนปุ่มสามรัฐ!