http://www.netgocn.com ต้นฉบับ
ปุ่มทั้งหมดไม่มีสีในโปรแกรม Windows มาตรฐาน ดังนั้นส่วนประกอบของปุ่มทั้งหมดที่ Delphi จัดทำขึ้นก็ไม่มีแอตทริบิวต์สี
ที่นี่ฉันมีวิธีการที่จะสร้างปุ่มแอมโมเนียมที่มีแอตทริบิวต์สีโดยใช้ส่วนประกอบที่กำหนดเอง เปลี่ยนสีตามความประสงค์ในระหว่างขั้นตอนการออกแบบเช่นเดียวกับส่วนประกอบที่จัดทำโดย Delphi เอง (รหัสในบทความนี้ทำภายใต้ Delphi 4.0)
ขั้นตอนแรก
เปิด Delphi เลือกส่วนประกอบ/ส่วนประกอบใหม่ของเมนูและเติมหรือดรอปดาวน์ด้วยตนเองในกล่องแบบดรอปดาวน์ประเภทบรรพบุรุษของกล่องโต้ตอบป๊อปอัพ จะเสร็จสิ้นตามนี้ ส่วนที่เหลือของเนื้อหาการเขียนในกล่องโต้ตอบจะถูกกรอกตามที่คุณต้องการ แต่คุณต้องทราบว่าชื่อชั้นเรียนไม่สามารถเหมือนกับชื่อคลาสที่มีอยู่ (รวมถึงการปรับแต่ง) และคุณควรจำไว้ว่ามันเป็นตัวกำหนด ตำแหน่งการติดตั้งของส่วนประกอบ (เนื้อหาในกล่องดรอปดาวน์เพจ PALETTE) และตำแหน่งที่เก็บข้อมูลของไฟล์หน่วยบนดิสก์ (เนื้อหาของกล่องแก้ไขชื่อหน่วย) มิฉะนั้นคุณจะพบได้ที่ไหนในอนาคต บทความนี้ใช้ค่าเริ่มต้นของ Delphi Tbutton1 เป็นชื่อคลาส
ขั้นตอนที่ 2
หลังจากเสร็จสิ้นการทำงานด้านบนให้กดปุ่ม OK ด้านล่างและ Delphi จะสร้างรหัสส่วนประกอบพื้นฐานให้คุณโดยอัตโนมัติ (บทความนี้ถูกลบเพียงความคิดเห็นที่สร้างขึ้นโดยอัตโนมัติทั้งหมด) ควรบันทึกไว้
ขั้นตอนที่ 3
เพิ่มรหัสของเราในกรอบรหัสข้างต้นแน่นอนว่านี่เป็นงานหลักที่เราต้องการทำ
1. แก้ไขส่วนคำจำกัดความประเภทข้อมูลของไฟล์หน่วยที่สร้างโดยอัตโนมัติโดย Delphi เป็น:
พิมพ์
tbutton1 = คลาส (tbutton)
ส่วนตัว
fcolor: tcolor;
fcanvas: tcanvas;
isfocused: บูลีน;
SetColor ขั้นตอน (ค่า: TCOLOR);
โพรซีเดอร์ CNDRAWITEM (ข้อความ VAR: TWMDRAWITEM); ข้อความ CN_DRAWITEM;
ได้รับการคุ้มครอง
กระบวนการ createparams (var params: tcreateparams);
ขั้นตอน SetButtonStyle (Adefault: Boolean);
สาธารณะ
ตัวสร้างสร้าง (AOWNER: TCOMPONENT);
Destructor ทำลาย;
ที่ตีพิมพ์
สีคุณสมบัติ: tcolor อ่าน fcolor เขียน setcolor เริ่มต้น clwhite;
จบ;
ภาพประกอบ:
.
b
c ทำให้ชั้นเรียนไม่สามารถเข้าถึงได้นอก
2. การลงทะเบียนกระบวนการอัตโนมัติของ Delphi สามารถเพิกเฉยได้ หลังจากร่างกายของกระบวนการเราเพิ่มรหัสต่อไปนี้ด้วยตนเองก่อนสิ้นสุด
// *** constructor **************************************** ** **********
Constructor tbutton1.Create (AOWNER: TCOMPONENT);
เริ่ม
สืบทอดมาสร้าง (aowner);
fcanvas: = tcanvas.create;
fcolor: = clwhite; // สีเริ่มต้น
จบ;
// *** destructor **************************************** ********
destructor tbutton1.destroy;
เริ่ม
fcanvas.free;
ทำลายที่สืบทอดมา;
จบ;
// *** เพื่อกำหนดรูปแบบปุ่มปุ่มจะต้องนิยามใหม่เป็นปุ่มวาดด้วยตนเอง *****************
ขั้นตอน tbutton1.createparams (var params: tcreateparams);
เริ่ม
createparams ที่สืบทอดมา (params);
ด้วย params do style: = style หรือ bs_ownerdraw;
จบ;
// *** วิธีการเขียนแอตทริบิวต์ ************************************** ********* *******
ขั้นตอน tbutton1.setColor (ค่า: tColor);
เริ่ม
fcolor: = ค่า;
เป็นโมฆะ;
จบ;
// *** ตั้งสถานะปุ่ม ******************************************************************* ****** ****
ขั้นตอน tbutton1.SetButtonStyle (adefault: บูลีน);
เริ่ม
ถ้า adefault <> isfocused แล้ว
เริ่ม
isfocused: = adefault;
รีเฟรช;
จบ;
จบ;
// *** ปุ่มวาด ***************************************** ******
ขั้นตอน tbutton1.cndrawitem (ข้อความ var: twmdrawitem);
วาจา
Isdown, Isdefault: บูลีน;
Arect: Trect;
ธง: Longint;
DrawItemStruct: TDrawItemStruct;
WH: tsize;
เริ่ม
DrawItemStruct: = message.drawItemStruct^;
fcanvas.handle: = drawitemstruct.hdc;
arect: = clientRect;
ด้วย drawitemstruct
เริ่ม
ISDOWN: = AtemState และ ODS_SELECTED <> 0;
isdefault: = itemstate และ ods_focus <> 0;
จบ;
Flags: = dfcs_buttonpush หรือ dfcs_adjustrect;
ถ้า ISDOWN แล้วธง: = ธงหรือ dfcs_pushed;
ถ้า drawitemstruct.itemstate และ ods_disabled <> 0 แล้ว
แฟล็ก: = แฟล็กหรือ dfcs_inactive;
ถ้า isfocused หรือ isdefault แล้ว
เริ่ม
// วาดสถานะเมื่อปุ่มได้รับโฟกัส
fcanvas.pen.color: = clwindowframe;
fcanvas.pen.width: = 1;
fcanvas.brush.style: = bsclear;
fcanvas.rectangle (arect.left, arect.top, arect.right, arect.bottom);
inflaterect (arect, -1, -1);
จบ;
fcanvas.pen.color: = clbtnshadow;
fcanvas.pen.width: = 1;
fcanvas.brush.color: = fcolor;
ถ้า isDown เริ่มต้น
// วาดสถานะเมื่อกดปุ่ม
fcanvas.rectangle (arect.left, arect.top, arect.right, arect.bottom);
inflaterect (arect, -1, -1);
จบสิ้น
// วาดปุ่มที่ไม่ได้กด
DrawFrameControl (drawitemstruct.hdc, arect, dfc_button, ธง);
fcanvas.fillrect (arect);
// วาดเนื้อหาข้อความคำบรรยายภาพ
fcanvas.font: = self.font;
arect: = clientRect;
wh: = fcanvas.textextent (คำบรรยายภาพ);
fcanvas.pen.width: = 1;
fcanvas.brush.style: = bsclear;
หากไม่เปิดใช้งาน
เริ่มต้น // เมื่อปุ่มล้มเหลวคุณควรวาดข้อความคำบรรยายภาพอีกครั้ง
fcanvas.font.color: = clbtnhighlight;
fcanvas.textout ((Width Div 2)-(wh.cx div 2) +1,
(ความสูง div 2)-(wh.cy div 2) +1,
คำบรรยายภาพ);
fcanvas.font.color: = clbtnshadow;
จบ;
fcanvas.textout ((Width Div 2)-(wh.cx div 2), (ความสูง div 2)-(wh.cy div 2), คำบรรยาย);
// วาดเส้นประของเฟรมด้านในเมื่อคุณได้รับโฟกัส
ถ้า isfocused และ isdefault แล้ว
เริ่ม
arect: = clientRect;
Inflaterect (arect, -4, -4);
fcanvas.pen.color: = clwindowframe;
fcanvas.brush.color: = fcolor;
drawfocusrect (fcanvas.handle, arect);
จบ;
fcanvas.handle: = 0;
จบ;
// ** จุดจบ **************************************** ****************
จบ.
ขั้นตอนที่ 4: หลังจากตรวจสอบยืนยันว่าข้อผิดพลาดถูกต้องเลือกตัวเลือกส่วนประกอบ/ติดตั้งของเมนู Delphi ส่วนประกอบ.
หากคุณทำตามบทความนี้อย่างสมบูรณ์หลังจากรวบรวมและติดตั้งอย่างถูกต้องคุณสามารถค้นหาปุ่มที่มีไอคอนเดียวกับ tbutton ในแท็บตัวอย่างของฉลากส่วนประกอบ Delphi สร้างโครงการใหม่และวางปุ่มนี้ที่เราใช้ในแบบฟอร์ม แล้วล่ะ? ผ่านคุณสมบัติสีของมันคุณตั้งค่าสีตามต้องการ
ในที่สุดวิธีการวาดปุ่มในบทความนี้ใช้วิธีการวาดรูปที่คล้ายกันกับ tbutton ของ Delphi เพื่อให้ได้ลักษณะการกระทำที่คล้ายกันกับปุ่ม Delphi อย่างไรก็ตามหากคุณต้องการเล่นคุณสามารถวาดข้อความและกราฟิกใด ๆ บนผืนผ้าใบ FCANVAS ที่คุณต้องการแสดงบุคลิกของคุณ
หากคุณมีคำถามใด ๆ โปรดส่งจดหมายหรือฝากข้อความไว้
ยินดีต้อนรับสู่การทดลองใช้ซอฟต์แวร์ของเว็บไซต์นี้: NetGocn (เครือข่าย)