PDA

View Full Version : سوال: افكت دادن به فرمها ..؟



Afshin160
دوشنبه 18 آذر 1387, 12:56 عصر
با سلام ...
يه سوال من چندي پيش به برنامه اي برخوردم كه فرم ها و حتي Msgbox ها زماني كه باز و بسته مي شدند از وسط يا كنار فرم باز يا بسته ميشدند يعني اگر يه فرم 58*58 را در نظر بگيريم فرم از نقطه 5*5 وسط صفحه با ميشود ....

حال سوال اينه كه چطور مي توان چنين فرمي داشت......؟

باتشكر
افشين160

shask00l
دوشنبه 18 آذر 1387, 13:28 عصر
فکر کنم برای انجام این باید متد show توی کلاس form رو overide کنی و انیمیشن رو اونجا اضافه کنی . بنابر این هر فرمی که از این کلاس ارث میبره این انیمیشن روش اجرا میشه .

Afshin160
دوشنبه 18 آذر 1387, 13:34 عصر
سلام .....

این باید متد show توی کلاس form رو overide کنی و انیمیشن رو اونجا اضافه کنی
انیمیشن رو اونجا اضافه کنی يعني چي..؟

H2K
دوشنبه 18 آذر 1387, 14:56 عصر
سلام از اين كلاس ميتونى استفاده كنى تو خود MSDN هم نمونه هست و در codeproject

C# Form Animation with Windows API




public class WinAPI
{
/// <summary>
/// Animates the window from left to right.
/// This flag can be used with roll or slide animation.
/// </summary>
public const int AW_HOR_POSITIVE = 0X1;
/// <summary>
/// Animates the window from right to left.
/// This flag can be used with roll or slide animation.
/// </summary>
public const int AW_HOR_NEGATIVE = 0X2;
/// <summary>
/// Animates the window from top to bottom.
/// This flag can be used with roll or slide animation.
/// </summary>
public const int AW_VER_POSITIVE = 0X4;
/// <summary>
/// Animates the window from bottom to top.
/// This flag can be used with roll or slide animation.
/// </summary>
public const int AW_VER_NEGATIVE = 0X8;
/// <summary>
/// Makes the window appear to collapse inward
/// if AW_HIDE is used or expand outward if the AW_HIDE is not used.
/// </summary>
public const int AW_CENTER = 0X10;
/// <summary>
/// Hides the window. By default, the window is shown.
/// </summary>
public const int AW_HIDE = 0X10000;
/// <summary>
/// Activates the window.
/// </summary>
public const int AW_ACTIVATE = 0X20000;
/// <summary>
/// Uses slide animation. By default, roll animation is used.
/// </summary>
public const int AW_SLIDE = 0X40000;
/// <summary>
/// Uses a fade effect.
/// This flag can be used only if hwnd is a top-level window.
/// </summary>
public const int AW_BLEND = 0X80000;
/// <summary>
/// Animates a window.
/// </summary>
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int AnimateWindow
(IntPtr hwand , int dwTime , int dwFlags) ;
}

shask00l
دوشنبه 18 آذر 1387, 21:07 عصر
انیمیشن رو اونجا اضافه کنی يعني چي..؟

البته روشی که دوستمون معرفی کردند خیلی بهتره . در مورد روش پیشنهادی خودم هم .....
اصولا وقتی قراره فرم نمایش داده بشه این متد فراخوانی میشه . حالا اول یا وسط اجرا فرق نمیکنه . بنابراین فرض میکنیم شما تابع show رو overide کردید . باید به انتهای کدهای معمول جهت نمایش فرم .. کد مربوط به anim رو اضافه کنید . در ساده ترین حالت شامل 1 حلقه میشه که height و width فرم رو افزایش میده و .....

برای کد مربوط به متد show هم میتونید به reflector مراجعه کنید .

پیروز باشید.