yazgelistir.com
  Ana Sayfa   Forumlar   Blog  Hakkımızda
  
Loading... Yükleniyor. Lütfen bekleyin ...
 Kategoriler
ASP.NET
ADO.NET
Visual Basic .NET
Visual C# .NET
Visual Studio ve Araçlar
Windows Server System
Office System
.NET Framework
SQL Server
XML Web Servisleri
Yazılım Güvenliği
Yazılım Mühendisliği
Mobil Teknolojileri
Dynamics
Smart Client
Expression Studio
Silverlight
Kod Parçaları
Açık Kaynak Kodlu Uygulamalar
İş Zekası
Windows Mobile Embedded

    0
Çıkış Yap
Üyelik Bilgilerimi Güncelle
Seminerlerim
Favorilerim
Ajanım

 Yazgeliştir
Yazar olmak ister misiniz?
Forumlar
Kitap Önerileri
Haberler
Röportajlar
Yazarlar
İpuçları
Görüşleriniz
Hakkımızda

  İstatistikler
En son kayıt olan üye:
ftonak

Şuanki online üyeler ( 8 ) :
vtokmak , murat_karaslan , analyzer20 , SoftwareExperts , myurt87 , lammoth , ftonak , ahmetkilic
 

DorukNet 
     Mobil Teknolojileri Kategorisi  » Şeffaf bir görünüm , Transparan Kontrol Yazıyoruz...    

Şeffaf bir görünüm , Transparan Kontrol Yazıyoruz...

Print Versiyonu


 
Yazar: Eralp Erat

Tarih:04.02.2008

Puan:4,33 (Oy Kullanan:6)

Okuma Sayısı:688

  Makaleyi İşaretle


Makale Özeti
Bu makalemizde mobil cihazlarımızda kullandığımız standart System.Windows.Form.Label class’ının bir örneği olan label nesnemiz yerine kendi transparan label’imizi nasıl yapabileceğimizi irdeleyeceğiz..(Aslında herhangi bir transparent control’ün nasıl yapılabileceğini...)


Makale

Bu makalemizde mobil cihazlarımızda kullandığımız standart System.Windows.Form.Label class’ının bir örneği olan label nesnemiz yerine kendi transparan label’imizi nasıl yapabileceğimizi irdeleyeceğiz..(Aslında herhangi bir transparent control’ün nasıl yapılabileceğini...)

Bildiğiniz gibi mobil cihazlar desktop bir pc ye istinaden daha kısıtlı kaynaklara sahip olduğundan haliyle yazılım geliştiricilerin bir çoğu platformun bu kısıtlılıklardan ötürü mümkünse desktop ya da web tabanlı uygulamalara müşterilerini yönlendiriyorlar..Burda yönlendirmekten kastım sadece sunum katmanını içeriyor..Yalnis anlasilmasin J Yoksa mobil çözüm üreten bir cok uygulama geliştirici zaten .NET çercevesi  içerisinde özgürce bilgileri dahilinde istedikleri gibi çözümlerini üretmeye devam ediyor..Hatta .NET 3.5 ile gelen yeniliklerle bu olay cok daha zirveye tırmanmış durumda..Sonuç itibariyle bileşen  pazarına bakıldığında 3. Parti bileşen üreticilerinin windows ve web pazarının büyüklüğünden ötürü mobile alanında yaptıkları ürünlerin  sayısı oldukca kısıtlı..(Zorluğuda cabası..) İsterseniz onlara inat .NET CF içerisinde olmayan bir transparan bir label’ı nasıl yapabileceğimize başlayalim J

Öncelikle ihtiyacımız olan kodsal tasarım bileşenlerini yazmaya başlayalım..

    public interface IBackground

    {

        Image BackgroundImage { get; }

    }

Bu interface sayesinde bunu kullanan classların Image tipinde ki “bu image bizim ilgili formumuzun zemin rengi için gerekli” property’iyi tanımlama zorunluluğu getiriyoruz..

    public class TransFxControlBase : Control

    {

        protected bool HasImage = false;

 

        protected override void OnPaintBackground(PaintEventArgs e)

        {

            IBackground form = Parent as IBackground;  //DİKKAT! Burda ilgili kontrolün parent’ının bu interface’i implemente edip etmediğini kontrol ediyoruz.. Değilse zaten normal bir şekilde calismaya devam edecektir.

            if (form == null)

            {

                base.OnPaintBackground(e); // normal...

                return;

            }

            else

            {

                HasImage = true;  // evet implementasyon yapıldıysa OK!!

            }

 

            e.Graphics.DrawImage(

              form.BackgroundImage,

              0,

              0,

              Bounds,

              GraphicsUnit.Pixel);  // işte şimdi resmi zemine oturtuyoruz..!

        }

 

        protected override void OnTextChanged(EventArgs e)

        {

            base.OnTextChanged(e);  //Text değişimine karşı resmin geçerliliği kontrol ediliyor..Invalidate kullanmazsak bu evet fire edildiğinde refresh problemi yaşaniyor..

            Invalidate();

        }

 

        protected override void OnParentChanged(EventArgs e)

        {

            base.OnParentChanged(e); // Aynı şekilde ilgili kontrolün parent’inin değişmesi de kontrolün refresh’ini gerektiren durumlardan birisidir..

            Invalidate();

        }

    }

 

Evet yukarıda kod içerisinde durumu açıkca ifade etmeye calistik.Şimdi isterseniz gelin yazdığımız bu customcontrol classindan türeyecek olan TransFxLabel isimli class’imizi yazalım..

        public class TransFxLabel : TransFxControlBase

    {

        ContentAlignment alignment = ContentAlignment.TopRight; // ilgili kontrolümüz içerisinde text ifadenin nerede yer alacağını set ediyoruz..

        StringFormat format = null;

        Bitmap scr_pix = null;

 

        public TransFxLabel()

        {

            format = new StringFormat();

        }

 

        public ContentAlignment TextAlign // bu property sayesinde de tam olarak string ifadenin nerede belirleneceği enumeration ile set edilmiş oluyor...

        {

            get

            {

                return alignment;

            }

            set

            {

                alignment = value;

                switch (alignment)

                {

                    case ContentAlignment.TopCenter:

                        format.Alignment = StringAlignment.Center;

                        format.LineAlignment = StringAlignment.Center;

                        break;

                    case ContentAlignment.TopLeft:

                        format.Alignment = StringAlignment