ใช้ฟังก์ชัน API เพื่อใช้แบบฟอร์ม "ผิดปรกติ" ใน DELPHI
เพื่อดึงดูดผู้ใช้ ซอฟต์แวร์แชร์แวร์ในปัจจุบันบางรุ่น โดยเฉพาะซอฟต์แวร์เครื่องเล่นมัลติมีเดียบางรุ่น ให้ความสำคัญกับการออกแบบอินเทอร์เฟซของโปรแกรมเป็นอย่างมาก ในความเป็นจริง เรายังสามารถใช้ฟังก์ชัน API เพื่อให้ได้เอฟเฟกต์ที่สวยงามและเป็นทางเลือกเหล่านั้นได้
1. รูปทรงพิเศษ
แบบฟอร์มสามารถเป็นสี่เหลี่ยมจัตุรัสได้หรือไม่? ไม่ มีรูปร่างอื่นที่เป็นไปได้ สิ่งนี้จำเป็นต้องใช้ฟังก์ชัน Win32 API สองฟังก์ชัน ขั้นแรก ให้ใช้ฟังก์ชัน CreateRoundRectRgn() เพื่อกำหนดพื้นที่วงรีภายในแบบฟอร์ม ขอบเขตที่อ้างถึงที่นี่คือออบเจ็กต์ API พิเศษ เราสามารถดำเนินการต่างๆ เช่น การเติมและการตัดภายในขอบเขตเพื่อกำหนดลักษณะภายนอกของแบบฟอร์ม จากนั้นเรียกใช้ฟังก์ชัน SetWindowRgn() เพื่อวาด นอกจากนี้ คุณสามารถใช้ฟังก์ชัน CombineRgn() เพื่อผสานหลายพื้นที่ได้ ตัวอย่างเช่น เพิ่มโค้ดต่อไปนี้ลงในไฟล์หน่วย Delphi:
PROcedure TForm1.FormCreate (ผู้ส่ง: TObject);
var
ภูมิภาค 1: THhandle;
ภูมิภาค 2: THhandle;
เริ่ม
FRegion1:=CreateRoundRectRgn(20,20,200,200,300,300);//กำหนดเขตพื้นที่วงรี
FRegion2:=CreateRectRgn(170,170,400,400);//กำหนดขอบเขตพื้นที่สี่เหลี่ยม
CombineRgn(FRegion1,FRegion1,FRegion2,RGN_OR);//เชื่อมต่อสองพื้นที่
SetwindowRgn(handle,FRegion1,True);//วาดพื้นที่ที่เชื่อมต่อกัน
จบ;
ฟังก์ชัน CreateRoundRectRgn() ในส่วนของโปรแกรมใช้เพื่อสร้างพื้นที่สี่เหลี่ยมมุมมน และต้นแบบของมันคือ:
HRGN CreateRoundRectRgn(
int nLeftRect,//พิกัด X ของมุมซ้ายบน
int nTopRect,//พิกัด Y ของมุมซ้ายบน
int nRightRect,//พิกัด X ที่มุมขวาล่าง
int nBottomRect,//พิกัด Y ที่มุมขวาล่าง
int nWidthEllipse,//ความกว้างของวงรีที่มีมุมโค้งมนอยู่
int nHeightEllipse //ความสูงของวงรีที่มีมุมโค้งมนอยู่
-
กราฟิกอื่นๆ เช่น รูปหลายเหลี่ยม วงรี ฯลฯ มีฟังก์ชัน API ที่สอดคล้องกันดังนี้:
HRGN CreateEllipticRgn(int nLeftRect,int nTopRect,int nRightRect,int nBottomRect)
HRGN CreateEllipticRgnIndirect( CONST RECT *lprc)
HRGN CreatePolygonRgn(จุด CONST *lPPT,int cPoints, int fnPolyFillMode)
HRGN CreatepolypolygonRgn (จุด CONST *lppt, CONST INT *lpPolyCounts,int nCount,int fnPolyFillMode)
HRGN CreateRectRgn(int nLeftRect,int nTopRect,int nRightRect,int nBottomRect)
HRGN CreateRectRgnIndirect (CONST RECT *lprc)
พารามิเตอร์ของฟังก์ชันข้างต้นเข้าใจง่ายและใช้เพื่อระบุพิกัดของสี่เหลี่ยมในตัวของกราฟิกหรือชี้ไปที่สี่เหลี่ยม มาดูอีกสองฟังก์ชันกันดีกว่า:
ต้นแบบฟังก์ชัน: SetWindowRgn(
HWND hWnd, // จัดการแบบฟอร์มปัจจุบัน
HRGN hRgn, //หมายเลขอ้างอิงของภูมิภาคปัจจุบัน
BOOL bRedraw // วาดโลโก้ใหม่
-
ฟังก์ชัน: ฟังก์ชันนี้ส่งผ่านหมายเลขอ้างอิงของพื้นที่ที่สร้างขึ้นเป็นพารามิเตอร์ไปยังหมายเลขอ้างอิงของแบบฟอร์มปัจจุบัน และวาดแบบฟอร์มภายในพื้นที่
ต้นแบบฟังก์ชัน: CombineRgn(
HRGN hrgnDest, // จัดการเพื่อเชื่อมต่อกับพื้นที่ปลายทาง
HRGN hrgnSrc1, //หมายเลขอ้างอิงแรกเพื่อเชื่อมต่อกับพื้นที่ต้นทาง
HRGN hrgnSrc2, // หมายเลขอ้างอิงของพื้นที่ต้นทางการเชื่อมต่อที่สอง
int fnCombineMode // โหมดการเชื่อมต่อ
-
ฟังก์ชัน: ฟังก์ชันนี้จะรวมสองพื้นที่เข้าด้วยกันเป็นพื้นที่ใหม่ โดยที่โหมดการเชื่อมต่อสามารถรับค่าต่อไปนี้ได้:
ผลกระทบของค่าพารามิเตอร์
RGN_AND สร้างขอบเขตใหม่จากจุดตัดของส่วนร่วมของภูมิภาค 1 และภูมิภาค 2
RGN_COPY สร้างสำเนาของภูมิภาค 1 เป็นภูมิภาคใหม่
RGN_DIFF เชื่อมต่อส่วนต่างๆ ที่เป็นของพื้นที่ 1 แต่ไม่ใช่พื้นที่ 2 เข้ากับพื้นที่ใหม่
RGN_OR เชื่อมต่อทุกส่วนของพื้นที่ 1 และพื้นที่ 2 นั่นคือสหภาพ
RGN_XOR เชื่อมต่อทุกส่วนของพื้นที่ 1 และพื้นที่ 2 แล้วถอดชิ้นส่วนทั่วไปออก
2. รูปทรงกลวง
ลักษณะของแบบฟอร์มนี้คือเป็นรูปทรงที่มีปลายสองด้านและมีส่วนที่ขุดออกมาตรงกลาง ตัวอย่างเช่น เพิ่มรหัสต่อไปนี้ลงในไฟล์หน่วย Delphi:
ขั้นตอน TForm1.FormCreate (ผู้ส่ง: TObject);
var
ภูมิภาค 3: THhandle;
เริ่ม
Canvas.Font.Name:='Chinese Xingkai';//ตั้งค่าแบบอักษร
Canvas.Font.Size:=100;//กำหนดขนาดตัวอักษร
BeginPath(Canvas.Handle); //รับโครงร่างที่วาดบน vanvas
TextOut(form1.Canvas.Handle,0,20,'Program Spring and Autumn',8);//ตัดพื้นที่ที่มีคำสี่คำ "Program Spring and Autumn" ออก
EndPath (ผ้าใบ. แฮนเดิล);
FRegion3:=PathToRegion(Canvas.Handle);//กำหนดขอบเขตข้างต้นให้กับแบบฟอร์ม
SetwindowRgn(Handle,FRegion3,True);//เริ่มวาด
จบ;
ฟังก์ชัน API สามฟังก์ชันส่วนใหญ่จะใช้ที่นี่:
ต้นแบบฟังก์ชัน: BOOL BeginPath (HDC hdc // ตัวจัดการสภาพแวดล้อมของอุปกรณ์)
ฟังก์ชั่น: เริ่มรับเส้นทางวิถีของสภาพแวดล้อมอุปกรณ์ปัจจุบัน
ต้นแบบฟังก์ชัน: BOOL EndPath (HDC hdc // ตัวจัดการสภาพแวดล้อมของอุปกรณ์)
ฟังก์ชั่น: หยุดรับและกำหนดวิถีเส้นทางที่ได้รับให้กับหมายเลขอ้างอิงของสภาพแวดล้อมอุปกรณ์ปัจจุบัน
ฟังก์ชั่นต้นแบบ BOOL TextOut(
HDC hdc //จัดการบริบทของอุปกรณ์
int nXStart,//พิกัด X ของตำแหน่งเริ่มต้น
int nYStart,//พิกัด Y ของตำแหน่งเริ่มต้น
LPCTSTR lpString,//ที่อยู่สตริง
int cbString //จำนวนอักขระที่มีอยู่ในสตริง (โปรดทราบว่าอักขระจีนหนึ่งตัวใช้อักขระสองตัว)
-
ฟังก์ชั่น: วาดสตริงที่กำหนดในตำแหน่งที่ระบุ
สรุป: การเรียนรู้ที่จะใช้ API สำหรับการเขียนโปรแกรมอย่างเชี่ยวชาญเป็นทักษะที่สำคัญมากและบางครั้งก็สามารถบรรลุผลลัพธ์ที่ไม่คาดคิดได้ เทคนิคข้างต้นมีจุดมุ่งหมายเพื่อสร้างแรงบันดาลใจให้กับผู้อื่น ฉันหวังว่าคุณจะสามารถใช้เทคนิคต่างๆ ได้อย่างเต็มที่ และใช้จินตนาการของคุณในการออกแบบรูปแบบที่น่าตื่นตาตื่นใจยิ่งขึ้น และทำให้โปรแกรมของคุณเองสวยงามขึ้น