แอปริคอท
คุณสมบัติที่สำคัญของอินเทอร์เฟซ Windows คือการแสดงไอคอนหลากสีสันไม่เพียงแต่ทำให้เดสก์ท็อป Windows สวยงามเท่านั้น แต่ยังอำนวยความสะดวกในการใช้งานอย่างเป็นธรรมชาติ ทำให้ผู้ใช้ได้รับความสะดวกสบายอย่างมาก สไตล์ Windows เป็นข้อมูลอ้างอิงที่ดีเมื่อออกแบบอินเทอร์เฟซของโปรแกรม
โดยทั่วไป Delphi มีวิธีการตั้งค่าไอคอนสองวิธี วิธีหนึ่งคือระบุไอคอนของแอปพลิเคชันในตัวเลือก PRoject และอีกวิธีหนึ่งคือระบุแอตทริบิวต์ Icon ในหน้าคุณสมบัติของ Object Inspector หากคุณต้องการออกแบบเมนูป๊อปอัปให้สวยงามเหมือนกับเมนู Start ของ Windows คุณต้องเขียนโค้ดด้วยตัวเอง
เรารู้ว่าแอปพลิเคชัน Windows ส่วนใหญ่มีไอคอนในตัวเอง ตราบใดที่คุณนำไอคอนออกจากโปรแกรม ปรับขนาดของไอคอน และเพิ่มลงในเมนูป๊อปอัป เมนูที่สวยงามก็จะเสร็จสมบูรณ์
ขั้นแรก ให้ใช้ ExtractAssociatedIcon เพื่อรับไอคอนจากบางโปรแกรม อย่างไรก็ตาม ขนาดของไอคอนจะแตกต่างกันไปและอาจไม่สามารถเพิ่มลงในเมนูได้โดยตรง ในเวลาเดียวกัน Delphi ไม่มีฟังก์ชันในการปรับขนาดไอคอน ดังนั้น ไฟล์ไอคอนจะต้องถูกแปลงเป็นไฟล์บิตแมป จากนั้นปรับขนาดของไฟล์บิตแมป และสุดท้ายแทนที่รายการเมนูด้วยไฟล์บิตแมป ซอร์สโค้ดของมันมีดังนี้:
พิมพ์
TForm1 = คลาส (TForm)
เมนูหลัก1: TMainMenu;
ไฟล์ 1: TMenuItem;
/****รายการในแถบเมนู****/
Open1: TMenuItem;
/****รายการในไฟล์เมนู****/
ขั้นตอน FormCreate (ผู้ส่ง: TObject);
ขั้นตอน FormShow (ผู้ส่ง: TObject);
ส่วนตัว
{การประกาศพารามิเตอร์ท้องถิ่น}
สาธารณะ
{การประกาศพารามิเตอร์ทั่วโลก}
Icn, Txt, MnuItm: TBitmap;
จบ;
ขั้นตอน TForm2.FormCreate (ผู้ส่ง: TObject);
var R: TRect;
HIcn: HIcon;
ไอซี: ไทคอน;
ดัชนี: คำ;
ชื่อไฟล์: PChar;
เริ่ม
/**รับไอคอนจากโปรแกรม**/
Ic:=TIcon.สร้าง;
Ic.Handle:=ExtractAssociatedIcon(Hinstance, /*ชื่อไฟล์และพาธ*/, ดัชนี);
/** สร้างบิตแมป**/
Txt:=TBitmap.สร้าง;
ด้วย Txt ทำ
เริ่ม
ความกว้าง:=Canvas.TextWidth('ทดสอบ');
ความสูง:=Canvas.TextHeight('เทส');
Canvas.TextOut(0,0,' ทดสอบ');
จบ;
/**คัดลอกไอคอนไปยังบิตแมปที่สร้างขึ้นด้านบนและปรับขนาด**/
Icn:=TBitmap.สร้าง;
กับ Icn ทำ
เริ่ม
ความกว้าง:=32;
ส่วนสูง:=32;
แปรงสี:=clBtnFace;
ผ้าใบวาด(0,0,Ic);
จบ;
/** สร้างไฟล์บิตแมปสุดท้าย**/
MnuItm:=TBitmap.Create;
ด้วย MnuItm ทำ
เริ่ม
ความกว้าง:=Txt.ความกว้าง+18;
ส่วนสูง:=18;
กับแคนวาสทำ
เริ่ม
แปรงสี:=clBtnFace;
ปากกา.สี:=clBtnFace;
แปรงสไตล์:=bsSolid;
สี่เหลี่ยมผืนผ้า (0,0,กว้าง,สูง);
CopyMode:=cmSrcAnd;
StretchDraw(สี่เหลี่ยม(0,0,16,16),Icn);
CopyMode:=cmSrcAnd;
วาด(16,8-(Txt.Height div 2),Txt);
จบ;
จบ;
จบ;
ขั้นตอน TForm2.FormShow (ผู้ส่ง: TObject);
var
ข้อมูลรายการ: TMenuItemInfo;
hBmp1:THandle;
เริ่ม
HBmp1:=MnuItm.จัดการ;
ด้วย ItemInfo ทำ
เริ่ม
cbSize:= SizeOf(ข้อมูลรายการ);
fMask:= MIIM_TYPE;
fประเภท:= MFT_BITMAP;
dwTypeData:= PChar(MakeLong( hBmp1, 0 ));
จบ;
/** แทนที่รายการเมนู Open1 ด้วยบิตแมป **/
SetMenuItemInfo ( GetSubMenu ( MainMenu1.Handle, File1.MenuIndex )
Open1.MenuIndex, จริง, ItemInfo );
จบ;
โปรแกรมข้างต้นได้รับการดีบั๊กภายใต้สภาพแวดล้อม Windows98 และ Delphi 4.0