ساخت کنترل های شفاف(transparent)
اگر توجه کرده باشین بعضی کنترل ها مانند لیبل حتی اگر backcolor آنها transparent باشد باز کاملا شفاف نمیشود و اگر فرم شما backgroundImage داشته باشد دقیقا به این موضوع پی خواهید برد.برای رفع این مشکل شما میتونید با استفاده از روشی که خواهیم گفت یک کنترل سفارشی از آن کنترل بسازید که کاملا شفاف است و هیچ مشکلی هم با backgroundImage ندارد.کافیست شما یک کلاس جدید بسازید و این کدها را بنویسید ما در مثال از Lable استفاده کردیم شما میتوانید به جای لیبل از کنترل های دیگری هم استفاده کنید.
using System.Windows.Forms;
namespace TransparentLabel
{
public class TransparentLabel : Label
{
public TransparentLabel()
{
this.SetStyle(ControlStyles.Opaque, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, false);
}
protected override CreateParams CreateParams
{
get
{
CreateParams parms = base.CreateParams;
parms.ExStyle |= 0x20; // Turn on WS_EX_TRANSPARENT
return parms;
}
}
}
}
نقل قول: ساخت کنترل های شفاف(transparent)
سلام دوست عزیز می شه راجع به متد createPrams تون که override کردید توضیح بدید یعنی این خط
parms.ExStyle |= 0x20; // Turn on WS_EX_TRANSPARENT
دقیقا چیکار می کنه؟ یا اصلا توضیح کلی راجع به createparams بدید که کارش چیه و چطور استفاده می شه تا همه ی دوستان استفاده کنند
نقل قول: ساخت کنترل های شفاف(transparent)
Extended Window Styles
از API های ویندوز برای مدیریت استایل و قالب پنجره هاست.
نقل قول: ساخت کنترل های شفاف(transparent)
نقل قول:
نوشته شده توسط
haghft
اگر توجه کرده باشین بعضی کنترل ها مانند لیبل حتی اگر backcolor آنها transparent باشد باز کاملا شفاف نمیشود و اگر فرم شما backgroundImage داشته باشد دقیقا به این موضوع پی خواهید برد.برای رفع این مشکل شما میتونید با استفاده از روشی که خواهیم گفت یک کنترل سفارشی از آن کنترل بسازید که کاملا شفاف است و هیچ مشکلی هم با backgroundImage ندارد.کافیست شما یک کلاس جدید بسازید و این کدها را بنویسید ما در مثال از Lable استفاده کردیم شما میتوانید به جای لیبل از کنترل های دیگری هم استفاده کنید.
using System.Windows.Forms;
namespace TransparentLabel
{
public class TransparentLabel : Label
{
public TransparentLabel()
{
this.SetStyle(ControlStyles.Opaque, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, false);
}
protected override CreateParams CreateParams
{
get
{
CreateParams parms = base.CreateParams;
parms.ExStyle |= 0x20; // Turn on WS_EX_TRANSPARENT
return parms;
}
}
}
}
فقط کافی برای backColor مقدار alpha رو هم ست کنین ....
this.label1.BackColor = Color.FromArgb(150, Color.White);
150 میزان شفافیت رو نشون میده ... از 0 تا 255
نقل قول: ساخت کنترل های شفاف(transparent)
نقل قول:
نوشته شده توسط
exlord
فقط کافی برای backColor مقدار alpha رو هم ست کنین ....
this.label1.BackColor = Color.FromArgb(150, Color.White);
150 میزان شفافیت رو نشون میده ... از 0 تا 255
تو روش شما اگه فرم MDIparent باشه جواب نمیده اما تو اون روشی که من گفتم در هر حال جواب میده حتی backgroundimage داشته باشه و ismdicontainer هم true باشه!
نقل قول: ساخت کنترل های شفاف(transparent)
نقل قول:
نوشته شده توسط
haghft
تو روش شما اگه فرم MDIparent باشه جواب نمیده اما تو اون روشی که من گفتم در هر حال جواب میده حتی backgroundimage داشته باشه و ismdicontainer هم true باشه!
خوب دلیلش اینکه توی فرم MDI قرار نیست که لیبل گزاشته بشه ...
نقل قول: ساخت کنترل های شفاف(transparent)
اتفاقا منم این فکرو میکردم اما چند وقت پیش یکی همین مشکلو داشت و من ان راه حلو بهش پیشنهاد کردم و کارش راه افتاد.در ضمن مثلا شما بخواهید لیبلی رو progressbar بزارید که درصد رو نشون بده باز روش شما جواب نمیده.ولی تا جایی که میشه باید از روش شما استفاده کرد.
نقل قول: ساخت کنترل های شفاف(transparent)
نقل قول:
نوشته شده توسط
haghft
اگر توجه کرده باشین بعضی کنترل ها مانند لیبل حتی اگر backcolor آنها transparent باشد باز کاملا شفاف نمیشود و اگر فرم شما backgroundImage داشته باشد دقیقا به این موضوع پی خواهید برد.برای رفع این مشکل شما میتونید با استفاده از روشی که خواهیم گفت یک کنترل سفارشی از آن کنترل بسازید که کاملا شفاف است و هیچ مشکلی هم با backgroundImage ندارد.کافیست شما یک کلاس جدید بسازید و این کدها را بنویسید ما در مثال از Lable استفاده کردیم شما میتوانید به جای لیبل از کنترل های دیگری هم استفاده کنید.
using System.Windows.Forms;
namespace TransparentLabel
{
public class TransparentLabel : Label
{
public TransparentLabel()
{
this.SetStyle(ControlStyles.Opaque, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, false);
}
protected override CreateParams CreateParams
{
get
{
CreateParams parms = base.CreateParams;
parms.ExStyle |= 0x20; // Turn on WS_EX_TRANSPARENT
return parms;
}
}
}
}
با سلام خدمت دوستان:
دوست خوبمون haghft سه سال پیش ساخت کنترل های شفاف رو خیلی خوب توضیح دادن. اما اگه بخواهیم که میزان شفافیت کنترلمون رو تعیین کنیم باید چه کار کنیم؟ با این روش میزان شفافیت کنترل ۰ می شه.
البته ناگفته نماند که با استفاده از میزان آلفا می توان مقدار شفافیت را کم کرد٬ اما من در برنامه ام این کدها رو نوشتم٬ ولی با کم و زیاد کردن میزان آلفای رنگ پس زمینه تغییری توی شفافیت اعمال نشد و همچنان میزان شفافیت صفر بود. آیا دوستان راهی برای اینکار پیش نهاد دارند؟ در برنامه ام بر روی فرم چند کنترل دارم و کنترل شفاف را بر روی تمام کنترلها قرار داده ام و کنترلهای زیری کاملا پیدا هستند٬ اما می خواهم که کنترل شفاف که روی بقیه کنترلها قرار دارد کم رنگ باشد نه کاملا شفاف؟