PDA

View Full Version : سوال: تغییر شفافیت عکس (Image Opacity)



R2du-soft
شنبه 28 تیر 1393, 20:49 عصر
سلام دوستان
من روی فرمم یک عکس دارم ، چطور میتونم opacity اون رو تغییر بدم که شفاف بشه و دکمه ای که زیر عکس هست نیمه واضح معلوم بشه؟
ترجیحا نمیخام از هیچ dll یا ocx استفاده کنم همش کد میخوام.
خیلی گشتم،اما نتیجه نداد!
میشه راهنمایی کنید؟
ممنون

setroyd
یک شنبه 29 تیر 1393, 05:58 صبح
به هیچ شکل با vb نمیشه مگر اینکه شما picturebox خودتونو parent فرمشو از form1 به 0 تغییر بدی با api بیای transparent کنی بعد دوباره انتقال بدی به فرم که در این صورت هم باید یک تایمر بزاری برای اینکه شما فرم رو حرکت میدی picturebox ثابت نمونه

من قبلا انجام دادم دنبالش نگرد چند ساله دنبالشم و از همه پیگیر تر ولی نیست و نمیشه مگر اینکه بیای با class های GDI یک usercontrol بنویسی شخصی مثل alpha image control که این کارو بکنه کلا همین دو راه رو داری نه بیشتر .

البته راه های پیچیده تر دیگه ای هم هست ولی ما استانداردی در این رابطه نداریم مثلا یک راه میون بر دیگه هم هست که بیای عکس همون یک تیکه رو بگیری و بعد invisible پیکچر باکس رو true کنی و بعد بیای با api alpha باهم ادغام کنی تا کاربر رو گول بزنی !

R2du-soft
یک شنبه 29 تیر 1393, 13:48 عصر
ممنون setroyd عزیز

این عکس رو ببینید:

121340

من الان این حالت opacity رو برای شکل زیر میخوام که با فتوشاپ درستش کردم.

121324

من از فرم برنامه عکس گرفتم و یه لایه تیره روی فرم با فتوشاپ درست کرد.
میخوام کاری کنم که زمانی که کاربر روی دکمه ای که روی فرم قرار داره کلیک کرد کل فرم یک لایه نمیه شفاف به خودش بگیره طوری که دکمه ها و دیگر کنترل های روی فرم معلوم بشه اما نشه باهاشون کارکرد.
من به ذهنم رسید که یک عکس بزارم روی فرم و opacity اون رو روی 60 بزارم تا اینطور بشه!
به نظر شما برای انجام اینکار باید چیکار کرد!؟
ویرابش:(میخوام تو برنامه کاری کنم که زمانی که تو اولین عکس (عکس سفید رنگ) روی دکمه کلیک کردم یک حاله مشکی روی فرمم رو بگیره! و در عین حال زیر فرمم معلوم باشه اما نشه باهاش کارکرد! )

hmbarnamenevis
یک شنبه 29 تیر 1393, 17:36 عصر
اول یک فرم ساده جداگانه در نظر می گیری و خاصیت BorderStyle=None و Enabled=False و بعد کد های زیر را درون اون می نویسی (نام فرم Form1 است):

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 Form_Load()
Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2
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


'SetLayeredWindowAttributes Me.hWnd,0,(0-255),LWA_ALPHA
SetLayeredWindowAttributes Me.hWnd, 0, 110, LWA_ALPHA
'End
End Sub

میزان شفافیت رو می توانی با تغییر عدد 110 در فرم لود تغییر دهی. سپس در فرم اصلیت وقتی روی دکمه کلیک می کنی قرار است فرم دیگری نمایش داده شود و فرم اصلی کمی تار شود این کد را در جایی که فرم دوم را باز می کنی قرار می دی (نام فرم اصلی=FrmMain - فرم فرعی=FrmSearch):

Form1.Move Me.Left, Me.Top, Me.Width, Me.Height
Form1.Show
Me.Enabled = False
FrmSearch.Show

R2du-soft
یک شنبه 29 تیر 1393, 20:35 عصر
ممنون دوست عزیز
اما این کدی که قرار دیدید کل فرم رو سیشه ای میکنه،من پست 3# (http://barnamenevis.org/showthread.php?461297-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D8%B4%D9%81%D8%A7%D9%81%DB%8C%D8%AA-%D8%B9%DA%A9%D8%B3-%28Image-Opacity%29&p=2065362&viewfull=1#post2065362) رو ویرایش کردم،میخوام زمانی که روی دکمم کلیک کردم یک حاله نیمه شاف روی فرمم بیاد و کاربر هم نتونه با فرم و دکمه ها کار کنه!
ممنون

hmbarnamenevis
دوشنبه 30 تیر 1393, 11:18 صبح
منظورت رو متوجه شدم و کدی که برای شما قرار دادم دقیقا همین کار را انجام می دهد شما یک تست از کد من بگیرید؛ فقط شما نمی خواهید فرمی لود شود که کافی است خط FrmSearch.Show را بردارید.

vbhamed
دوشنبه 30 تیر 1393, 12:49 عصر
سلام
اين نمونه رو ببينيد
وقتي نيمه شفاف شد كليد Escape رو بزنيد تا به حالت اول برگرده

R2du-soft
دوشنبه 30 تیر 1393, 12:59 عصر
ممنون دوست عزیز
اما این کدی که قرار دیدید کل فرم رو سیشه ای میکنه،من پست 3# (http://barnamenevis.org/showthread.php?461297-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D8%B4%D9%81%D8%A7%D9%81%DB%8C%D8%AA-%D8%B9%DA%A9%D8%B3-%28Image-Opacity%29&p=2065362&viewfull=1#post2065362) رو ویرایش کردم،میخوام زمانی که روی دکمم کلیک کردم یک حاله نیمه شاف روی فرمم بیاد و کاربر هم نتونه با فرم و دکمه ها کار کنه!
ممنون


منظورت رو متوجه شدم و کدی که برای شما قرار دادم دقیقا همین کار را انجام می دهد شما یک تست از کد من بگیرید؛ فقط شما نمی خواهید فرمی لود شود که کافی است خط FrmSearch.Show را بردارید.

ممنون hmbarnamenevis عزیز
من چندین باز تست کردم اما اونطور نمیشه!
ببینید چطور نشون میده:

121353


سلام
اين نمونه رو ببينيد
وقتي نيمه شفاف شد كليد Escape رو بزنيد تا به حالت اول برگرده

:تشویق: ممنون vbhamed جان دقیقا همونیه که میخوام،اما این کار رو نمیشه بدون استفاده از فرم دیگه ای انجام داد؟

vbhamed
دوشنبه 30 تیر 1393, 16:15 عصر
:تشویق: ممنون vbhamed جان دقیقا همونیه که میخوام،اما این کار رو نمیشه بدون استفاده از فرم دیگه ای انجام داد؟

سلام
فعلا اين راه به ذهنم رسيد
البته به نظرم همين راه خوب باشه چون در فرم دوم مي‌تونيد تصوير هم بزاريد كه جالبتر بشه و كنترل برنامتون هم راحت تره