Nesneleri ve Animasyonlu Geçişler

umut dana

Banned
Katılım
8 Eki 2011
Mesajlar
171
Reaction score
0
Puanları
0
Konum
İstanbul Üsküdar
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.
 
Geri
Üst