Star-PCPack
Member
سلام دوستان من دنبال یه کد می خواستم که بشه با اون یه فرم نامرئی ساخت مثل پنجره انتخاب گجت ویندوز ویستا یا سون منتظرم
سلام دوستان من دنبال یه کد می خواستم که بشه با اون یه فرم نامرئی ساخت مثل پنجره انتخاب گجت ویندوز ویستا یا سون منتظرم
Option Explicit
Private Const LWA_COLORKEY = &H1
Private Const LWA_ALPHA = &H2
Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_LAYERED = &H80000
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Sub Form_Load()
Dim Ret As Long, Opacity As Long
Ret = GetWindowLong(hWnd, GWL_EXSTYLE) Or WS_EX_LAYERED
SetWindowLong hWnd, GWL_EXSTYLE, Ret
Opacity = 75
SetLayeredWindowAttributes hWnd, 0, 255 * (Opacity / 100), LWA_ALPHA
End Sub
ممنون از توضیحات خوبتون منم یه چیزی پیدا کردم ببینید با این میشه اینکاری رو که شما می گید انجام دادپنجره های نیمه شفافی که در ویندوز های Vista و 7 نمایش داده می شوند با یک پنجره نیمه شفاف عادی قدری
متفاوت اند، چون هم میزان Opacity (شفافیت) شان توسط تنظیمات ویندوز قابل تنظیم است و هم تصویر پشت شان
را محو نشان می دهند (تصویر پشت شان را Blur می کنند). این قابلیت با فرم ها و کنترل های ویژوال بیسیک 6
جور در نمی آید، چون زمانی که ویژوال بیسیک طراحی شد، چنین قابلیتی هم وجود نداشت. شاید با استفاده از
یکسری توابع API عملی باشد، اما تا حال چنین کدی ندیده ام.
راهی وجود دارد که با یک سری کد نسبتا طولانی یک تصویر نیمه شفاف را که بعضی قسمت هایش کاملا شفاف و
بعضی قسمت هایش نیمه شفاف یا بدون شفافیت باشد را به عنوان بدنه فرم نمایش دهید، اما عیب بزرگ اش این
است که دیگر هیچ کنترل ای که روی فرم قرار داده باشید دیده نخواهد شد، و فقط همان تصویر مشاهده می شود.
اما شما می توانید به سادگی Opacity یک فرم استاندارد را کم کنید، مثلا 75 درصد :
کد:Option Explicit Private Const LWA_COLORKEY = &H1 Private Const LWA_ALPHA = &H2 Private Const GWL_EXSTYLE = (-20) Private Const WS_EX_LAYERED = &H80000 Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long Private Sub Form_Load() Dim Ret As Long, Opacity As Long Ret = GetWindowLong(hWnd, GWL_EXSTYLE) Or WS_EX_LAYERED SetWindowLong hWnd, GWL_EXSTYLE, Ret Opacity = 75 SetLayeredWindowAttributes hWnd, 0, 255 * (Opacity / 100), LWA_ALPHA End Sub
دوست عزیز فایل پیوست vb6 glass خیلی با حاله ولی فقط تو ویندوز ویستا و سون ار می کنه
Option Explicit
Private Const LWA_COLORKEY As Long = &H1
Private Const GWL_EXSTYLE As Long = (-20)
Private Const WS_EX_LAYERED As Long = &H80000
Private Const WS_EX_TRANSPARENT As Long = &H20&
Private Const LWA_ALPHA As Long = &H2&
Private Type tRect
m_Left As Long
m_Right As Long
m_Top As Long
m_Buttom As Long
End Type
Private Declare Function apiApplyGlass Lib "dwmapi.dll" Alias "DwmExtendFrameIntoClientArea" (ByVal hWnd As Long, rect As tRect) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crey As Long, ByVal bAlpha As Byte, ByVal dwflags As Long) As Long
Public Function ApplyAero(frm As Form, tColor As Long) As Long
Dim lOldStyle As Long
lOldStyle = GetWindowLong(frm.hWnd, GWL_EXSTYLE)
SetWindowLong frm.hWnd, GWL_EXSTYLE, lOldStyle Or WS_EX_LAYERED
SetLayeredWindowAttributes frm.hWnd, tColor, 0, LWA_COLORKEY
frm.BackColor = tColor
Dim GRect As tRect
Dim lngReturn As Long
GRect.m_Buttom = -1
GRect.m_Left = -1
GRect.m_Right = -1
GRect.m_Top = 0
lngReturn = apiApplyGlass(frm.hWnd, GRect)
ApplyAero = lngReturn
End Function
ApplyAero Me, RGB(1, 1, 1)