umut dana
Banned
Merhaba arkadaşlar,
CSharp ile geliştirdiğimiz örneklerimize bazen görsel özellikler katmak isteyebiliriz. Bir giriş formunu düzenlemeyi belki bir çoğunuz biliyorsunuzdur. Bir timer nesnesi ve form' a ait Opacity özelliği ile kolayca yapılabilir. Ancak başka animasyonlar istiyorsak veya bu animasyonları nesneler üzerinde uygulamak istiyorsak ne yapmalıyız.
Bunu yapmak için beraber bir sınıf oluşturalım:
Öncelikle projemize bir sınıf ekleyelim ve adını "Animasyon" koyalım. Sonrasında aşağıdaki isim uzaylarını sınıfımıza dahil edelim.
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
Bu isim uzaylarını ekledik. Peki şimdi ne olacak. Windows' a ait user32.dll dosyasında AnimateWindow adında bir metot mevcut. Link aşağıda:
AnimateWindow function (Windows)
Aşağıdaki kodları sınıfınıza eklemeden önce bu linke bakmanız sizin için faydalı olacaktır.
Şimdi gelelim üst kod öbeğine:
Önce metodumuzu çekelim
[DllImport("user32.dll")]
private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);
Şimdi kullanacağımız değişkenleri tanımlayalım:
private const int AW_ACTIVATE = 0x00020000;
private const int AW_SHOW = 0x00000000;
private const int AW_HIDE = 0x00010000;
//---------------------------------------
private const int AW_BLEND = 0x00080000;
private const int AW_CENTER = 0x00000010;
private const int AW_ROLL = 0x00000000;
private const int AW_SLIDE = 0x00040000;
//---------------------------------------
private const int AW_HOR_POSITIVE = 0x00000001; // Sağa doğru
private const int AW_HOR_NEGATIVE = 0x00000002; // Sola doğru
private const int AW_VER_POSITIVE = 0x00000004; // Aşağı doğru
private const int AW_VER_NEGATIVE = 0x00000008; // Yukarı doğru
//---------------------------------------
public enum Animation { Blend, Center, Roll, Slide }
public enum Direction { Right, Left, Down, Up }
//---------------------------------------
private static int[] valueAnimation = { AW_BLEND, AW_CENTER, AW_ROLL, AW_SLIDE };
private static int[] valueDirection = { AW_HOR_POSITIVE, AW_HOR_NEGATIVE, AW_VER_POSITIVE, AW_VER_NEGATIVE };
Son olarak ta fonksiyonumuzu yazalım:
public static void Animate(Control control, Animation animasyon, Direction direction, int mS)
{
//---------------------------------------
int dwFlags = valueAnimation[(int)animasyon] | valueDirection[(int)direction];
//---------------------------------------
if (control.Visible)
{
dwFlags |= AW_HIDE;
}
else
{
//---------------------------------------
dwFlags |= AW_SHOW;
//---------------------------------------
if (control.TopLevelControl == control) dwFlags |= AW_ACTIVATE;
//---------------------------------------
else
{
if (animasyon == Animation.Blend) throw new ArgumentException();
}
}
//---------------------------------------
if (AnimateWindow(control.Handle, mS, dwFlags) == false)
{
throw new Exception("Animation Failed");
}
//---------------------------------------
control.Visible = !control.Visible;
//---------------------------------------
}
Hepsi bu kadar. Kullanması size kalmış. Bu sınıfı kullanan basit bir örnek isterseniz form üzerine bir buton ekleyip deneyebilirsinz. Ancak unutmayın Blend fonksiyonu sadece formlar için tanımlıdır.
CSharp ile geliştirdiğimiz örneklerimize bazen görsel özellikler katmak isteyebiliriz. Bir giriş formunu düzenlemeyi belki bir çoğunuz biliyorsunuzdur. Bir timer nesnesi ve form' a ait Opacity özelliği ile kolayca yapılabilir. Ancak başka animasyonlar istiyorsak veya bu animasyonları nesneler üzerinde uygulamak istiyorsak ne yapmalıyız.
Bunu yapmak için beraber bir sınıf oluşturalım:
Öncelikle projemize bir sınıf ekleyelim ve adını "Animasyon" koyalım. Sonrasında aşağıdaki isim uzaylarını sınıfımıza dahil edelim.
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
Bu isim uzaylarını ekledik. Peki şimdi ne olacak. Windows' a ait user32.dll dosyasında AnimateWindow adında bir metot mevcut. Link aşağıda:
AnimateWindow function (Windows)
Aşağıdaki kodları sınıfınıza eklemeden önce bu linke bakmanız sizin için faydalı olacaktır.
Şimdi gelelim üst kod öbeğine:
Önce metodumuzu çekelim
[DllImport("user32.dll")]
private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);
Şimdi kullanacağımız değişkenleri tanımlayalım:
private const int AW_ACTIVATE = 0x00020000;
private const int AW_SHOW = 0x00000000;
private const int AW_HIDE = 0x00010000;
//---------------------------------------
private const int AW_BLEND = 0x00080000;
private const int AW_CENTER = 0x00000010;
private const int AW_ROLL = 0x00000000;
private const int AW_SLIDE = 0x00040000;
//---------------------------------------
private const int AW_HOR_POSITIVE = 0x00000001; // Sağa doğru
private const int AW_HOR_NEGATIVE = 0x00000002; // Sola doğru
private const int AW_VER_POSITIVE = 0x00000004; // Aşağı doğru
private const int AW_VER_NEGATIVE = 0x00000008; // Yukarı doğru
//---------------------------------------
public enum Animation { Blend, Center, Roll, Slide }
public enum Direction { Right, Left, Down, Up }
//---------------------------------------
private static int[] valueAnimation = { AW_BLEND, AW_CENTER, AW_ROLL, AW_SLIDE };
private static int[] valueDirection = { AW_HOR_POSITIVE, AW_HOR_NEGATIVE, AW_VER_POSITIVE, AW_VER_NEGATIVE };
Son olarak ta fonksiyonumuzu yazalım:
public static void Animate(Control control, Animation animasyon, Direction direction, int mS)
{
//---------------------------------------
int dwFlags = valueAnimation[(int)animasyon] | valueDirection[(int)direction];
//---------------------------------------
if (control.Visible)
{
dwFlags |= AW_HIDE;
}
else
{
//---------------------------------------
dwFlags |= AW_SHOW;
//---------------------------------------
if (control.TopLevelControl == control) dwFlags |= AW_ACTIVATE;
//---------------------------------------
else
{
if (animasyon == Animation.Blend) throw new ArgumentException();
}
}
//---------------------------------------
if (AnimateWindow(control.Handle, mS, dwFlags) == false)
{
throw new Exception("Animation Failed");
}
//---------------------------------------
control.Visible = !control.Visible;
//---------------------------------------
}
Hepsi bu kadar. Kullanması size kalmış. Bu sınıfı kullanan basit bir örnek isterseniz form üzerine bir buton ekleyip deneyebilirsinz. Ancak unutmayın Blend fonksiyonu sadece formlar için tanımlıdır.