PDA

View Full Version : شفاف کردن يک کنترل



Hossis
پنج شنبه 27 اسفند 1388, 07:35 صبح
آيا امکان شفاف کردن يک کنترل (نه فرم) وجود داره ؟؟
دقيقا مثل GlassButton ؟؟

Omid.Mafakher
پنج شنبه 27 اسفند 1388, 15:50 عصر
-------------------------------------

Hossis
شنبه 14 فروردین 1389, 20:16 عصر
پس در GlassButton چجوري اين اتفاق مي افته ،‌ آيا اونها هم کنترل ساخته شده توسط WPF هستند؟

sc0rpi0n
دوشنبه 06 اردیبهشت 1389, 10:31 صبح
سلام دوسته من.... من هم یه خمچین مشکلی دارم, کنترل ها در حالت عادی خاصیت واسه شفافیت ندارند اما من یه مطلبی رو پیدا کردم...
اما هنوز امتحان نکردم....
-------------------------------------------------------------------------------
داخل code editpre کنترل تون اینو قرار بدین...
متد setstyle رو صدا بزنید...
C#‎‎
SetStyle(ControlStyles.SupportsTransparentBackColo r, true);

VB
SetStyle(ControlStyles.SupportsTransparentBackColo r, True)
این دستور اینن قابلیت رو به کنترل شما میده که شفاف بشه...
حالا زیره خط بالا این خط کد رو اضافه کنید, این کد بکگراند کنترل تون رو trancparency می کنه:قلب:
C#‎
this.BackColor = Color.Transparent;
vb
Me.BackColor = Color.Transparent
------------------------------------------------------------------------------
دوسته من, من خودم این کد رو امتحان نکردم یعنی وقت نداشتم. امیدوارم که بهت جواب بده داداشی.
موفق باشیییییییییییییییییییییی یییییییییییی:خجالت:

scorpion_black_r(yahoo id)
Hard.actions@gmail.com

alireza_s_84
دوشنبه 06 اردیبهشت 1389, 11:16 صبح
آيا امکان شفاف کردن يک کنترل (نه فرم) وجود داره ؟؟
دقيقا مثل GlassButton ؟؟

سلام دوست عزیز:
بله امکانش هست و با کمی GDI شما میتونی هر کنترلی رو که دلت بخواد به حالت شفاف دربیاری:
توی کلاس کنترلی که ساختی ابتدا خاصیت CreateParams رو Override کن به شکل زیر:

protected override CreateParams CreateParams
{
get
{
CreateParams createParams = base.CreateParams;
createParams.ExStyle |= 0x20;
return createParams;
}
}

بعد متد OnPaintBackground رو Override کن که زمینه کنترل ترسیم نشه یعنی:

protected override void OnPaintBackground(PaintEventArgs e)
{
}

یک خاصیت جدید برای کنترل تعریف کن بنام Opacity که فقط مقادیر 0 تا 100 رو قبول کنه(میزان شفافیت کنترل):

public int Opacity
{
get
{
if (this.opacity > 100)
{
this.opacity = 100;
}
else if (this.opacity < 0)
{
this.opacity = 0;
}
return this.opacity;
}
set
{
this.opacity = value;
base.RecreateHandle();
}
}

در رویداد OnPaint برای ترسیماتت یک Brush تعریف کن که مقدار شفافیت اون با استفاده از خاصیت Opacity محاسبه بشه یعنی:

int num = (this.opacity * 0xff) / 100;
SolidBrush brush = new SolidBrush(Color.FromArgb(num, brushColor));

اینو هم اضافه کن تا با تغییر مکتن کنترل دوباره یک هندل ازش ساخته بشه:

protected override void OnMove(EventArgs e)
{
base.RecreateHandle();
}
موفق باشی