Gunakan fungsi API untuk mengimplementasikan formulir "tidak lazim" di DELPHI
Untuk menarik pengguna, beberapa perangkat lunak shareware saat ini, terutama beberapa perangkat lunak pemutar multimedia, memberikan perhatian besar pada desain antarmuka program. Faktanya, kita juga dapat menggunakan fungsi API untuk mencapai efek-efek indah dan alternatif tersebut.
1. Bentuk berbentuk khusus
Apakah bentuknya hanya persegi saja? Tidak, ada kemungkinan bentuk lain. Ini memerlukan penggunaan dua fungsi API Win32. Pertama, gunakan fungsi CreateRoundRectRgn() untuk mendefinisikan area elips di dalam formulir. Wilayah yang dimaksud di sini adalah objek API khusus. Kita dapat melakukan operasi seperti pengisian dan pemotongan di dalam wilayah untuk menentukan karakteristik eksternal formulir. Kemudian panggil fungsi SetWindowRgn() untuk menggambar. Selanjutnya, Anda dapat menggunakan fungsi CombineRgn() untuk menggabungkan beberapa area. Misalnya, tambahkan kode berikut ke file unit Delphi:
Prosedur TForm1.FormCreate(Pengirim: TObject);
var
FRegion1:Pegangan;
FRegion2:Pegangan;
mulai
FRegion1:=CreateRoundRectRgn(20,20,200,200,300,300);//Membatasi area elips
FRegion2:=CreateRectRgn(170,170,400,400);//Membatasi area persegi panjang
CombineRgn(FRegion1,FRegion1,FRegion2,RGN_OR);//Hubungkan dua area
SetwindowRgn(handle,FRegion1,True);//Gambar area yang terhubung
akhir;
Fungsi CreateRoundRectRgn() pada segmen program digunakan untuk membuat area persegi panjang bulat, dan prototipenya adalah:
HRGN BuatRoundRectRgn(
int nLeftRect,//koordinat X pojok kiri atas
int nTopRect,//koordinat Y pojok kiri atas
int nRightRect,//koordinat X pojok kanan bawah
int nBottomRect,//koordinat Y pojok kanan bawah
int nWidthEllipse,//Lebar elips tempat sudut bulat berada
int nHeightEllipse //Tinggi elips tempat sudut membulat berada
);
Grafik lain seperti poligon, elips, dll. memiliki fungsi API yang sesuai. Prototipenya adalah sebagai berikut:
HRGN CreateEllipticRgn(int nLeftRect,int nTopRect,int nRightRect,int nBottomRect)
HRGN CreateEllipticRgnTidak Langsung( CONST RECT *lprc)
HRGN CreatePolygonRgn(CONST POINT *lPPT,int cPoints, int fnPolyFillMode)
HRGN BuatpolypolygonRgn(CONST POINT *lppt,CONST INT *lpPolyCounts,int nCount,int fnPolyFillMode)
HRGN CreateRectRgn(int nLeftRect,int nTopRect,int nRightRect,int nBottomRect)
HRGN CreateRectRgnIndirect(CONST RECT *lprc)
Parameter fungsi di atas mudah dipahami dan digunakan untuk menunjukkan koordinat persegi panjang bawaan grafik atau titik ke persegi panjang. Mari fokus pada dua fungsi lainnya:
Prototipe fungsi: SetWindowRgn(
HWND hWnd, //pegangan formulir saat ini
HRGN hRgn, //pegangan wilayah saat ini
BOOL bRedraw, //Gambar ulang logo
)
Fungsi: Fungsi ini meneruskan pegangan area yang dibuat sebagai parameter ke pegangan formulir saat ini, dan menggambar formulir di dalam area tersebut;
Prototipe fungsi: GabungkanRgn(
HRGN hrgnDest, // menangani untuk terhubung ke area tujuan
HRGN hrgnSrc1, //Pegangan pertama yang terhubung ke area sumber
HRGN hrgnSrc2, // Pegangan area sumber koneksi kedua
int fnCombineMode // mode koneksi
)
Fungsi: Fungsi ini menggabungkan dua area menjadi area baru, dimana mode koneksi dapat mengambil nilai berikut:
Efek nilai parameter
RGN_AND membuat wilayah baru dari perpotongan bagian umum wilayah 1 dan wilayah 2
RGN_COPY membuat salinan wilayah 1 sebagai wilayah baru
RGN_DIFF menghubungkan bagian-bagian yang termasuk dalam area 1 tetapi bukan area 2 ke area baru
RGN_OR menghubungkan seluruh bagian area 1 dan area 2, yaitu gabungan
RGN_XOR. Hubungkan semua bagian area 1 dan area 2 dan lepaskan bagian-bagian yang sama
2. Bentuk berongga
Ciri khas bentuk ini adalah bentuknya yang memiliki dua ujung, dan ada bagian yang digali di tengahnya. Misalnya, tambahkan kode berikut ke file unit Delphi:
prosedur TForm1.FormCreate(Pengirim: TObject);
var
FRegion3:Pegangan;
mulai
Canvas.Font.Name:='Xingkai Cina';//Setel fontnya
Canvas.Font.Size:=100;//Setel ukuran font
BeginPath(Canvas.Handle); //Dapatkan garis luar yang digambar di vanvas
TextOut(form1.Canvas.Handle,0,20,'Program Spring and Autumn',8);//Potong area yang ditempati oleh empat kata "Program Spring and Autumn"
EndPath(Kanvas.Handle);
FRegion3:=PathToRegion(Canvas.Handle);//Tetapkan wilayah di atas ke formulir
SetwindowRgn(Handle,FRegion3,True);//Mulai menggambar
akhir;
Tiga fungsi API terutama digunakan di sini:
Prototipe fungsi: BOOL BeginPath (HDC hdc //pegangan lingkungan perangkat)
Fungsi: Mulai menerima lintasan jalur lingkungan perangkat saat ini;
Prototipe fungsi: BOOL EndPath(HDC hdc //pegangan lingkungan perangkat)
Fungsi: Berhenti menerima dan menetapkan lintasan jalur yang diterima ke pegangan lingkungan perangkat saat ini
Prototipe fungsi BOOL TextOut(
HDC hdc,//pegangan konteks perangkat
int nXStart,//koordinat X dari posisi awal
int nYStart,//koordinat Y dari posisi awal
LPCTSTR lpString,//Alamat string
int cbString //Jumlah karakter yang terdapat dalam string (perhatikan bahwa satu karakter Cina menempati dua karakter)
)
Fungsi: Menggambar string yang diberikan pada posisi yang ditentukan.
Ringkasan: Mempelajari cara menggunakan API untuk pemrograman dengan mahir adalah keterampilan yang sangat penting, dan terkadang dapat mencapai hasil yang tidak terduga. Teknik-teknik di atas dimaksudkan untuk menginspirasi orang lain. Saya harap Anda dapat memanfaatkan sepenuhnya berbagai teknik dan menggunakan imajinasi Anda untuk merancang bentuk yang lebih mempesona dan mempercantik program Anda sendiri.