سلام
میخوام فرم رو که close میکنم،باافکت بسته بشه.
مثلا:
محو بشه
از پایین به بالا بسته بشه
مثل طومار جمع بشه
یا امثال اینه...
کسی کامپوننتی یا روشی مد نظرش هست؟
سلام
میخوام فرم رو که close میکنم،باافکت بسته بشه.
مثلا:
محو بشه
از پایین به بالا بسته بشه
مثل طومار جمع بشه
یا امثال اینه...
کسی کامپوننتی یا روشی مد نظرش هست؟
با سلام
از تو تالار Opacity رو جستجو کن
کسی که به خود اطمینان دارد به تعریف دیگران احتیاج ندارد. «گوستاو لوبون»
با opacity ميشه محو كرد. و خوب هم ميشه ولي مثل طومار جمع بشه و افكت هاي ديگه رو نميشه باهاش اجرا كرد (اگر هم ميشه من نميدونم). براي كار با Opacity هم ميتوني يه تايمر يا ... بزاري و كم كم Opacity فرم رو كم كني تا محو بشه و بعدش كلا فرم رو ببندي. فقط همين افكت رو ميشه باهاش اجرا كرد.
یه چیزی به فکرم رسید:
مرحله اول این رو تست کنین که به دنبال فراخونده شدن رویداد بستن فرم، یه تایمر بذارین شروع کنه به کم کردن پراپرتی هایت (Height) فرم رو از مقدار واقعیش، مثلا خطی یا با یه نمودار درجه سوم.
تو مرحله بعدی هم همین کار رو تواما با کاهش وضوح یا همون Opacity انجام بدین. یعنی هم قد فرم رو کوتاه کنین هم وضوحشو.
تو مرحله سوم هم پوزیشن فرم رو پلاس پلاس یا مینس مینس کنین یعنی موقعیت ایکس و ایگرگ فرم پوزیشن رو!
فکر کنم واسه شروع افکتهای جالبی بشه در آورد از ترکیب این سه تا روش!
حرفه ای تر میخواین که رایگان هم باشه؟
کامپوننت خاصی مدنظرم نیست ولی فکر کنم میتونم واسه تون بنویسم یا حداقل سعی کنم که بنویسم!!!
دوست عزیز دکتر جکی
من یک سورس می ذارم که چندتا افکت حفن (مثل افکت های یولید) داره که روی عکس اعمال می شه.
خیلی جالبه
شاید بدردتون بخوره
ایشون دنبال افکت بر روی فرم هستند نه عکس! مثل افکتهای فرم تو لینوکس که با قر و فر باز و بسته میشن
شما اگر یکم زحمت بکشی و رو ی همین سورس کار کنی می تونی همینو واسه فرم هم پیاده کنی.
یه نمونه هم هست اینطوریه
ببخشید ادرس یادم رفته بود
http://www.codeproject.com/KB/cs/For...?display=Print
opacity توی Windows XP اصلاً درست جواب نمیده.
دکتر جان! دقت کن که این چیزی که میخواین تو مایه افکتهای لینوکس با دات نت به این راحتی نمیشه! چون کلاس فرم دات نت از کلاس بیس ویندوز رپ شده! یعنی برای چنین کاری باید از بیخ یه فرم نوشت! من میتونم عکس یا یه دکمه چهارم به بالای فرم اضافه کنم ولی اونجوری لرزوندن و قر دادن کار سختیه که هنگام رندر تصویر فرم باید انجام بشه!
بايد خودت افكت طراحي كني !
اگه خيلي حرفه اي مي خواهي آدرس ايميلتو بده برات send كنم
باید به سراغ WIN32 و توابع اون بری.من تاحالا کامپاننتی برای این کار ندیدم اما اگر از دوستان کسی سراغ داره معرفی کنه تا همگی استفاده کنیم.
این لینک را توقسمت URL از MSDN وراد کنید، چیز های جالبی براتون داره:
ms-help://MS.MSDNQTR.v90.en/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/animatewindow.htm
اما پیاده کردنش حوصله لازم داره که اگر اونقدری که به نظر میرسه مشتاق هستی براش وقت بگذار، به نتیجه میرسی.
می تونی از WPF هم استفاده کنی :D
دانلود حسابخانه مانی، برنامه مدیریت درآمد و هزینه رایگان
هر آنچه که هستیم، نتیجه افکاریست که در گذشته داشته ایم. (بودا)
بعد اینکه برنامت کامل شد می تونی یه عکس از فرم برنامه بگیری وبا یه برنامه ساخت GIF ، عکس رو با هر افکتی که دوست داری متحرک کن بعدش هم تو برنامه کدی وارد کن که این کار رو بکنه:
1- یه پنل که رنگ background و TransparencyKey مساوی داشته باشه
2-یه PictureBox که تصویرش همون تصویر متحرکه
فقط همین به فکرم رسید...
اگه نتونستی تصویر متحرک بسازی یه اسکرین شات از فرمت همراه با سایزش رو بذار شاید تونستم یه کاریش کنم
به نظر من یک روش مناسب برای این کار استفاده از AnimateWindow هست که به این شکل قابل پیاده سازی هست:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
//this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
}
const int AW_SLIDE = 0X40000;
const int AW_HOR_POSITIVE = 0X1;
const int AW_HOR_NEGATIVE = 0X2;
const int AW_BLEND = 0X80000;
[DllImport("user32")]
static extern bool AnimateWindow(IntPtr hwnd, int time, int flags);
private void Form2_Load(object sender, EventArgs e)
{
AnimateWindow(this.Handle, 500, AW_SLIDE | AW_HOR_POSITIVE);
}
}
از مزایای این API این هست که همه کار رو خودکار انجام میده و چندین مد عملکرد داره.
لازم به ذکر هست که این روش مشکلات خاص خودش رو داره. مثلا قاب دور فرم Animate نمی شه. البته می تونید در این زمینه در وب سرچ کنید. اگر راه ایده آلی پیدا کردید ما رو هم در جریان قرار بدید. من کد را به این شکل اصلاح کردم که تا حدودی برنامه را بهتر می کنه:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f = new Form2();
f.Show();
}
const int AW_HIDE = 0X10000;
const int AW_ACTIVATE = 0X20000;
const int AW_HOR_POSITIVE = 0X1;
const int AW_HOR_NEGATIVE = 0X2;
const int AW_SLIDE = 0X40000;
const int AW_BLEND = 0X80000;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int AnimateWindow(IntPtr hwand, int dwTime, int dwFlags);
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
AnimateWindow(this.Handle, 500, AW_ACTIVATE | AW_HOR_POSITIVE | AW_SLIDE);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
}
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
base.OnClosing(e);
if (e.Cancel == false)
{
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
AnimateWindow(this.Handle, 500, AW_HIDE | AW_HOR_NEGATIVE | AW_SLIDE);
}
}
}
شاید بشه بهترش هم کرد.
آخرین ویرایش به وسیله cardano7 : چهارشنبه 13 مرداد 1389 در 08:29 صبح
قربونت برم من الهی
dr_jacky_2005@yahoo.com
تو تایمر بنویس :
this.opacity-=.01;
و در رویداد formClosing می تونی تایمر رو فعال کنی.
سلام دوستان ببینید یه همچین چیزی میخوایید .