• 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

Làm Form trong suốt (Nhưng ko trong suốt Controls)

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
T7
Thành viên danh dự
Thành viên danh dự
Bài viết: 415
Ngày tham gia: T.Năm 24/05/2007 8:19 pm
Đến từ: Long Xuyên - An Giang
Been thanked: 12 time
Liên hệ:

Làm Form trong suốt (Nhưng ko trong suốt Controls)

Gửi bàigửi bởi T7 » CN 18/01/2009 10:13 am

Thủ thuật: Làm Form trong suốt (Nhưng ko trong suốt Controls)
Tác giả: T-7
Mô tả: Thường thì khi làm trong suốt một form thì các control cũng bị trong suốt theo, nhưng đôi khi trong lập trình phần mềm thì ta chỉ cần cho cái form trong suốt thôi là đủ. Vậy nên có lẽ đoạn code này sẽ giúp ít cho mọi người đấy :D

Chú ý: Nhớ đặt thuộc tính BorderStyle của Form là: 0 - None nhé ;)



Mã: Chọn hết

  1. Const GWL_EXSTYLE = (-20)
  2. Const WS_EX_TRANSPARENT = &H20&
  3. Const HWND_NOTOPMOST = -2
  4. Const SWP_FRAMECHANGED = &H20
  5. Const SWP_NOMOVE = &H2
  6. Const SWP_NOSIZE = &H1
  7.  
  8. Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  9. Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal Cx As Long, ByVal Cy As Long, ByVal wFlags As Long) As Long
  10.  
  11. Private Sub Form_Load()
  12. SetWindowLong Me.hWnd, GWL_EXSTYLE, WS_EX_TRANSPARENT
  13. SetWindowPos Me.hWnd, HWND_NOTOPMOST, 0&, 0&, 0&, 0&, SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOSIZE
  14. End Sub
  15.  
Tập tin đính kèm
untitled.JPG
Ảnh minh họa
untitled.JPG (16.62 KiB) Đã xem 8464 lần


While (i <= you) i++;

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: Làm Form trong suốt (Nhưng ko trong suốt Controls)

Gửi bàigửi bởi playgemboy » T.Bảy 24/01/2009 8:24 am

ồ, rất hay, nhưng xem ra nó không thật sự là trong suốt đâu T7 ạ, hình như nó chỉ lấy các pixel đằng sau ra "in" lên cái form của mình thôi, có cách nào transprarents cái form (chỉnh được độ trong suốt) mà ko làm cho các control mờ theo ko?
<I Come Back>

Hoang Thanh
Bài viết: 9
Ngày tham gia: T.Ba 01/04/2008 9:58 am

Re: Làm Form trong suốt (Nhưng ko trong suốt Controls)

Gửi bàigửi bởi Hoang Thanh » CN 01/02/2009 2:03 pm

Nếu bây giờ, ta ko để BorderStyle là 0-None thì các nút Min, Max button sẽ hiển thị khi move mouse qua. Do đó, đây ko phải là làm trong suốt form. Với lại các bạn để ý nha. Trong quá trình test, Run Project. Sau đó Stop Project, thì form vẫn còn dấu vết trên màn hình. Nói để hình dung thì hơi khó. Nhưng làm thử xem. Tuy nhiên, 1 kỹ thuật hay. Thanks T7

nvtlib
Bài viết: 3
Ngày tham gia: T.Bảy 31/01/2009 4:27 pm
Đến từ: Ninh Binh
Liên hệ:

Re: Làm Form trong suốt (Nhưng ko trong suốt Controls)

Gửi bàigửi bởi nvtlib » T.Ba 03/02/2009 12:41 am

Cho form một màu nào đó của form khác màu của control.Sau đó gọi :
this.TransparencyKey="màu cần trong suốt"
Không bít em có sai chủ đề không nhỉ
Tôi yêu .Net-Control cực đẹp cho .Net [url]www.libdotnet.tk[/url]

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Làm Form trong suốt (Nhưng ko trong suốt Controls)

Gửi bàigửi bởi truongphu » T.Ba 03/02/2009 8:26 am

Mã: Chọn hết

  1. Option Explicit
  2.   ' demo project showing how to use the region API functions
  3.   ' by Bryan Stafford of New Vision Software® - newvision@mvps.org
  4.   ' this demo is released into the public domain "as is" without
  5.   ' warranty or guaranty of any kind.  In other words, use at
  6.   ' your own risk.
  7.  
  8.   Private Const RGN_AND  As Long = 1&  ' <- returns only the parts that are common to both
  9.   Private Const RGN_OR  As Long = 2&   ' <- returns a region that contains the area of both
  10.   Private Const RGN_XOR  As Long = 3&  ' <- returns only the parts that don't overlap
  11.   Private Const RGN_DIFF  As Long = 4& ' <- subtracts one region from another
  12.   Private Const RGN_COPY  As Long = 5& ' <- copies a region
  13.  
  14.   Private Declare Function CreateRectRgn& Lib "gdi32" (ByVal X1&, ByVal Y1&, ByVal X2&, ByVal Y2&)
  15.   Private Declare Function CreateEllipticRgn& Lib "gdi32" (ByVal X1&, ByVal Y1&, ByVal X2&, ByVal Y2&)
  16.   Private Declare Function CombineRgn& Lib "gdi32" (ByVal hDestRgn&, ByVal hSrcRgn1&, ByVal hSrcRgn2&, ByVal nCombineMode&)
  17.   Private Declare Function SetWindowRgn& Lib "user32" (ByVal hWnd&, ByVal hRgn&, ByVal bRedraw&)
  18.   Private Declare Function DeleteObject& Lib "gdi32" (ByVal hObject&)
  19.  
  20. Private Sub Form_Resize()
  21.  
  22.   Dim hOuterRgn&, hInnerRgn&, hIslandRgn&, hRegion&
  23.   Dim nWidth&, nHeight&, nNCBorderWidth&, nNCBorderHeight&
  24.  
  25.   If WindowState = vbMinimized Then Exit Sub
  26.  
  27.   ' get the width and height of the form in pixels
  28.   nWidth = ScaleX(Width, vbTwips, vbPixels)
  29.   nHeight = ScaleY(Height, vbTwips, vbPixels)
  30.  
  31.   ' create a region the size of the form
  32.   hOuterRgn = CreateRectRgn(0&, 0&, nWidth, nHeight)
  33.  
  34.   ' Determine the size of the borders of the form (this could be done using a call to GetClientRect also)
  35.   nNCBorderWidth = (nWidth - ScaleWidth) / 2
  36.   nNCBorderHeight = nHeight - nNCBorderWidth - ScaleHeight
  37.  
  38.  
  39.   ' comment the next line and uncomment the following line to see different effects
  40.   hInnerRgn = CreateRectRgn(nNCBorderWidth, nNCBorderHeight, _
  41.                         ScaleWidth + nNCBorderWidth, ScaleHeight + nNCBorderHeight)
  42.      
  43.   'hInnerRgn = CreateEllipticRgn(nNCBorderWidth + ScaleWidth * 0.1, _
  44.         nNCBorderHeight + ScaleHeight * 0.1, ScaleWidth * 0.9, ScaleHeight * 0.9)
  45.  
  46.  
  47.   ' add an island the size of the command button to the center of the form
  48.   hIslandRgn = CreateRectRgn(nNCBorderWidth + Command1.Left, nNCBorderHeight + Command1.Top, _
  49.           (nNCBorderWidth + Command1.Left) + Command1.Width, (nNCBorderHeight + Command1.Top) + Command1.Height)
  50.  
  51.   CombineRgn hInnerRgn, hInnerRgn, hIslandRgn, RGN_DIFF
  52.  
  53.  
  54.   ' creat a dummy region to hold the region created by CombineRgn
  55.   hRegion = CreateRectRgn(0&, 0&, 10&, 10&)
  56.  
  57.   ' Subtract the inner region from the outer.
  58.   CombineRgn hRegion, hOuterRgn, hInnerRgn, RGN_DIFF
  59.  
  60.   ' clean up after ourselves
  61.   DeleteObject hOuterRgn
  62.   DeleteObject hInnerRgn
  63.   DeleteObject hIslandRgn
  64.  
  65.   ' assign the region to the window
  66.   SetWindowRgn hWnd, hRegion, True
  67.  
  68. End Sub
  69.  
  70. Private Sub Command1_Click()
  71.   Unload Me
  72. End Sub
Tập tin đính kèm
Simple_Regions_Demo.zip
(2.15 KiB) Đã tải 1300 lần
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
NoBi
Quản trị
Quản trị
Bài viết: 946
Ngày tham gia: T.Ba 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 50 time
Been thanked: 66 time
Liên hệ:

Re: Làm Form trong suốt (Nhưng ko trong suốt Controls)

Gửi bàigửi bởi NoBi » T.Ba 03/02/2009 11:30 am

Trước đây ở forum cũ có module này, có lẻ mọi người chưa để ý tới. Trong module có:
Public Sub MakeTransparentControl(myControl As Control, vbColor)
dùng để làm trong suốt 1 control theo mã màu nhất định.

Để sử dụng bạn gọi:

Mã: Chọn hết

  1. Private Sub Command1_Click()
  2.     MakeTransparentControl Frame1, &HFF00FF
  3. End Sub

Frame1 ở đây có BackColor = &H00FF00FF&

Mở rộng ra, ta có thể bỏ khai báo tường minh kiểu Control cho biến myControl để có thể truyền vào 1 Form hoặc 1 Control:
Public Sub MakeTransparentControl(myControl, vbColor)

Khi sử dụng:

Mã: Chọn hết

  1. Private Sub Command1_Click()
  2.     MakeTransparentControl Frame1, &HFF00FF
  3.     MakeTransparentControl Form1, &HFF&
  4. End Sub

Form1 có BackColor là màu đỏ = &H000000FF&

Trong module này còn nhiều hàm hay nữa để dành anh em khám phá thêm.
Tập tin đính kèm
modRegionShape2.rar
Module modRegionShape2.bas
(11.35 KiB) Đã tải 1119 lần
:>

Hình đại diện của người dùng
lipton150786
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 345
Ngày tham gia: T.Năm 18/11/2010 10:00 pm
Has thanked: 3 time
Been thanked: 29 time

Re: Làm Form trong suốt (Nhưng ko trong suốt Controls)

Gửi bàigửi bởi lipton150786 » T.Hai 21/03/2011 9:09 am

tôi đã chạy thử code của mọi người tôi thấy y tưởng cũng hay nhưng mà có đều không tự nhiên lắm và không thể chạy tự động được. nếu thêm vảo một control thỉ phải sửa code cái này hơi bất tiện một chúc.

Có cách nào khác không mà ta không cần quan tâm tới màu của form hay control cũng như có thể thêm bớt control mả vẩn làm cho form trong suốt(cả thanh titlte của form) và không cẩn thay đổi code????

nntrang
Thành viên chính thức
Thành viên chính thức
Bài viết: 34
Ngày tham gia: T.Năm 29/05/2008 4:16 pm
Has thanked: 1 time
Been thanked: 2 time

Re: Làm Form trong suốt (Nhưng ko trong suốt Controls)

Gửi bàigửi bởi nntrang » T.Sáu 30/09/2011 11:14 pm

Win Vista hay Win7 khi làm mờ của sổ thì các nét chữ nó bị nhòe đi
Nhưng nếu lập trình như trên thì hình như chi làm trong suốt chứ không nhòe đi.
Làm sao cho Form vừa trong suốt lài bị nhòe giống Win7 đượ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