• 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

Form có hình dạng theo một hình ảnh bất kỳ

Các thủ thuật liên quan đến việc xử lý ứng dụng, biểu mẫu và control
vinhphuoc91
Thành viên tích cực
Thành viên tích cực
Bài viết: 146
Ngày tham gia: T.Tư 26/03/2008 5:52 pm
Đến từ: Phú Yên
Been thanked: 15 time
Liên hệ:

Form có hình dạng theo một hình ảnh bất kỳ

Gửi bàigửi bởi vinhphuoc91 » T.Sáu 28/03/2008 8:19 pm

Thủ thuật: Form có hình dạng theo một hình ảnh bất kỳ
Tác giả: Nobi
Mô tả: Làm cho form có hình dạng theo 1 ảnh bất kỳ


Thêm vào Form 1 picturebox.
Set thuộc tính BorderStyle của Form = 0 (None)
Thêm vào chương trình đoạn mã sau :

Mã: Chọn hết

  1. Option Explicit
  2.  
  3. Private Const HTCAPTION = 2
  4. Private Const WM_NCLBUTTONDOWN = &HA1
  5. Private Declare Function ReleaseCapture Lib "user32" () As Long
  6. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  7.  
  8. Private Const RGN_OR = 2
  9. Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
  10. Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
  11. Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
  12. Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
  13. Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
  14. Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
  15.  
  16. Private Function MakeRegion(picSkin As PictureBox) As Long
  17.     Dim x As Long, y As Long, StartLineX As Long
  18.     Dim LineRegion As Long
  19.     Dim FullRegion As Long
  20.     Dim TransparentColor As Long
  21.     Dim InFirstRegion As Boolean
  22.     Dim InLine As Boolean
  23.     Dim hdc As Long
  24.     Dim picWidth As Long
  25.     Dim picHeight As Long
  26.  
  27.     hdc = picSkin.hdc
  28.     picWidth = picSkin.ScaleWidth
  29.     picHeight = picSkin.ScaleHeight
  30.  
  31.     InFirstRegion = True: InLine = False
  32.     x = y = StartLineX = 0
  33.     TransparentColor = RGB(255, 0, 255) 'Chọn màu muốn lọai bỏ trong picture, ở đây là màu hồng, hoặc lấy màu ở pixel đầu tiên
  34.     'TransparentColor = GetPixel(hdc, 0, 0)
  35.  
  36.     For y = 0 To picHeight - 1
  37.         For x = 0 To picWidth - 1
  38.             If GetPixel(hdc, x, y) = TransparentColor Or x = picWidth Then
  39.                 If InLine Then
  40.                     InLine = False
  41.                     LineRegion = CreateRectRgn(StartLineX, y, x, y + 1)
  42.  
  43.                     If InFirstRegion Then
  44.                         FullRegion = LineRegion
  45.                         InFirstRegion = False
  46.                     Else
  47.                         CombineRgn FullRegion, FullRegion, LineRegion, RGN_OR
  48.                         DeleteObject LineRegion
  49.                     End If
  50.                 End If
  51.             Else
  52.                 If Not InLine Then
  53.                     InLine = True
  54.                     StartLineX = x
  55.                 End If
  56.             End If
  57.         Next
  58.     Next
  59.      MakeRegion = FullRegion
  60. End Function
  61.  
  62. Private Sub Form_DblClick()
  63.     Unload Me
  64. End Sub
  65.  
  66. Private Sub Form_Load()
  67.     Picture1.ScaleMode = 3
  68.     Picture1.AutoSize = True
  69.     Picture1.Visible = False
  70.     'Picture1.Picture = LoadPicture("C:\skin.bmp") 'Ðường dẩn file ảnh cần thiết
  71.     'If Picture1.Picture <> 0 Then
  72.         Me.Picture = Picture1.Picture
  73.         SetWindowRgn Me.hwnd, MakeRegion(Picture1), True
  74.     'End If
  75. End Sub
  76.  
  77. Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  78.     If Button = vbLeftButton Then
  79.         ReleaseCapture
  80.         SendMessage Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
  81.     End If
  82. End Sub
Tập tin đính kèm
Form_hinh_dang_bat_ky.rar
Form hình dạng bất kỳ
(154.91 KiB) Đã tải 4745 lần
bieumau_nuatrongsuot.rar
Form trong suốt
(23.71 KiB) Đã tải 2117 lần
Sửa lần cuối bởi vinhphuoc91 vào ngày T.Tư 02/04/2008 11:16 pm với 1 lần sửa.


My website : http://tinthoitrang.net

Hình đại diện của người dùng
hoangluyen
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 61
Ngày tham gia: T.Năm 03/04/2008 3:26 pm
Đến từ: Hải Hậu - Nam Định
Liên hệ:

Re: Form có hình dạng theo một hình ảnh bất kỳ

Gửi bàigửi bởi hoangluyen » CN 06/04/2008 8:04 pm

Vinhphuoc91 này!
Mình đã sử dụng phưong pháp làm mất nền, chỉ còn lại ảnh. Vậy cái này không biết có phải là bỏ nền chỉ còn ảnh không. Vì mình thấy phương pháp làm mất nền chỉ còn lại ảnh sẽ rất bất tiện ở hai chỗ.
Thứ nhất: Nếu mà mình muốn làm đổ bóng form thì nó chỉ đổ bóng theo hình vuông của form chứ nó không theo hình dạng ảnh.
Thứ Hai : Nếu mình muốn form load sáng dần thì nó sẽ bị xung đột hiệu ứng. Như vậy là không thể được đúng ko?
Bạn có phưong pháp mới gì không?
..::Chỉ có tình yêu (*) và lao động sẽ làm cho con người trở nên đẹp hoàn mĩ ::..
-------------------------------------------------------------------

giongto35
Thành viên danh dự
Thành viên danh dự
Bài viết: 194
Ngày tham gia: T.Năm 19/04/2007 10:17 am
Đến từ: Đà Nẵng City
Been thanked: 1 time
Liên hệ:

Re: Form có hình dạng theo một hình ảnh bất kỳ

Gửi bàigửi bởi giongto35 » CN 06/04/2008 8:22 pm

Thứ Hai : Nếu mình muốn form load sáng dần thì nó sẽ bị xung đột hiệu ứng. Như vậy là không thể được đúng ko?

Hình như cách nobi ko bị xung đột với cái này vi cách của nobi ko dùng setlayeredwindow
Đổ bóng là sao nhỉ ?
________________________________________________________________________________________________
. . . . . . . . . . . . .. .

Hình đại diện của người dùng
hoangluyen
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 61
Ngày tham gia: T.Năm 03/04/2008 3:26 pm
Đến từ: Hải Hậu - Nam Định
Liên hệ:

Re: Form có hình dạng theo một hình ảnh bất kỳ

Gửi bàigửi bởi hoangluyen » T.Ba 08/04/2008 12:30 pm

Tức là Shardow của form ấy.
Nếu bạn đã sử dụng Corel Draw 12 hoặc photoshop 7.0 thì bạn thấy nó có hình lông chim hay quả cầu bay đểu có shardow đấy thôi. Em thấy thích lắm nhưng ko bít làm thế bào cả.
..::Chỉ có tình yêu (*) và lao động sẽ làm cho con người trở nên đẹp hoàn mĩ ::..
-------------------------------------------------------------------

Hình đại diện của người dùng
hdn
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 319
Ngày tham gia: T.Tư 26/03/2008 7:09 pm
Has thanked: 1 time
Been thanked: 4 time

Re: Form có hình dạng theo một hình ảnh bất kỳ

Gửi bàigửi bởi hdn » T.Ba 08/04/2008 12:48 pm

Để đổ bóng cho form (bất kì hình dạng nào) bạn có thể làm như sau:
Khai báo:

Mã: Chọn hết

  1.  
  2. Private Declare Function GetClassLong Lib "user32.dll" Alias "GetClassLongA" _
  3.   (ByVal hWnd As Long, ByVal nIndex As Long) As Long
  4.  
  5. Private Declare Function SetClassLong Lib "user32.dll" Alias "SetClassLongA" _
  6.   (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  7.  
  8. Private Const GCL_STYLE = -26
  9. Private Const CS_DROPSHADOW = &H20000
  10.  
  11. Public Sub DropShadow(hWnd As Long)
  12.     SetClassLong hWnd, GCL_STYLE, GetClassLong(hWnd, GCL_STYLE) Or CS_DROPSHADOW
  13. End Sub
  14.  

Cách dùng

Mã: Chọn hết

  1.  
  2. Private Sub Form_Load()
  3.     DropShadow Me.hWnd
  4. End Sub
  5.  


Đổ bóng cho cái form_có_hình_dạng_bất_kì mà vinhphuoc đã up ở trên:
bong.png

Dobong.rar
(155.15 KiB) Đã tải 1371 lần
:|

Hình đại diện của người dùng
hoangluyen
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 61
Ngày tham gia: T.Năm 03/04/2008 3:26 pm
Đến từ: Hải Hậu - Nam Định
Liên hệ:

Re: Form có hình dạng theo một hình ảnh bất kỳ

Gửi bàigửi bởi hoangluyen » T.Ba 08/04/2008 1:17 pm

Đúng rồi. Bác có tuyệt chiêu hay quá.Rất vui làm quyen với bác.
Cảm ơn bác nhiều nhé
Em thấy thích cái này rồi đấy. Em đã giải quyết được thắc mắc này lâu lắm rồi.
Haha thích quá.
..::Chỉ có tình yêu (*) và lao động sẽ làm cho con người trở nên đẹp hoàn mĩ ::..
-------------------------------------------------------------------

Hình đại diện của người dùng
hdn
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 319
Ngày tham gia: T.Tư 26/03/2008 7:09 pm
Has thanked: 1 time
Been thanked: 4 time

Re: Form có hình dạng theo một hình ảnh bất kỳ

Gửi bàigửi bởi hdn » T.Tư 09/04/2008 12:06 pm

:)
Tuy nhiên vẫn chưa đổi màu + độ "to" cho bóng đc :|
:|

Hình đại diện của người dùng
onlysoft
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 330
Ngày tham gia: T.Tư 26/03/2008 6:32 pm
Đến từ: ONLYSOFT
Been thanked: 8 time

Re: Form có hình dạng theo một hình ảnh bất kỳ

Gửi bàigửi bởi onlysoft » T.Năm 10/04/2008 8:44 am

Tốc độc của vỉnh phước làm, cái trên lần trước tui hỏi nobi, cái giưới của thành trinick, cái của trinick thì nhanh nhưng ko đáp ứng được nhu cầu làm skin, vì nó đòi ảnh GIF gọt sẳn, cái của nobi thì đáp ứng được nhưng quá chậm :((
:x Tin học là cuộc sống, Lập trình là người yêu, Vợ là computer :x
Tôi yêu tin học, Tin học lập trình, Để lập trình tôi dùng VB, Tôi là B-)nly

kysudat
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 60
Ngày tham gia: T.Năm 18/09/2008 1:26 pm
Has thanked: 1 time

Re: Form có hình dạng theo một hình ảnh bất kỳ

Gửi bàigửi bởi kysudat » T.Sáu 17/10/2008 1:44 pm

Cám ơn bạn rất nhiều.
Bạn cho mình hỏi làm cách nào mình có thể tạo một tấm ảnh có nền trong suốt như vậy được

Minh đạt

Hình đại diện của người dùng
tuoi tho
Bài viết: 6
Ngày tham gia: T.Năm 18/09/2008 7:40 pm

Re: Form có hình dạng theo một hình ảnh bất kỳ

Gửi bàigửi bởi tuoi tho » T.Tư 19/11/2008 8:52 pm

Hay quá.....nhưng cho mình hởi...hơi tham một tý...có cách nào làm cho form trở nên trong suốt không vậy?????
GoAhead

tidus
Bài viết: 1
Ngày tham gia: T.Hai 17/05/2010 9:58 pm

Re: Form có hình dạng theo một hình ảnh bất kỳ

Gửi bàigửi bởi tidus » T.Hai 17/05/2010 10:01 pm

cho mình hỏi , làm thế nào để hiện textbox, label,... trên ảnh đó,

Hình đại diện của người dùng
vietteiv
Quản trị
Quản trị
Bài viết: 1318
Ngày tham gia: T.Bảy 10/02/2007 12:17 am
Đến từ: Cung cấp giải pháp quản lý doanh nghiệp, dự án, tư vấn xây dựng
Has thanked: 6 time
Been thanked: 69 time
Liên hệ:

Re: Form có hình dạng theo một hình ảnh bất kỳ

Gửi bàigửi bởi vietteiv » T.Ba 18/05/2010 8:14 am

thì... vẽ cái textbox với label lên ảnh đó là xong :D

dantri.com
Thành viên chính thức
Thành viên chính thức
Bài viết: 17
Ngày tham gia: T.Sáu 18/02/2011 8:15 pm

Re: Form có hình dạng theo một hình ảnh bất kỳ

Gửi bàigửi bởi dantri.com » T.Ba 15/11/2011 1:21 pm

tại sao mình tải project mẫu thì ok
copy code sang 1 project khác thì lại không được :((


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.1 khách