PDA

View Full Version : حرفه ای: ساخت کامپوننت Button انیمشین



alireza264
دوشنبه 08 تیر 1394, 02:55 صبح
سلام چند روز پیش دوست عزیر reza_ali202000 (http://barnamenevis.org/member.php?62953-reza_ali202000) کار قشنگی کرد ویه textbox رو به اشترک گذاشت و منم یه label به اشتراک گذاشتم و اینبار یک کامپوننت Button رو به اشتراک میذارمو نحوه کارشو توضیح میدم .

132707

ابتدا یک Component بنام Fade_button به پروژه اضافه میکنیم و فضاهای کاری مورد نظر را می نویسیم


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Drawing.Imaging;
using System.Windows.Forms;



سپس ارثبری component رو به Button غییر میدیم تا کامپوننت بدونه هدف ساخت Button هست و ازش ارثبری کنه

public partial class Fade_button : Button


متغیر های مورد نیاز


//Timer برای محو کردن عکس زمینه کلید و بلعکس
Timer timer1 = new Timer();

//Images
private Image _image_OnMouseEnter;//"این عکس زمانیکه موس روی کلید است نمایش داده میشه
private Image _image_MouseClick;//این عکس زمانیکه کلیک کنیم نمایش داده میشه
private Image _image_Background;// عکس زمینه که اولین عکسیه که نمایش داده میشه
private Image _image_fade;// هنگام تغییر عکس فدینگ انجام میشه و عکس رو تو اینئ متغییر می ریزیم


//Fading

int Type_fade = 0; // اگر 1 بود عکس زمینه ترنس پرنت شود و اگر 2 بود عکس حالت موس روی کلید ترنس پرنت شود
int transparency_value = 255; // میزان ترنس پرنت شدن




سازنده کامپوننت و مقدار دهی اولیه فیلدها برای حالت پیش فرض



//Constructor
public Fade_button()
{
this.BackColor = Color.Transparent;
this.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.FlatAppearance.BorderSize = 0;
// this.TextAlign = ContentAlignment.BottomCenter;
// this.ImageAlign = ContentAlignment.TopCenter;
timer1.Interval = 10;
timer1.Tick += new EventHandler(timer1_Tick);
}


تعریف خصوصیت های جدید وقرادادن آنها در Appearance


// تعریف خصوصیت های جدید
#region Public Properties

[Browsable(true)]
[Category("Appearance")]
[Description("این عکس زمانیکه موس روی کلید است نمایش داده میشه")]
[DefaultValue(null)]
public Image Image_MouseEnter
{
get { return _image_OnMouseEnter; }
set { _image_OnMouseEnter = value; }
}


[Browsable(true)]
[Category("Appearance")]
[Description("این عکس زمانیکه کلیک کنیم نمایش داده میشه")]
[DefaultValue(null)]
public Image Image_MouseClick
{
get { return _image_MouseClick; }
set { _image_MouseClick = value; }
}

[Browsable(true)]
[Category("Appearance")]
[Description("عکس زمینه که اولین عکسیه که نمایش داده میشه")]
[DefaultValue(null)]
public Image Image_Background
{
get { return _image_Background; }
set { _image_Background = value; }
}


#endregion



تعریف متد های مورد نیاز


// تعریف متد های مورد نیاز

//پرکردن زمینه کلید با ترنس پرنت کردن عکس با توجه به متدو میزان ترنس پرنت فعلی
public void PaintBackground()
{
object _img_temp = new object();
// زمانیکه موس روی کلید است
if (Type_fade == 1)
{
_img_temp = _image_OnMouseEnter.Clone();
}
else
//اولین عکسیه که نمایش داده بشه
if (Type_fade == 2)
{
_img_temp = _image_Background.Clone();
}
// واگذاری عکسی که باید fade بشه
_image_fade = (Image)_img_temp;
Graphics _Draw = Graphics.FromImage(_image_fade);
// اعمال میزان ترنس پرنت به عکس
SolidBrush Sld_Brsh = new SolidBrush(Color.FromArgb(transparency_value, 255, 255, 255));
_Draw.FillRectangle(Sld_Brsh, 0, 0, _image_fade.Width, _image_fade.Height);
// قرار دادن عکس با ترنس پرنت تعیین شده بعنوان زمینه کلید
this.BackgroundImage = _image_fade;
}


// بررسی اینکه کدام حالت ترنس پرنت انجام شود و برای تعیین مقدار ترنس پرنت شدن عکس زمینه کلید تا زمانیکه غکس کاملا محو شود
private void timer1_Tick(object sender, EventArgs e)
{

if ((Type_fade == 1 || Type_fade == 2) && transparency_value == 0)
transparency_value = 255;

if (transparency_value > -1)
{
PaintBackground();
transparency_value -= 10;
}
else
{
transparency_value = 0;
PaintBackground();
timer1.Stop();
}
}

// وقتیکه موس روی کلید قرار میگیرد رخ میدهد
protected override void OnMouseEnter(EventArgs e)
{
Type_fade = 1;
timer1.Start();
base.OnMouseEnter(e);
}

// وقتیکه موس از روی کلید خارج میشود رخ میدهد
protected override void OnMouseLeave(EventArgs e)
{
Type_fade = 2;
timer1.Start();
base.OnMouseLeave(e);

}

// // وقتیکه کلید موس روی کلید فشرده میشود رخ میدهد
protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs MouseEvent)
{
this.BackgroundImage = _image_MouseClick;
base.OnMouseDown(MouseEvent);
}

// // وقتیکه کلید موس روی کلید رها شود رخ میدهد
protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs MouseEvent)
{
this.BackgroundImage = _image_OnMouseEnter;
base.OnMouseUp(MouseEvent);
}



نحوه استفاده : برنامه رو Rebuild کنین تا Fade_button به toolbox اضافه بشه و مثل بقیه کنترل ها انتخابش کنین و در فرم قرار بدین سپس فیلد های مشخص شده در عکس زیر را با عکس هایی که ار نوع JPG هستند مقدار دهی کنید

132708 132709

مثالی از نتیجه اجرا

132710


سورس کامل رو از اینجا دریافت کنید
132711

همچنین برای دریافت یک label که متنش دارای حاشیه(OutLine) هستش به آدرس زیر برید

http://barnamenevis.org/showthread.php?499650-%D8%B3%D8%A7%D8%AE%D8%AA-%DB%8C%DA%A9-label-%DA%A9%D9%87-%D9%85%D8%AA%D9%86%D8%B4-%D8%AF%D8%A7%D8%B1%D8%A7%DB%8C-%D8%AD%D8%A7%D8%B4%DB%8C%D9%87%28OutLine%29-%D9%87%D8%B3%D8%AA%D8%B4