P> ในการพัฒนาซอฟต์แวร์การวิเคราะห์หลักทรัพย์มักจำเป็นต้องวาดเส้นโค้งการวิเคราะห์สำหรับหุ้นต่างๆ เพื่อให้ฟังก์ชั่นของซอฟต์แวร์สะดวกและยืดหยุ่นมากขึ้นผู้ใช้หวังว่าจะสามารถปรับแต่งสีของเส้นโค้งต่าง ๆ ตามความชอบของพวกเขา มีฟังก์ชั่นที่คล้ายกันในกล่องโต้ตอบตัวอักษรภายใต้เมนู [รูปแบบ] ของ Word97 เมื่อผู้ใช้คลิกที่กล่องดรอปดาวน์สีในกล่องโต้ตอบแบบอักษรรูปแบบง่าย ๆ ของสีต่าง ๆ จะปรากฏขึ้นพร้อมกับชื่อสีของแบบอักษร ด้วยชื่อสี 1. การใช้กล่องโต้ตอบสีที่กำหนดเอง
ใน Delphi เราสามารถใช้ Tcombobox เพื่อให้ได้ฟังก์ชั่นที่คล้ายกัน มีแอตทริบิวต์สไตล์ในส่วนประกอบ TCOMBOBOX ซึ่งกำหนดคุณลักษณะการแสดงผลของ TCOMBOBOX โดยปกติแล้ว csdropdown, cssimple, csdropdownlist, csownerDrawfixed, csownerDrawVariable ฯลฯ สามารถเลือกได้ เมื่อเลือก CSOwnerDrawFixed มันหมายถึงการสร้างกล่องแบบเลื่อนลงด้วยตนเอง และกระบวนการทาสีตนเองจะต้องตอบสนองในเหตุการณ์ ondrawitem ของ Tcombobox OnDrawItem หมายถึง:
PropertyondrawItem: tdrawitemevent;
tDrawItemeVent = ขั้นตอน (การควบคุม: twincontrol; ดัชนี: integerRect: trect; state: townerdrawstate) OfObject;
ความหมายของพารามิเตอร์สามตัวคือ:
การควบคุม: TCOMBOBOX ที่มีกล่องแบบเลื่อนลง
ดัชนี: หมายเลขดัชนีของกล่องแบบเลื่อนลงด้วยตนเองในคุณสมบัติรายการของ tcombobox
Rect: ตำแหน่งของการวาดด้วยตนเองดังนั้นเราจึงรู้ตำแหน่งของสี่เหลี่ยมผืนผ้าที่ต้องวาดด้วยตนเอง (พารามิเตอร์ rect) และหมายเลขดัชนี (พารามิเตอร์ดัชนี) ใน Tcombobox เราสามารถใช้คุณสมบัติ Canvas ของ Tcombobox เพื่อวาดบน ผ้าใบของมัน กระบวนการดำเนินการเฉพาะมีดังนี้:
1. สร้างไฟล์โครงการใหม่และตั้งค่าคุณสมบัติที่เกี่ยวข้องของแบบฟอร์มเริ่มต้นเป็น:
คำบรรยายภาพกล่องแบบเลื่อนลงที่กำหนดเอง
ชื่อฟอร์ม 1
positionposcreencenter
2. วางสององค์ประกอบ TCOMBOBOX ในรูปแบบและตั้งค่าคุณสมบัติของพวกเขาดังนี้:
NamestyleItemHeightondRawItem
Colorcombo1csownerDrawFixed 20ColorComBodrawItem
colorcombo2csownerdrawfixed 30colorcombodrawitem
3. คลิกสองครั้งที่ปุ่ม DOT ถัดจากคุณสมบัติรายการของ Colorcombo1 และ colorcombo2 และป้อนในกล่องโต้ตอบ StringlistEditor
สีดำ
สีฟ้า
สีน้ำเงินและเขียว
สีเขียวสดใส
สีแดง
สีเหลือง
ชื่อของสีต่างๆ
4. ในเหตุการณ์ OnDrawItem ใน Colorcombo1, Yu Manlu?
ProcedureTform1.ColorComBodrawItem (การควบคุม: Twincontrol; ดัชนี: จำนวนเต็ม; rect: trect; state: ownowdrawstate);
วาจา
TempColor: TCOLOR;
TempbrushColor: TCOLOR;
เริ่ม
ด้วย (controlastcombobox) ทำ
// วาดมันบนผืนผ้าใบของคอมโบ
เริ่ม
TempbrushColor: = canvas.brush.color;
// บันทึกสีดั้งเดิม
Canvas.fillrect (rect);
CaseIndexof // กำหนดสีที่ทาสีตนเองที่แตกต่างกันตามดัชนี
0: // ดำ
TempColor: = Clblack;
1: // สีน้ำเงิน
TempColor: = Clblue;
2: // สีน้ำเงินและสีเขียว
TempColor: = Claqua;
3: // สีเขียวสดใส
TempColor: = Cllime;
4: // สีแดง
TempColor: = clred;
5: // สีเหลือง
TempColor: = clyellow;
// การตอบสนองต่อสีอื่น ๆ สามารถเพิ่มได้ที่นี่
จบ;
canvas.brush.color: = tempcolor;
// สี่เหลี่ยมสีที่วาดด้วยตนเอง
Canvas.Rectangle (rect.left+4
rect.top+1,
(rect.right+rect.left) div3
rect.bottom 1);
canvas.brush.color: = tempbrushColor;
// แสดงสตริงที่สอดคล้องกับสี
canvas.textout ((rect.left+rect.right) div2
rect.top+1,
รายการ [ดัชนี]);
จบ;
จบ;
5. บันทึกและเรียกใช้ไฟล์เราสามารถเห็นเอฟเฟกต์เดียวกันกับกล่องดรอปดาวน์สีใน Word
ผู้อ่านที่สนใจสามารถเพิ่มสีอื่น ๆ ในสถานที่ที่แสดงในบทความ
โปรแกรมข้างต้นถูกส่งผ่านไปที่ Delphi3.0, 4.0 2. เขียนส่วนประกอบกล่องโต้ตอบสีที่กำหนดเอง
สำหรับโปรแกรมเมอร์ Delphi จำนวนมากมันค่อนข้างไม่คุ้นเคยกับวิธีการเขียนส่วนประกอบ Delphi ของตัวเอง ด้านล่างเราจะแนะนำการเขียนส่วนประกอบโดยใช้กล่องโต้ตอบสีที่กำหนดเองเป็นตัวอย่าง TCOLORCOMBOX ต่อไปนี้ดำเนินการต่อจากคลาส TCOMBOBOX 1. เลือกตัวเลือกส่วนประกอบใหม่ในรายการเมนูส่วนประกอบ เลือก tcomboBox ในกล่อง ancestortype กรอกข้อมูลใน tcolorcombobox ในกล่อง classname เลือกตัวอย่างในกล่องเพจ Palette กรอก colorcombobox.pas ในกล่อง Unitfilename แล้วคลิกปุ่ม OK
2. เลือกตัวเลือกการติดตั้งส่วนประกอบในรายการเมนูส่วนประกอบคลิก inoNewPackage เขียนเส้นทางและ colorcombodpk.dpk ในกล่องชื่อแพ็คเกจและคลิกตกลงเพื่อสร้างไฟล์ colorcombodpk.bpl
3. ใช้ imageEditor ในเมนูเครื่องมือเพื่อสร้างไฟล์แก้ไข colorcombox.dcr และสร้างบิตแมปสำหรับคลาส tcolorcombobox
4. เพิ่มข้อกำหนดสำหรับขนาดและความสูงของตัวอักษรและแอตทริบิวต์สไตล์การควบคุม (ตั้งค่าเป็น CSOwnerDrawFixed) ใน CreateWnd ที่ดำเนินการหลังจากสร้าง สี
5. เพิ่มโปรแกรมทาสีด้วยตนเองสีลงในเหตุการณ์ DrawItem ซึ่งเกิดขึ้นก่อนหน้า DrawItem
ขั้นตอนการใช้งานมีดังนี้:
Unitcolorcombobox;
ส่วนต่อประสาน
ใช้
Windows, ข้อความ, sysutils, คลาส,
กราฟิก, การควบคุม, รูปแบบ, กล่องโต้ตอบ
stdctrls;
พิมพ์
tColorComBoBox = คลาส (tcomboBox)
ส่วนตัว
{privatedeclarations}
fondrawitem: tdrawitemevent;
ProcedureDrawItem (ดัชนี: จำนวนเต็ม; rect: trect; รัฐ: TownerDrawState);
ได้รับการคุ้มครอง
{ProtectedDeclarations}
สาธารณะ
{PublicDeclarations}
ConstructorCreate (AOWNER: TCOMPONENT); Override;
ProcedureCreateWnd; แทนที่;
ที่ตีพิมพ์
{PublishedDeclarations}
PropertyondrawItem: tdrawitemevent
ReadFondRawItemWriteFondRawItem;
จบ;
ขั้นตอนการลงทะเบียน;
การดำเนินการ
procedureregister; // ส่วนประกอบลงทะเบียน
เริ่ม
registercomponents (ตัวอย่าง, [tcolorcombobox]);
จบ;
constructortColorCombobox.create
(AOWNER: TCOMPONENT); // การเริ่มต้นของส่วนประกอบ
เริ่ม
สืบทอด Create (AOWNER);
สไตล์: = csownerDrawFixed;
itemheight: = 20;
Font.Size: = 10;
จบ;
ProcedureTColorComBoBox.Createwnd;
// เริ่มต้นคุณสมบัติรายการของส่วนประกอบสี
เริ่ม
สืบทอด createwnd;
items.clear;
items.add (ดำ);
items.add (สีน้ำเงิน);
items.add (สีน้ำเงินและสีเขียว);
items.add (สีเขียวสดใส);
items.add (สีชมพู);
items.add (สีแดง);
items.add (สีเหลือง);
items.add (สีขาว);
items.add (สีน้ำเงินเข้ม);
items.add (สีฟ้า);
items.add (สีเขียว);
items.add (สีม่วง);
items.add (สีแดงเข้ม);
items.add (สีเหลืองเข้ม);
items.add (สีเทาเข้ม);
items.add (เงิน);
// หากคุณไม่ต้องการสีมากมายคุณสามารถลบสีที่ไม่ต้องการในแอตทริบิวต์รายการของส่วนประกอบ
จบ;
// โอเวอร์โหลดกระบวนการ drawitem
ProcedureTColorComboBox.DrawItem (ดัชนี: จำนวนเต็ม; rect: trect; รัฐ: TownerDrawState);
วาจา
TempColor: TCOLOR;
TempbrushColor: TCOLOR;
เริ่ม
// การตั้งค่าการทาสีด้วยตนเองเริ่มต้นของส่วนประกอบนี้
TempbrushColor: = canvas.brush.color;
// บันทึกสีดั้งเดิม
Canvas.fillrect (rect);
ifitems [index] = Black แล้ว
TempColor: = Clblack
elseifitems [index] = สีน้ำเงินแล้ว
TempColor: = Clblue
elseifitems [index] = สีเขียวสีน้ำเงินแล้ว
TempColor: = Claqua
elseifitems [index] = สีเขียวสดใสแล้ว
TempColor: = cllime
elseifitems [index] = สีชมพูแล้ว
TempColor: = Clfuchsia
elseifitems [index] = สีแดงแล้ว
TempColor: = clred
elseifitems [index] = สีเหลืองแล้ว
TempColor: = clyellow
elseifitems [index] = สีขาวแล้ว
TempColor: = ClWhite
elseifitems [index] = สีน้ำเงินเข้มแล้ว
TempColor: = clnavy
elsefitems [index] = cyan แล้ว
TempColor: = clteal
elseifitems [index] = สีเขียวแล้ว
TempColor: = Clgreen
elseifitems [index] = สีม่วงแล้ว
TempColor: = clpurple
elseifitems [index] = สีแดงเข้มแล้ว
TempColor: = Clmaroon
elseifitems [index] = สีเหลืองเข้มแล้ว
TempColor: = Clolive
elseifitems [index] = สีเทาเข้มแล้ว
TempColor: = Clgray
elseifitems [index] = เงินแล้ว
elsetempColor: = clsilver;
canvas.brush.color: = tempcolor;
// สี่เหลี่ยมสีที่วาดด้วยตนเอง
Canvas.Rectangle (rect.left+4
rect.top+1,
(rect.right+rect.left) div3
rect.bottom 1);
canvas.brush.color: = tempbrushColor;
// แสดงสตริงที่สอดคล้องกับสี
canvas.textout ((rect.left+rect.right) div2
rect.top+1,
รายการ [ดัชนี]);
จบ;
สิ้นสุด 3. การใช้ส่วนประกอบกล่องโต้ตอบสีที่กำหนดเอง
หลังจากลงทะเบียนส่วนประกอบสีที่กำหนดเองคุณสามารถเลือกส่วนประกอบสีที่กำหนดเองจากหน้าตัวอย่างของเทมเพลตส่วนประกอบ Delphi และไม่มีความแตกต่างระหว่างการใช้ส่วนประกอบของ Delphi