PDA

View Full Version : سوال: حساسیت Transparent در فرم به رنگی خاص



Ali0Boy
شنبه 15 اسفند 1388, 22:12 عصر
سلام بر دوستان عزیز
من چند دقیقه ای رو در مورد بحث خودم کاوش کردم ولی چیزی نیافتم پس خواهشن مدیران این پست را حذف نفرمایند چون نیاز مبرم به حل این سوال دارم و از کسانی هم که پستی را در این مورد سراغ دارند اعلام فرمایند، اگر جوابی که من میخواهم بود و یا در مورد این سوال بود و نیازی به ادامه دادن این تاپیک نبود خود من اقدام به حذف تاپیک خواهم کرد!

سوال:
من میخواستم که فرم خود را به رنگ خاصی Transparent کنم ولی هرچه از API ها و ... سراغی گرفتم چیزی نیافتم. اگر کسی کدی سراغ داره ممنون میشم برام در این تاپیک بزاره و توضیحاتی هم در رابطه با استفاده اش بگه. در Net. این ویژگی برای اکثر اشیا قرار داره و نیازی هم به کد نویسی نیست ولی من میخواستم کدی داشته باشم که در VB 6.0 اجرایی و استفاده داشته باشه. بازم ممنون میشوم اگه کسی مرا راهنمایی کنه!؟ :تشویق:

ASedJavad
یک شنبه 16 اسفند 1388, 15:29 عصر
سلام
اگه منظورت رو درست فهمیده باشم،
کد زیر کارت رو راه میندازه:
(بجای vbBlack کد رنگ مورد نظرت رو بذار)


Const LWA_COLORKEY = &H1
Const LWA_ALPHA = &H2
Const GWL_EXSTYLE = (-20)
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 Command1_Click()
Dim Ret As Long
'Set the window style to 'Layered'
Ret = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
Ret = Ret Or WS_EX_LAYERED
SetWindowLong Me.hWnd, GWL_EXSTYLE, Ret
'Set the opacity of the layered window to 128
SetLayeredWindowAttributes Me.hWnd, vbBlack, 0, LWA_COLORKEY
End Sub

Ali0Boy
یک شنبه 16 اسفند 1388, 19:47 عصر
سلام
اگه منظورت رو درست فهمیده باشم،
کد زیر کارت رو راه میندازه:
(بجای vbBlack کد رنگ مورد نظرت رو بذار)


Const LWA_COLORKEY = &H1
Const LWA_ALPHA = &H2
Const GWL_EXSTYLE = (-20)
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 Command1_Click()
Dim Ret As Long
'Set the window style to 'Layered'
Ret = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
Ret = Ret Or WS_EX_LAYERED
SetWindowLong Me.hWnd, GWL_EXSTYLE, Ret
'Set the opacity of the layered window to 128
SetLayeredWindowAttributes Me.hWnd, vbBlack, 0, LWA_COLORKEY
End Sub

ممنون از شما نسبتا بد نبود ولی وقتی میخوام خود فرم را با رنگی که داره محو کنم و اشیایی که در روی آن با رنگ متفاوت وجود دارند نمایان باشد جواب نمیده، از کدی نیز برا این مورد هست برام بزارید ممنون میشم و یا راهنماییم کنید که چه کاری باید کنم؟! :تشویق:

Ali0Boy
یک شنبه 16 اسفند 1388, 19:58 عصر
سلام
اگه منظورت رو درست فهمیده باشم،
کد زیر کارت رو راه میندازه:
(بجای vbBlack کد رنگ مورد نظرت رو بذار)


Const LWA_COLORKEY = &H1
Const LWA_ALPHA = &H2
Const GWL_EXSTYLE = (-20)
...
..
.
End Sub

دوست عزیز ممنون اون مشکل فرم هم که داشتم حل شد، لطفا اگه زحمتی نیست برام یه توضیحی درمورد کاربرد و کارکرد هر یک از خط کدها بدین ممنون میشم؟! :تشویق:

ASedJavad
دوشنبه 17 اسفند 1388, 06:48 صبح
فکر میکنم توضیحاتی که آقای حامد مصافی تو نرم افزار API Assistant خودشون راجع به تابع SetLayeredWindowAttributes اوردن، جامع و کامل باشه:

اين تابع ميتواند يک رنگ از يک پنجره (فرم) را به طوزي حذف کند تا تمام کنترل هاي زير آن نمايان باشند يا اينکه يک پنجره را نيمه شفاف کند. براي اجراي تابع خصوصيت WS_EX_LAYERED فرم بايد True باشد. براي انجام اين کار مي توانيد خصوصيات پنجره را با استفاده از تابع GetWindowLong به دست آوريد و با WS_EX_LAYERED جمع (Or) کنيد و نتيجه حاصله را با استفاده از تابع SetWindowLong روي پنجره ثبت کنيد.
اگر تابع کار خود را با موفقيت به پايان برساند مقدار بازگشتي يک عدد غير صفر و اگر تابع با خطايي مواجه شود مقدار بر گشتي صفر خواهد بود

hWnd : هندل پنجره مورد نظر
crKey : رنگي که بايد حذف شود
bAlpha : ميزان شفافيت فرم (0 تا 255)
dwFlags : اين متغير مشخص مي کند که تابع چه عملي روي فرم انجام دهد
LWA_COLORKEY : يک رنگ را از فرم حذف مي کند
LWA_ALPHA : فرم را نيمه شفاف مي کند