• 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
Hình đại diện của người dùng
playgemboy
Thành viên danh dự
Thành viên danh dự
Bài viết: 289
Ngày tham gia: CN 13/04/2008 6:10 am
Đến từ: Bình Phú, Quận 6, TP.HCM
Been thanked: 1 time
Liên hệ:

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

Gửi bàigửi bởi playgemboy » T.Sáu 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

Mã: Chọn hết

  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>

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

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

Gửi bàigửi bởi clarkkent » CN 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...

Hình đại diện của người dùng
w2art
Thành viên chính thức
Thành viên chính thức
Bài viết: 48
Ngày tham gia: T.Bảy 26/04/2008 9:00 pm
Đến từ: Đà nẵng
Liên hệ:

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

Gửi bàigửi bởi w2art » T.Hai 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

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

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

Gửi bàigửi bởi vo_minhdat2007 » T.Hai 14/07/2008 12:57 pm

w2art đã viết: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!

Hình đại diện của người dùng
playgemboy
Thành viên danh dự
Thành viên danh dự
Bài viết: 289
Ngày tham gia: CN 13/04/2008 6:10 am
Đến từ: Bình Phú, Quận 6, TP.HCM
Been thanked: 1 time
Liên hệ:

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

Gửi bàigửi bởi playgemboy » T.Sáu 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
Bài viết: 21
Ngày tham gia: T.Ba 29/07/2008 8:32 am
Đến từ: Sóc Trăng
Has thanked: 1 time
Liên hệ:

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

Gửi bàigửi bởi luckyst » T.Ba 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) Đã xem 4140 lần


Đâ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.

Hình đại diện của người dùng
playgemboy
Thành viên danh dự
Thành viên danh dự
Bài viết: 289
Ngày tham gia: CN 13/04/2008 6:10 am
Đến từ: Bình Phú, Quận 6, TP.HCM
Been thanked: 1 time
Liên hệ:

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

Gửi bàigửi bởi playgemboy » T.Ba 29/07/2008 3:17 pm

luckyst đã viết: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
Tập tin đính kèm Forrmbo.GIF hiện tại không còn trên máy chủ


Đâ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

Mã: Chọn hết

  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) Đã xem 4092 lần

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>

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

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

Gửi bàigửi bởi clarkkent » T.Ba 29/07/2008 3:22 pm

luckyst đã viết: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...

Hình đại diện của người dùng
playgemboy
Thành viên danh dự
Thành viên danh dự
Bài viết: 289
Ngày tham gia: CN 13/04/2008 6:10 am
Đến từ: Bình Phú, Quận 6, TP.HCM
Been thanked: 1 time
Liên hệ:

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

Gửi bàigửi bởi playgemboy » T.Ba 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>


Quay về “[VB] Ứng dụng - Form và Control”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.0 khách