Umumnya sebuah form yang kita buat menggunakan delphi bentuknya adalah kotak, namun sebenarnya kita bisa membuat form dengan bentuk yang tidak biasa seperti lingkaran, segitiga, poligon atau bahkan bentuk sesuai yang kita inginkan, misalnya mengikuti bentuk gambar.
Untuk membuat (baca:memotong) form menjadi tidak kotak kita menggunakan fungsi dari Windows API yaitu SetWindowRgn.
Pada SetWindowRgn telah disediakan bentuk-bentuk umum seperti kotak, lingkaran atau segi banyak.
Lantas .. bagaimana cara membuat form dengan bentuk yang tidak umum seperti gambar diatas?
Untuk membuat region dengan bentuk tidak biasa perlu dibuat (baca: copas dari internet) unit (fungsi) sehingga lebih mudah dan tidak perlu pusing.
Langsung saja ..
Pertama-tama siapkan dua buah gambar seperti berikut yang nantinya akan diload ke TImage (imgNormal & imgMask).
Gambar pertama diload ke imgNormal
Gambar kedua diload ke imgMask
Ukuran dari kedua gambar harus sama persis.
… yang perlu diperhatikan dalam membuatnya adalah ..
- Set property BorderStyle pada form menjadi bsNone.
- Siapkan 2 buat TImage (imgNormal & imgMask), imgNormal untuk menyimpan gambar yg tampil dan imgMask untuk menyimpan gambar pemotong.
- Set Property Left & Top imgNormal menjadi 0 sehingga akan berada di kiri atas form.
- Set Propeety AutoSize imgNormal menjadi True.
- Set property visible pada imgMask menjadi False.
Berikut ini contoh potongan kode yang akan kita tulis di event OnCreate
procedure TFMain.FormCreate(Sender: TObject); var hr,br: HRGN; bmp: TBitmap; begin bmp:=TBitmap.Create; bmp.Assign(ImgMask.Picture.Graphic); hr:=BitmapToRegion(bmp.Handle); bmp.Free; br:=CreateRectRgnIndirect(mInfo.BoundsRect); CombineRgn(hr,hr,br,RGN_OR); br:=CreateRectRgnIndirect(btClose.BoundsRect); CombineRgn(hr,hr,br,RGN_OR); SetWindowRgn(Handle,hr,True); end;
Karena form ini tidak mempunyai Caption, lantas bagaimana caranya jika kita ingin menggesernya?
Agar form bisa kita geser dengan Click-Drag pada selain Caption, maka kita harus melakukan intercept pada Message WM_NCHITTEST seperti kode berikut ini
private { Private declarations } procedure GeserForm(var msg: TWMNCHitTest); message WM_NCHITTEST;
Bagi yang tertarik untuk membuat aplikasi dengan form seperti gambar diatas silahkan download contoh project beserta source codenya di ..
https://www.box.com/s/n29a3n5x10srvrr1jvqg
Semoga bermanfaat
Wassalam
Imam Chalimi Muslim
Luar biasa!
Thanks bang @Imam, Insya Allah semakin bertambah ilmunya dan makin berkah 🙂
ijin copas ya pak Imam….
silahkan mas 😀