PDA

View Full Version : تغيير رنگ صفحه نمايش



30na2007
یک شنبه 16 مرداد 1390, 13:07 عصر
با سلام

موقعي كه پنجره Shutdown رو باز كنيم و كمي صبر كنيم، تصوير پشت پنجره Shutdown كم كم سياه وسفيد ميشه
مثل تصوير زير:

http://up.vatandownload.com/images/y6gq66dep1zk62knsb7.jpg

ميخواستم ببينم ميشه همچين چيزي رو با وي بي درست كرد
مثلا يه فرم نمايش بديم و تصوير پشت فرم سياه و سفيد بشه؟؟؟؟؟؟؟؟؟؟؟؟

quiet_programmer
یک شنبه 16 مرداد 1390, 14:12 عصر
با سلام.

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 Retval As Long
Retval = GetWindowLong(hWnd, -20)
Retval = Retval Or 524288
SetWindowLong hWnd, -20, Retval
SetLayeredWindowAttributes hWnd, 0, 0, 2
End Sub

Private Sub Timer1_Timer()
Static a As Integer
a = a + 1
SetLayeredWindowAttributes hWnd, 0, a, 2
If a = 255 Then
a = 0
End If
End Sub


البته این برنامه یه مشکلی که داره اینه که فرم اگه دارای فوکوس بشه نمیشه از فرمهای دیگه استفاده کرد و بایستی از دکمه ی alt+tab برای سوئیچ کردن مابین پنجره ها استفاده کرد. ولی برای حل این مشکل هم میتونی از توابع api برای فوکوس نگرفتن پنجرت استفاده کنی. یعنی یه تایمر بزاری و هر لحظه دستور بدی که پنجره در حالت بدون فوکوس باشه. تابعی که این کارو انجام میده الان دقیقا خاطرم نیست ولی اگه خواستی بگو تا برات بزارم.اگه میخوای مثل Shutdown ویندوز که فقط به کاربر اجازه میده از یه پنجره استفاده کنه میتونی از این مشکل رو به این صورت حل کنی که فرمی که داره پس زمینه رو تیرره میکنه یه فرم بصورت vbmodal باز کنه و با استفاده از توابع Api فقط فوکوس رو پنجره تو بده.
فقط حواست باشه رنگ فرم رو سیاه انتخاب کن. تایمر با اینترول 100 بزار و اجرا کن. borderStyle فرمت رو برابر None انتخاب کن. windowsState فرمت رو برابر Maximized انتخاب کن. همچنین برای اینکه برنامه تو تسک منیجر و تسک بار نشون داده نشه showInTaskbar از فرم رو هم برابر False انتخاب کن.

موفق باشید.

30na2007
یک شنبه 16 مرداد 1390, 16:46 عصر
با سلام.

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 Retval As Long
Retval = GetWindowLong(hWnd, -20)
Retval = Retval Or 524288
SetWindowLong hWnd, -20, Retval
SetLayeredWindowAttributes hWnd, 0, 0, 2
End Sub

Private Sub Timer1_Timer()
Static a As Integer
a = a + 1
SetLayeredWindowAttributes hWnd, 0, a, 2
If a = 255 Then
a = 0
End If
End Sub




ممنون از جوابتون

ولي اين اوني نيست كه من ميخوام- اينجوري انگار يه فيلتر گذاشتي جلوي تصوير
ولي اوني كه من ميخوام واقعا رنگ خود تصوير سياه وسفيد ميشه

اگه پنجره shutdown رو باز كني و كمي صبر كني متوجه ميشي
به هر حال بازم ازت ممنونم

quiet_programmer
یک شنبه 16 مرداد 1390, 19:32 عصر
با سلام.

برای این کار تو میتونی تو همون لحظه از صفحه نمایش با استفاده از توابع api عکس بگیری و اون عکس رو سیاه و سفید کنی و بزاری پس زمینه فرم و نشون بدیش.اگه اینطوری مد نظرت هست بگو تا کد بزارم برات نه اینکه بنویسیم بعد بگی این اونی نیست که من میخواستم.:چشمک:

30na2007
دوشنبه 17 مرداد 1390, 23:23 عصر
با سلام.

برای این کار تو میتونی تو همون لحظه از صفحه نمایش با استفاده از توابع api عکس بگیری و اون عکس رو سیاه و سفید کنی و بزاری پس زمینه فرم و نشون بدیش.اگه اینطوری مد نظرت هست بگو تا کد بزارم برات نه اینکه بنویسیم بعد بگی این اونی نیست که من میخواستم.:چشمک:

نه گلم
زحمتت ميشه
به نظرم اينجوري يه كم غير حرفه اي ميشه، احتمالا بايد يه راه بهتري هم باشه
بازم ممنون