Trang 1 trên 1

Tạo giao diện gradient từ màu này đến màu kia cho Form

Đã gửi: T.Ba 16/12/2008 4:15 pm
gửi bởi lanlan
Thủ thuật: Tạo giao diện gradient từ màu này đến màu kia cho Form
Tác giả: Sưu tầm
Mô tả: Có rất nhìu cách để tạo ra một form theo ý thích của minh có thể dùng hình ảnh nhưng hơi nặng nay em đưa ra một cách mọi người có thể cùng tham gia để phát triển
bắt đầu từ việc tạo màu nền cho form
lưu ý chỉ dùng bằng code ;)


Re: Tạo Giao Diên Cho Form

Đã gửi: T.Ba 16/12/2008 9:03 pm
gửi bởi truongphu
1- tôi ủng hộ lanlan ngày càng tham gia nhiệt tình
2- Code tương tự như lanlan gởi thì có nhiều, nhưng dù sao tôi cũng ghi nhận code lanlan là khá ngắn
3- trên code lanlan tôi viết lại như sau:

Mã: Chọn hết

  1. Private Sub Form_Paint()
  2.  Me.DrawWidth = 8:      Me.ScaleWidth = 100
  3.     For intLoop = 0 To Me.ScaleWidth
  4.         Me.Line (intLoop, 0)-(intLoop - 1, Screen.Height), RGB(30, intLoop * 1.2, intLoop / 2)
  5.     Next
  6. End Sub

Trong hàm RGB(x,y,z), mỗi trị x,y,z không quá 255. Bạn có thể chỉnh tùy thích để đạt được màu mong muốn

Ghi chú: Sửa 10/2/09: Sự kiện Form_Paint() chứ không phải Form_Load()

Re: Tạo giao diện gradient từ màu này đến màu kia cho Form

Đã gửi: T.Hai 13/07/2009 3:46 pm
gửi bởi T7
Cách tô màu gradient này nếu biết kết hợp thêm với 1 cái timer và một số phép tính để thay đổi màu thì ta sẽ có những hiệu ứng rất đẹp :D
http://caulacbovb.com/forum/viewtopic.php?f=52&t=3396&p=21177&hilit=Form+chuy%E1%BB%83n+m%C3%A0u#p21177

@chị lanlan: Thay vì tô từng đường line như vậy thì ta có thể dùng hàm api GradientFillRect :D , xử lí nhanh hơn 1 tí ;)
API - Guide đã viết:

Mã: Chọn hết

  1. Private Type TRIVERTEX
  2.     x As Long
  3.     y As Long
  4.     Red As Integer 'Ushort value
  5.     Green As Integer 'Ushort value
  6.     Blue As Integer 'ushort value
  7.     Alpha As Integer 'ushort
  8. End Type
  9. Private Type GRADIENT_RECT
  10.     UpperLeft As Long  'In reality this is a UNSIGNED Long
  11.     LowerRight As Long 'In reality this is a UNSIGNED Long
  12. End Type
  13.  
  14. Const GRADIENT_FILL_RECT_H As Long = &H0 'In this mode, two endpoints describe a rectangle. The rectangle is
  15. 'defined to have a constant color (specified by the TRIVERTEX structure) for the left and right edges. GDI interpolates
  16. 'the color from the top to bottom edge and fills the interior.
  17. Const GRADIENT_FILL_RECT_V  As Long = &H1 'In this mode, two endpoints describe a rectangle. The rectangle
  18. ' is defined to have a constant color (specified by the TRIVERTEX structure) for the top and bottom edges. GDI interpolates
  19. ' the color from the top to bottom edge and fills the interior.
  20. Const GRADIENT_FILL_TRIANGLE As Long = &H2 'In this mode, an array of TRIVERTEX structures is passed to GDI
  21. 'along with a list of array indexes that describe separate triangles. GDI performs linear interpolation between triangle vertices
  22. 'and fills the interior. Drawing is done directly in 24- and 32-bpp modes. Dithering is performed in 16-, 8.4-, and 1-bpp mode.
  23. Const GRADIENT_FILL_OP_FLAG As Long = &HFF
  24.  
  25. Private Declare Function GradientFillRect Lib "msimg32" Alias "GradientFill" (ByVal hdc As Long, pVertex As TRIVERTEX, ByVal dwNumVertex As Long, pMesh As GRADIENT_RECT, ByVal dwNumMesh As Long, ByVal dwMode As Long) As Long
  26. Private Function LongToUShort(Unsigned As Long) As Integer
  27.     'A small function to convert from long to unsigned short
  28.     LongToUShort = CInt(Unsigned - &H10000)
  29. End Function
  30. Private Sub Form_Load()
  31.     'KPD-Team 1999
  32.     'URL: http://www.allapi.net/
  33.     'E-Mail: KPDTeam@Allapi.net
  34.     'API uses pixels
  35.     Me.ScaleMode = vbPixels
  36. End Sub
  37. Private Sub Form_Paint()
  38.     Dim vert(1) As TRIVERTEX
  39.     Dim gRect As GRADIENT_RECT
  40.  
  41.     'from black
  42.     With vert(0)
  43.         .x = 0
  44.         .y = 0
  45.         .Red = 0&
  46.         .Green = 0& '&HFF&   '0&
  47.         .Blue = 0&
  48.         .Alpha = 0&
  49.     End With
  50.  
  51.     'to blue
  52.     With vert(1)
  53.         .x = Me.ScaleWidth
  54.         .y = Me.ScaleHeight
  55.         .Red = 0&
  56.         .Green = 0&
  57.         .Blue = LongToUShort(&HFF00&)
  58.         .Alpha = 0&
  59.     End With
  60.  
  61.     gRect.UpperLeft = 0
  62.     gRect.LowerRight = 1
  63.  
  64.     GradientFillRect Me.hdc, vert(0), 2, gRect, 1, GRADIENT_FILL_RECT_H
  65. End Sub