• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Bo tròn cạnh cho cửa sổ khi BorderStyle = 0

Các thủ thuật liên quan đến việc xử lý ứng dụng, biểu mẫu và control
User avatar
playgemboy
Thành viên danh dự
Thành viên danh dự
Posts: 289
Joined: Sun 13/04/2008 6:10 am
Location: Bình Phú, Quận 6, TP.HCM
Been thanked: 1 time
Contact:

Bo tròn cạnh cho cửa sổ khi BorderStyle = 0

Postby playgemboy » Fri 04/07/2008 8:46 pm

Thủ thuật: Bo tròn cạnh cho cửa sổ khi BorderStyle = 0
Tác giả: playgemboy
Mô tả: Bo góc cho các cạnh của cửa sổ, tạo đường uốn tại 4 góc cạnh


Em thấy có nhiều bạn tự thiết kế Skin cho chương trình của mình,chỉnh BorderStyle = 0 và chèn hình ảnh vào, một số bạn còn vướng ở chỗ làm cho 4 góc cửa sổ tròn đi. Thông thường sẽ áp dụng cách tạo form theo bất kì hình dạng nào, nhưng em có code này hay hơn, đơn giản hơn và cũng nhanh hơn,không cần phải vẽ các màu đặc biệt (thường là hồng) tại các góc.
Cần 1 form,BorderStyle = 0; 1 nút lệnh

Code: Select all

  1. Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long
  2. Private Declare Function CreateRoundRectRgn Lib "gdi32.dll" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
  3.  
  4. Private Declare Function SetWindowRgn Lib "user32.dll" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
  5.  
  6. Private Sub Command1_Click()
  7. RoundForm Form1
  8. End Sub
  9.  
  10. Sub RoundForm(ByVal fr As Form)
  11. fr.ScaleMode = 3
  12. Dim hRgn As Long  
  13. hRgn = CreateRoundRectRgn(0,0, fr.ScaleWidth, fr.ScaleHeight, 5, 5)
  14. SetWindowRgn fr.hWnd, hRgn, True
  15. DeleteObject hRgn
  16. End Sub

Rất nhanh đúng không?


<I Come Back>

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

Re: Bo tròn cạnh cho cửa sổ khi BorderStyle = 0

Postby clarkkent » Sun 06/07/2008 2:59 am

Cái này hay thật, trước giờ nghĩ là không thể ... =D>
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

User avatar
w2art
Thành viên chính thức
Thành viên chính thức
Posts: 48
Joined: Sat 26/04/2008 9:00 pm
Location: Đà nẵng
Contact:

Re: Bo tròn cạnh cho cửa sổ khi BorderStyle = 0

Postby w2art » Mon 14/07/2008 12:43 pm

hi playgameboy share cái này hay thật đấy, nhưng có thể làm cho nó có viền xung quanh được không.
Nếu được thì w2 sẽ change cái giao diện cho STool lại, đỡ công design template trên Photoshop >:)
Chat với nick yahoo: econbot để kiếm tra ẩn nick và các dịch vụ khác :D

User avatar
vo_minhdat2007
Quản trị
Quản trị
Posts: 2227
Joined: Sun 17/07/2005 1:40 am
Has thanked: 13 times
Been thanked: 87 times
Contact:

Re: Bo tròn cạnh cho cửa sổ khi BorderStyle = 0

Postby vo_minhdat2007 » Mon 14/07/2008 12:57 pm

w2art wrote:hi playgameboy share cái này hay thật đấy, nhưng có thể làm cho nó có viền xung quanh được không.
Nếu được thì w2 sẽ change cái giao diện cho STool lại, đỡ công design template trên Photoshop >:)

Draw tiếp 4 lines nữa, có lẽ được!

User avatar
playgemboy
Thành viên danh dự
Thành viên danh dự
Posts: 289
Joined: Sun 13/04/2008 6:10 am
Location: Bình Phú, Quận 6, TP.HCM
Been thanked: 1 time
Contact:

Re: Bo tròn cạnh cho cửa sổ khi BorderStyle = 0

Postby playgemboy » Fri 25/07/2008 2:17 pm

Em cũng đã nghĩ đến rồi nè: Tạo viền cho Form bằng code :D
viewtopic.php?f=29&t=1960
<I Come Back>

luckyst
Thành viên chính thức
Thành viên chính thức
Posts: 21
Joined: Tue 29/07/2008 8:32 am
Location: Sóc Trăng
Has thanked: 1 time
Contact:

Re: Bo tròn cạnh cho cửa sổ khi BorderStyle = 0

Postby luckyst » Tue 29/07/2008 9:06 am

Thật ra đây là thủ thuật dùng để vẽ form có hình dạng bất kỳ (như ngôi sao-có trong diễn đàn rồi, ...) Bạn playgemboy vẽ vòng tròn cắt 4 góc của form, nhưng do form nhỏ hơn vòng tròn nên bị cắt 4 góc
Forrmbo.GIF
Forrmbo.GIF (2.57 KiB) Viewed 4816 times


Đây là một ý kiến hay, chúng ta có thể tạo ra một số Form có hình dạng rất khó vẽ bằng cách kết hợp các hình vẽ lại với nhau.

Hoặc có thể xem bài vẽ Form theo một ảnh cho trước cũng được.

User avatar
playgemboy
Thành viên danh dự
Thành viên danh dự
Posts: 289
Joined: Sun 13/04/2008 6:10 am
Location: Bình Phú, Quận 6, TP.HCM
Been thanked: 1 time
Contact:

Re: Bo tròn cạnh cho cửa sổ khi BorderStyle = 0

Postby playgemboy » Tue 29/07/2008 3:17 pm

luckyst wrote:Thật ra đây là thủ thuật dùng để vẽ form có hình dạng bất kỳ (như ngôi sao-có trong diễn đàn rồi, ...) Bạn playgemboy vẽ vòng tròn cắt 4 góc của form, nhưng do form nhỏ hơn vòng tròn nên bị cắt 4 góc
The attachment Forrmbo.GIF is no longer available


Đây là một ý kiến hay, chúng ta có thể tạo ra một số Form có hình dạng rất khó vẽ bằng cách kết hợp các hình vẽ lại với nhau.


Theo mình khônng phải như vậy, đọc hàm API

Code: Select all

  1. Private Declare Function CreateRoundRectRgn Lib "gdi32.dll" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
thì có thể đoán rằng đây là hàm tạo một RECT đã được Round :D, sau đó SetWindowRgn lại cho form, bạn có thể thử kiểm tra bằng cách thay đổi các giá trị (theo mình hiểu):
X1,Y1: trị trí bắt đầu cho RECT (đơn vị Pixel)
bạn thử cho nó lùi về bên trái bằng cách cho X1 = -30 xem->bên trái form sẽ không được bo tròn nữa (do cạnh được bo của Rect bị lùi âm -> không ảnh hưởng tới hình dạng form)
demo.JPG
demo.JPG (8.57 KiB) Viewed 4768 times

X2,Y2: Vị trí kết thúc của RECT(đơn vị Pixel), cách thử cũng tương tự
X3,Y3: Cái này mình không rõ, nhưng qua "phép thử" thì có thể nó quy định độ uốn, nêu cho 2 số này bằng nhau thì nó sẽ bo đều từ 2 phía, càng lớn thì nó bo vào càng nhiều.
Hàm CreateRoundRectRgn(0,0, fr.ScaleWidth, fr.ScaleHeight, 5, 5) là mình tạo một RoundRect có kích thước đúng bằng form, chỉ khác nó đã Round mà thôi. Không biết có gì sai không đây :-?
Hoặc có thể xem bài vẽ Form theo một ảnh cho trước cũng được.
Cái đó chỉ nên dùng khi làm những form có hình dạng ko đặc biệt,nó tạo một Region men theo các đường màu đặc biệt quy định trước-> khá lâu khi load form, còn các hình như: tròn, elip, Rect, RoundRect... đã có hàm API tạo, tội gì không xài :D
<I Come Back>

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

Re: Bo tròn cạnh cho cửa sổ khi BorderStyle = 0

Postby clarkkent » Tue 29/07/2008 3:22 pm

luckyst wrote:Thật ra đây là thủ thuật dùng để vẽ form có hình dạng bất kỳ (như ngôi sao-có trong diễn đàn rồi, ...) Bạn playgemboy vẽ vòng tròn cắt 4 góc của form, nhưng do form nhỏ hơn vòng tròn nên bị cắt 4 góc
Forrmbo.GIF


Đây là một ý kiến hay, chúng ta có thể tạo ra một số Form có hình dạng rất khó vẽ bằng cách kết hợp các hình vẽ lại với nhau.

Hoặc có thể xem bài vẽ Form theo một ảnh cho trước cũng được.

He He ! Bạn nói sao chứ tui bo nó vừa khít luôn đâu có như vậy, xem sản phẩm này
http://caulacbovb.com/forum/viewtopic.php?f=39&t=2781
Sory đã quảng cáo :D
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

User avatar
playgemboy
Thành viên danh dự
Thành viên danh dự
Posts: 289
Joined: Sun 13/04/2008 6:10 am
Location: Bình Phú, Quận 6, TP.HCM
Been thanked: 1 time
Contact:

Re: Bo tròn cạnh cho cửa sổ khi BorderStyle = 0

Postby playgemboy » Tue 29/07/2008 9:38 pm

Chắc bạn ấy bị nhầm một chút. Nhưng cái ý bạn ấy đưa ra cũng hay đấy chứ :)
<I Come Back>


Return to “[VB] Ứng dụng - Form và Control”

Who is online

Users browsing this forum: No registered users and 2 guests