DataRowVersion | Original

Herkese tekrar merhaba!

Bugün çok güzel ve aslında yıllardır DataTable nesnesi ile uğraşmama rağmen bilmediğim, yeni öğrendiğim DataRowVersion.Original kavramı üzerinde duracağız.

Senaryomuz şu şekilde olacak :

1.       Yeni bir DataTable oluşturacağız ve bu DateTable içinde PersonelAd, PersonelSoyad, Yas alanlarını barındıracağız.

2.       Ad, soyad ve yaş bilgilerini barındıran 3 DataRow oluşturacak ve bunları DataTable içerisine yerleştireceğiz.

3.       Sonra, Ozan Günceler personelinin 35 olarak tanımlanan yaşını, 25 olarak set edeceğiz.

4.       En son olarak diyeceğiz ki, Ozan Günceler personelinin yaşı 25 yapılmadan önce kaçtı ? Bunun cevabını almaya çalışacağız.

Hemen DataTable tanımlamasıyla başlayalım. İşin biraz kolayına kaçarak, boş bir Windows Form’un Load event handler’ı içerisine aşağıdaki kodu yerleştiriyorum :

datarowstate001.jpg

Şimdi sırada, Ozan Günceler, İpek Çobanoğlu ve Ejder Kuvemli isimli personellerimizin tanımını yaparak, DataTable içerisine yerleştirmek var. Bunu başarabilmek için 3 DataRow nesnesi oluşturacağım ve bu nesnelerin sütun bilgilerini set ederek, DataTable.Rows içerisine ekleyeceğim.

 

datarowstate002.jpg

 

Gerekli tanımlamaları yaptık. Dikkat ederseniz, row’ları ekledikten sonra DataTable için AcceptChanges() metodunu çağırıyorum. Bunun sebebi, row datatable içine ilk eklendiğinde Added durumunda olması ve bu durumda olduğunda bize önceki değerini vermemesi.

 

Şimdi sırada, DataTable içindeki 2. Sıradaki kaydın yaşını değiştirmek var. O kişi de bendenizin kaydı. Değiştirmek için aşağıdaki kodu ekliyorum :

 

datarowstate003.jpg

 

Artık DataTable üzerindeki, Ozan Günceler’e ait yaş bilgisi değişti. Ama biz öğrenmek istiyoruz ki, değişiklikten önce bu yaş kaçtı ? Aşağıdaki kodu ekliyorum :

 

datarowstate004.jpg

 

Tamamladığımız bu kodu çalıştırdığımızda aşağıdaki mesaj kutusunu karşılamış oluyoruz :

 

datarowstate.jpg

 

DataRowVersion aslında bir Enumaration, ve elemanları da şunlar :

 

datarowstate2.jpg

 

Umarım faydası olur :)

 

Tekrar görüşmek üzere!

DataTable.Compute()

Çoğu zaman veritabanından çektiğimiz sorguları kod içerisinde kullanmak için DataTable içersinde kullanırız. Örneğin aşağıdaki veri kümesi SQL server’dan gelmiş olsun:

MusteriId

Adi Soyadi Kredi
1 Ozan Günceler 1500
2 İpek Çobanoğlu 2500
3 Asuman Acar 500
4 Kemal Okutan 1250
5 Muharrem Karabay 3443

Yukarıdaki kümeyi bir DataTable içinde barındırdığımızı düşünelim. Bu veriyi göstermek kolay (GridView veya üçüncü parti kontroller kullanarak). Peki bu kümedeki belirli bir alana göre SUM, COUNT, AVERAGE veya bunlar gibi matematiksel işlemler yapmak isteseydik nasıl olacaktı ?

Mantıksal düşünüldüğünde, DataTable.Select() metodu kullanılarak, kritere göre sonuç alınabileceği düşünülebilir ancak Select() metodu matematiksel işlemler için değil, sadece filtreleme işlemleri ile kullanılır. Eğer DataTable.Select(“SUM(‘Kredi’)”) yazarak çalıştırırsanız, .NET size run-time hatası döndürecek ve Select() metodunun bu şekilde kullanılamayacağını belirtecektir.

Matematiksel işlemler için, DataTable.Compute() metodunu kullanıyoruz.

Örnek:

Bizim tablomuzdaki müşterilerin kredi miktarlarının toplamını DataTable içinden hesaplayabilmek için aşağıdaki satırı kullanmanız yeterli :
int KrediToplami = Convert.ToInt32(insDataTableMusteri.Compute(“SUM(‘Kredi’)”));

 

Eğer bir kriter belirterek toplam almak istersek aşağıdaki kodu kullanabilirsiniz
(MusteriId=2 için toplam) :
int KrediToplami = Convert.ToInt32(insDataTableMusteri.Compute(“SUM(‘Kredi’)”,”MusteriId=2”));

 

Daha fazla bilgi almak için aşağıdaki MSDN makalesinden faydalanabilirsiniz :

http://msdn2.microsoft.com/en-us/library/system.data.datatable.compute.aspx

 

Herkese iyi çalışmalar…

Posted in Blogroll. 1 Yorum »

ListView Drag And Drop | Varsayılan Dosya Ikonunu Görüntülemek

Herkese merhaba!

Önce kendimle ilgili bir haber vererek başlamak istiyorum. 11 Haziran 2007 tarihinden itibaren Bilge Adam’daki  görevimi  bırakarak, Proje Yöneticisi olarak başka bir firmada göreve başladım. Son zamanlarda blogu çok aksattım, telafi edeceğiz inşallah.

Bu yazımda değinmek istediğim konu, okurlarımdan birinden geliyor. Sevgili “Fatih”, diskimizdeki  herhangi bir dosyayı , uygulamamız üzerindeki ListView içine bıraktığında, dosyanın ikonunun otomatik olarak gösterilip gösterilemeyeceğini sormuş.

İşte cevabı :

1.       Öncelikle yeni bir proje oluşturuyoruz. C# ile hazırladım, vakit bulabilirsem VB.NET örneğini de göstereceğşm daha sonra. Ama zaten çevirmek kolay olur diye düşünüyorum.

      dfi_01.jpg

 

 

2.       Projeyi oluşturduktan sonra formun üzerine 1 adet ListView yerleştiriyoruz. Özellikleri aşağıdaki şekilde olmalı :

Name               lstDosyaListesi
Allow Drop      true
View                 Details
Columns           2 adet (özelliklerinin çok bir önemi yok)

3.       Bu düzenlemeyi yaptıktan sonra form üzerine bir ImageList ekliyoruz. Özellikleri aşağıdaki gibi olmalı :

Name               imgIkonlar

4.       Property Box kullanarak, lstDosyaListesi kontrolümüzün SmallImageList özelliğini imgIkonlar kontrolüne bağlıyoruz.

             dfi_02.jpg

             (Genel Görünüm)

 

Bilmemiz gereken 2 Event Handler var. Bunlardan ilki DragEnter, diğeri ise DragDrop

 

DragEnter
Bu event, sol klik basılı iken sürüklenen nesne, kontrolümüzün sınırları içerisine girdiği anda tetikleniyor.  Önemli olan nokta, drag işleminin tipini belirtmemiz gerekiyor olması (Effect) .NET bize bu konuda aşağıdaki opsiyonları sunuyor :

Copy   Sürüklenen nesnenin kopyalanmasını istemek.
Move  Sürüklenen nesnenin taşınmasını istemek.
Link     Sürüklenen nesnenin kısayoluna ulaşmak.
None   Sürüklenen nesneyi kontrol üzerinde bırakılsa bile işleme almamak.
Scroll   Scroll (?)
J Henüz inceleyemedim
All        Listedeki hareketlerden herhangi birinin oluşmasına izin vermek.

Bizim senaryomuz gereği copy, move tarzı hareketlere gerek yok. Bu tip hareketler aynı uygulama içindeki birden fazla ListView arasında item’ları kopyalamak veya taşımak için daha çok kullanılıyor. Bizim amacımız sürüklenen dosyanın path bilgisini ve dosyanın adı ile uzantısını elde etmek. (Ben yinede Effect.Copy tanımlasını kullandım)

DragDrop
Bu event, kontrol üzerine sürüklenen nesne bırakıldığında tetikleniyor. Ikonun ne olduğuna karar verip listeye ekleyeceğimiz yer burası.

 

1.       Önce DragEnter event handler’ını yazıyoruz:

       private void lstDosyaListesi_DragEnter(object sender, DragEventArgs e)
      
{
         
e.Effect = DragDropEffects.Copy;
      
}

2.       Daha sonra da DragDrop event handler’ını yazıyoruz

      private void lstDosyaListesi_DragDrop(object sender, DragEventArgs e)      
      
{
         string[] dragDropEdilenDosyalar =
             (string[])e.Data.GetData(DataFormats.FileDrop, false);
        
        
foreach (string strDosyaAdi in dragDropEdilenDosyalar)
         {
            // Dosya uzantısının Windows Registry’de kayıtlı ikonunu al
            System.Drawing.Icon insIkon = SystemIcons.WinLogo;
 
           insIkon = Icon.ExtractAssociatedIcon(strDosyaAdi);
            // Extract edilen ikonu ImageList içine kaydediyoruz.
            // Eğer önceden kayıtlıysa kaydetmeyeceğiz ama :)
 
           // Öncelikle elimizdeki dosya yolunu FileInfo
            // nesnesine bağlıyoruz.
 
           System.IO.FileInfo insFileInfo = new System.IO.FileInfo(strDosyaAdi);
            if (!imgIkonlar.Images.ContainsKey(insFileInfo.Extension))
            {
              //Bu ikon listede yok, ekle
              imgIkonlar.Images.Add(insFileInfo.Extension, insIkon);
            }
            // Son olarak, Drag & Drop edilen dosyanın adını ve ikonunu
 
           // Listview üzerinde göstermek kaldı
            ListViewItem insListViewItem = new ListViewItem();
            
           
insListViewItem.ImageIndex =
                 imgIkonlar.Images.IndexOfKey(insFileInfo.Extension);
           
            insListViewItem.SubItems.Add(insFileInfo.Name);
            lstDosyaListesi.Items.Add(insListViewItem);
         
}
      }

İşte sonuç :

               dfi_03.jpg

Umarım yardımı olur. Tekrar görüşmek üzere ! J

 

WML Browser Destekli ASP.NET Sayfaları

Tekrar merhabalar,

Bugünkü yazımda ASP.NET ile pek çok cep telefonunda bulunan WML destekli WAP Browser’lar üzerinde gösterilebilen sayfaların nasıl generate edildiğini inceleyeceğiz.

WML nedir ?

Cep telefonlarının hayatımıza ilk girdiği dönemlerde pek çoğunun üzerinde WAP browser vardı. Günümüzde cep telefonlarının üzerlerinde javascript bile çalıştırabilen gelişmiş tarayıcılar var ancak bu telefonların fiyatları hala oldukça yüksek. Kurumsal ve büyük projelerde firmalar mobile uygulamaların kullanım maliyetlerini en asgaride tutmak istediklerinden genellikle en ucuz cep telefonlarına yöneliyorlar. Haliyle bu cep telefonlarının üzerinde de sadece WAP browser’lar oluyor.

ASP.NET ile WML arasında ne farklar Var ?

Aslında hiçbir fark yok. WAP browser bir istekte bulunduğunda IIS bu isteği ISAPI bileşenleri ile derlemeye çalışıyor. ASP.NET konfigürasyonundaki Machine.config dosyasına bakarak, istekte bulunan cihazın tipini belirlemeye çalışıyor ve kabiliyetlerini gözden geçiriyor. Buna göre sayfadaki görsel öğeleri cihazın kabiliyetleri doğrultusunda WML kodu haline getirerek istemciye iletiyor. WML çok daha “sınırlı” yeteneklere sahip olduğundan, Machine.config dosyasının doğru bir şekilde ayarlanmış olması çok önemli!

Örnek WML uygulaması

Örneğimiz aslında çok basit. Bir form oluşturacağız ve bu formun üzerinde 2 textbox’ımız olacak. Bunlardan biri sadece numarik değer kabul edecek diğerine ise istediğimiz herhangi birşeyi yazabileceğiz. Butona bastığımızda başka bir sayfaya gidecek ve bu kutulara girdiğimiz değerleri göstereceğiz.

Mobile Web Form

Mobile Web Form, sayfamızın WML kullanılarak derlenmesi gerektiğini IIS tarafına anlatan bir yapı. Aslında normal Web Form ile aralarında hiçbir fark yok sadece başka bir sınıftan türüyorlar.

001.jpg

Öncelikle mobileTest adında bir ASP.NET Web Site projesi oluşturuyorum

Daha sonra Solution Explorer içinden default olarak projeyi oluşturduğumuzda hazırlanan Default.aspx ve kendisiyle ilgili tüm dosyaları siliyorum. Neden siliyorum ? Çünkü bu dosya standard bir ASP.NET sayfasının özelliklerini taşıyor. Mobil cihazların çoğu ile uyumsuz.

002.jpg

Şimdi, mobil cihazlar ile uyumlu bir Page’i projemize ekleyelim. Bunun için, proje üzerinde sağ-klik yaparak Add New Item diyorum ve Mobile Web Form nesnesini seçiyorum.

 003.jpg

Default.aspx adında yeni bir Mobile Form projemize eklendi. Dikkat edecek olursanız ASPX kaynağında aşağıdaki gibi bir tag göreceksiniz :

<mobile:Form id=”Form1″ runat=”server”> </mobile:Form>

İşte ilk farklılık burada. Form taglarinin başında mobile ibaresi var.

Eğer ASPX sayfamızın dizaynına bakacak olursanız ikinci bir farklılık göreceksiniz :

004.jpg

Formumuz artık tam sayfa değil, bir çerçeve ile sınırlandırılmış durumda. Form1 çerçevesinin dışına koyacağınız, yazacağınız herhangi birşey doğru olarak derlenemeyebilir. Derlense bile cihaz tarafından doğru gösterilemeyebilir. Biz tüm bileşenlerimizi bu çerçevenin içine yerleştireceğiz.Form içine Adınız ve Yaşınız şeklinde 2 textbox yerleştireceğim. Dikka ederseniz, toolbox üzerinde bulunan Mobile Web Forms kategorisindeki elemanların artık pasif olmadığını görebilirsiniz. Eğer bu kategoriyi göremiyorsanız Toolbox üzerinde sağ-klick yaparak Show All seçeneğini seçebilirsiniz. Biraz kalabalık olacak ama Mobile Web Forms da görüntülenecek.

Bu kategoriden aldığım bir Label kontrolünü form üzerine bırakıyorum.

005.jpg

Dikkat ettiyseniz Label tüm form genişliği kapladı. İşte limitasyonlarımızdan biri. WML destekli sayfalarda tasarım anlamında harikalar yaratamıyorsunuz L Ama biz limitleri zorlayacağız. Hemen ardından bir de Textbox kontrolü bırakıyorum form üzerine.

 006.jpg

Eğer bu noktada Internet Explorer ile önizleme yapmak isterseniz bakın sayfamız şu şekilde gözükecek :

0071.jpg

Şimdi gelelim Textbox’un Label’ın yanından başlamasına. Alt alta görünsün istemiyoruz. Önce Label üzerindeki metni değiştiriyorum. Label’ın Text özelliğini “Adınız : ” olarak değiştirdikten sonra BreakAfter özelliğini ise False yapıyorum. BreakAfter True olduğunda, runtime sırasında, bu kontrolün derlenmesinden sonra bir line break konularak diğer kontrollerin derlenmesine başlanması. Biz textbox’ın label’dan hemen sonra çizilmesini istediğimiz için BreakAfter’ı  False yapıyoruz. Son durum şu hale geliyor :

008.jpg

Aynı şeyi diğer kutumuz için de yapalım. Yine bir label ve ardından bir textbox koyuyoruz. Label’ın Text özelliğini “Yaşınız : “ yapıyoruz ve BreakAfter özelliğini FALSE yapıyoruz. Textbox içine sadece numerik bilgi girebileceğiniz için Numeric özelliğini TRUE yapıyoruz. Son durum aşağıdaki gibi :

009.jpg

Son olarak bir buton yerleştiriyoruz. Bu buton bizi diğer bir sayfaya gönderecek ve textbox’lar içindeki metinleri okumamızı sağlayacak.

Şimdi butonu kodlayalım. Designer üzerinde buton üzerinde double-click yapıyorum ve codebehind içindeki event handler koduna erişiyorum. Aşağıdaki kodu event handler içerisine yazıyoruz:

     protected void Command1_Click(object sender, EventArgs e)
    {
        string strAdiniz = “”;
        string strYasiniz = “”;          strAdiniz = TextBox1.Text;
        strYasiniz = TextBox2.Text;

        this.RedirectToMobilePage(“goster.aspx?var1=” + strAdiniz + “&var2=” + strYasiniz);
    } 

Son olarak, goster.aspx adında yeni bir mobile form oluşturuyoruz ve aşağıdaki kodu Page Activate içerisine yazıyoruz.

     protected void Form1_Activate(object sender, EventArgs e)
    {
        Response.Write(“Adınız : “ + Request.QueryString["var1"].ToString());
       
Response.Write(“Yaşınız : “ + Request.QueryString["var2"].ToString());
    }

010.jpg

011.jpg

Form üzerine girdiğimiz bilgileri diğer sayfaya taşımak için query string kullandık. var1 ve var2 değişkenlerine değerlerimizi yükleyerek RedirectToMobilePage() metodundan faydalandık. Gittiğimiz goster.aspx sayfası Activate olduğunda (yani OnLoad gibi) query string kolleksiyonunu okuyarak ekrana gerekli girişleri yazdı. Default.aspx sayfasını Start Page olarak belirlemeyi unutmayın!

Mobile Web Formlarına giriş yaptık. Eğer bir hosting imkanınız varsa, projenizi derleyip sunucuya yerleştirdikten sonra cep telefonunuz ile de deneyebilirsiniz. Ya da pek çok mobile device emulator’dan herhangi birini kullanabilirsiniz. Google bunlarla dolu.Umarım işinize yarar.

Tekrar görüşmek üzere J

C# ile Clipboard Datasını Okumak

Herkese tekrar merhaba. Benim blog artık “günlük” olmaktan çıktı, “aylık” olmaya doğru gidiyor L

Bu yazımda sizlerle, Clipboard içindeki bir veriyi C# ile nasıl okuyabileceğinizi göstermek istiyorum. Benim örnek senaryom, üzerinde Sağ Klik àCopy yaptığınız bir imajı, C# içerisindeki PictureBox kontrolüne almak olacak.

Kodlamaya girmeden önce aşağıdaki gibi bir form hazırlayın :

 

clipboard_01.jpg

 

Clipboard üzerindeki herhangi bir veriyi okumak için System.Windows.Forms namespace’indeki Clipboard nesnesinin GetDataObject() metodundan faydalanırız.

Bu metod çağrıldığında gelecek olan veri  herhangi birşey olabileceğinden (text, resim, video), IDataObject interface’inden faydalanarak resim olup olmadığını anlamaya çalışırız.

Şimdi kodlamaya geçelim…

VS2005’te, btnOku üzerinde 2 kez click yaparak butonumuzun onClick event handler’ına yazmaya başlıyoruz.

 

if (Clipboard.GetDataObject() != null)
{
    IDataObject data = Clipboard.GetDataObject();
 
   if (data.GetDataPresent(DataFormats.Bitmap))
    {
       Image image = (Image)data.GetData(DataFormats.Bitmap, true);
 
      pctResim.Image = image;
    }
    else
    {
       MessageBox.Show(“Clipboard üzerindeki veri, bitmap verisi değil”);
    }
else
{
   MessageBox.Show(“Clipboard boş!”);
}

Kodu yazdıktan sonra Run ediyoruz ve test etmek için, herhangi bir metnin bir kısmını tarayarak CTRL+C yapıyoruz. Artık clipboard taradığımız metni ihtiva ediyor. Şimdi yazdığımız uygulamadaki Clipboard Oku butonuna tıklıyoruz ve aşağıdaki uyarıyı alıyoruz;

 

 clipboard_022.jpg

 

Bu uyarıyı almamız gayet normal çünkü, kod içerisindeki ikinci IF bloğunda bulunan  DataFormats.Bitmap koşulu, clipboard verisinin bitmap verisi olmadığını yakalıyor ve devam etmemize olanak vermiyor. Haklı J

Şimdi aynı denemeyi bir resim dosyası üzerinde yapalım. Ben test ederken www.google.com ana sayfasının tepesindeki çok sevdiğim Google logosunun üzerinde Sağ-Click yaparak COPY dedim. Daha sonra uygulamaya dönerek Clipboard Oku butonuma tekrar bastım. Sonuç aşağıdaki şekilde;

 

clipboard_023.jpg

 

Tekrar görüşmek üzere !

 

 

 

 

 

 

 

Posted in Blogroll. 3 Yorum »

WPF | DoubleAnimation [+ Video][Bolum 1]

Merhabalar!

WPF makalelerim bundan boyle video destekli olacak. Asagidaki linki tiklayarak DoubleAnimation sinifinin kullanimi ile ilgili kaydettigim kucuk bir video var. WPF ile ilgilenmeye baslayan arkadaslarin cok isine yarayacagini dusunuyorum.

Videoda kapsadigim konular;

1) Onceki makalemde cizdigimiz dikdortgenin olusturulmasi,
2) DoubleAnimation sinifinin kullanilmasi ile temel animasyona giris,
3) BeginAnimation metodunun kulanimi

Dusuncelerinizi bekliyorum. Bundan sonraki videolarimi isteklerinize gore sekillendirmeye calisacagim.

Tekrar gorusmek uzere!

Bolum 1 [Windows AVI, 13:45]
http://85.109.94.226/WPF/bolum1.rar

Posted in Blogroll. 2 Yorum »

Microsoft Presentation Foundation WPF | Basics, Hello World

Evet. Çok uzun zaman oldu yine 1 hafta kadar ilgilenemedim Blog ile ama çok yakından takip etmeye başlayacağınız düşündüğüm bir yazı dizisinin ilk bölümü ile kendimi affettirmek istedim.

.NET Framework 3.0 ile geliştirebileceğiniz ve daha çok Microsoft Vista tarafından tamamiyle desteklenen WPF uygulamalarına giriş yapıyoruz bu yazımla.

 

WPF Nedir ?
Microsoft .NET Framework 3.0 ile getirdiği yeniliklerden benim en çok hoşuma gideni diyebiliriz. Her yazılımcının bir tasarımcı olmasını bekleyemeyeceğimiz gibi, her tasarımcının da bir yazılımcı olmasını bekleyemeyiz. Microsoft bu düşünceden hareket ederek, zengin görünümlü Windows uygulamaları geliştirebileceğiniz yeni bir standart oluşturmaya doğru gidiyor. WPF kısaca bu yeni akımın öncüsü. Bu akımla beraber, tasarım ekipleri ile yazılım ekiplerinin, yazılım geliştirme sürecinde birbirlerini kesmelerini engellemek amaçlanıyor. Yani yazılımcı kodunu yazacak, tasarımcı sadece tasarım kodu (XAML) ile ilgilenecek ve böylece her iki süreç birbirinden bağımsız hareket edebilecek.

WPF Uygulamalarında Ne Farklılık Var ?
WPF uygulamalarında formlarımız artık ASP.NET çalışıyormuşuz gibi tasarlanacak. Yani her formumuz artık bir XAML dosyası. Tüm tasarım öğeleri bu dosyanın içinde. Klasik bir HTML sayfasında kullandığımız <input> tag’ini hatırlayın. Windows uygulamanızın GUI elemanları XML yapısındaki XAML dosyası içinde yerini alacak. Birazdan örneğini göstereceğim.

Peki kodlama nereye yapılacak ? Tamam… Pek çok şey değişiyor olabilir Microsoft ama kodlama herzamanki gibi, XAML dosyasından ayrı bir dosya üzerinde yapılmaya devam ediliyor.

Çok fazla metinsel bilgi vermektense hemen bir örnek yapalım istiyorum. Blogumu takip eden arkadaşlar bilirler örnek vermenin öğrenme sürecini çok hızlandırdığına inanıyorum.

Senaryomuz şu şekilde olacak :

1.       Bir WPF projesi oluşturacağız. WPF projesi oluşturmak için gereken kurulumları da sizinle paylaşıyor olacağım.

2.       Bazı primitive şekiller çizeceğiz (Daire, dikdörtgen, poligon)

3.       Oluşturduğumuz primitive şekillerin XAML yapılarını inceleyeceğiz.

 

 

Bir WPF projesi oluşturmak istiyorum. Nelere ihtiyacım var ?


·         Sizi uzun saatler sürecek bir download bekliyor sanırım. WPF, Microsoft Visual Studio Codename “ORCAS” ile  kullanımınıza sunulan yeni bir project template aslında. Visual Studio 2005 kullanıyorsanız, bazı yüklemeler yaparak, ORCAS kurulumunu atlayabilir, Visual Studio 2005’iniz ile de çalışabilirsiniz.

ORCAS hala CTP aşamasında. Yani çalışırken bazı sorunlarla karşılaşabilirsiniz. Ama oldukça başarılı bir IDE sunmuş Microsoft bize. WPF projelerini ORCAS üzerinde geliştirmenizi şiddetle tavsiye ederim çünkü editörler anlamında oldukça yeni özellikleri var. ORCAS CTP kurulumu için şu linke uğrayabilirsiniz : http://www.microsoft.com/downloads/info.aspx?na=22&p=2&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=&u=%2fdownloads%2fdetails.aspx%3fFamilyID%3d281fcb3d-5e79-4126-b4c0-8db6332de26e%26DisplayLang%3denEğer, ben Visual Studio 2005’im ile geliştirmek isterim derseniz, “WPF and WCF Extensions for Visual Studio” eklentisini indirebilirsiniz. Şu adresten : http://www.microsoft.com/downloads/info.aspx?na=22&p=1&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=&u=%2fdownloads%2fdetails.aspx%3fFamilyID%3df54f5537-cc86-4bf5-ae44-f5a1e805680d%26DisplayLang%3den

 

·         .NET Framework 3.0 veya .NET Framewrok 3.5 (ORCAS kurulumu ile geliyor)

·         Hayal gücü

 

Makalemin bundan sonraki kısmı Microsoft Visual Studio Codename Orcas March CTP üzerinden devam edecek. Eğer Visual Studio 2005 üzerinde geliştirme yapıyorsanız, bazı ekranlarda ve menülerde farklılıklar olabilir… Uyarmadı demeyin J

İlk WPF Projemi Nasıl Oluşturacağım ?
Aslında gayet basit. “New Project” dedikten sonra Windows kategorisi altında bazı yeni proje şablonları göreceksiniz. Biz “WPF Application”
ile ilgileniyoruz.

wpf_1_001.jpg 

Designer Görünümü

wpf_1_002.jpg

Yeni oluşan projemde Window1.xaml ve Window1.xaml.cs isimli iki dosya default olarak getirildi. Kafanızda oturması açısından uzantısı XAML olan dosyayı ASPX, XAML.CS olan dosyayı ise ASPX.CS ile özdeşleştirmeye çalışın. İşte farklılığı anlayabilmenin en kolay yolu bu.

Editörden de görebileceğiniz ve az önce bahsettiğim gibi, designer 2 bölümden oluşuyor. Pek çok HTML editör programından da alışık olacağımız gibi “Form Designer” kısmında yaptığım değişiklikler, alt tarafta bulunan “XAML Editor” kısmında anında güncelleniyor. İşin daha güzel tarafı, ASP.NET ile uğraşırken Design ve Sorce view arasında yapmak zorunda kaldığımız geçişleri artık yeni IDE ile yapmaktan kurtuluyoruz.

 

XAML içeriği ile ilgili daha detaylı konuşacağız ama çok basit bir örnek yapmak istiyorum. Mesela formuma bir buton yerleştirdiğimde XAML ne hale geliyor ? Toolbox’tan bir buton alıp sürükleyerek form üzerine bırakıyorum.

wpf_1_003.jpg

XAML koduna ağaıdaki şu satır eklendi.

<Button Height=”23″
        HorizontalAlignment=”Left”
        Margin=”15,15,0,0″
        Name=”button1″
        VerticalAlignment=”Top”
        Width=”108″>Deneme Buton</Button>

Dikkat ettiyseniz, aynı HTML’deki gibi, butonun üzerinde yazan text’i, Button tag’ini kapatmadan önce yazdım. Terminasyon tag’inden önce.

ASPX sayfalarda çalışırmış gibi, Button sınıfının XAML içinde tanımlayabileceğiniz özelliklerine, Intelisense destekli XAML editöründen ulaşıp kurcalayabilirsiniz J

Gelelim primitive şekillere. XAML üzerindeki tanımları şu şekilde oluyor :

 

 

KARE / DİKDÖRTGEN

<Rectangle Height=”70″
           Width=”190″
           VerticalAlignment=”Top”
           Margin=”50,50,50,50″
           Stroke=”#336699″
           Fill=”#33EE33″
           x:Name=”dikdortgenTest”>

</Rectangle> Yükseklik, genişlik, dikey hizzalama, margin, çerçeve rengi (Stroke), doldurma rengi (Fill) özelliklerini verdiğimiz Rectangle tag’imiz aşağıdaki şekilde sonuç veriyor.

wpf_1_004.jpg

Buradaki  x:Name=”dikdortgenTest” bölümü ise bize, oluşturduğumuz bu çizimin adını koymamız için verildi. Yani bu şeklin adı “dikdortgenTest”

 

DAİRE / ELİPS

<Ellipse   Height=”70″
           Width=”190″
           VerticalAlignment=”Top”
           Margin=”50,125,50,50″
           Stroke=”#336699″
           Fill=”#FE3311″
           x:Name=”daireTest”>
</Ellipse>

wpf_1_005.jpg

 

POLİGON / N-KENARLILAR

<Polygon Points=”-100,0 100,0 0,60″
         Fill=”#336699″
         Margin=”100,0,0,5″
         HorizontalAlignment=”Center”
         VerticalAlignment=”Bottom”>

</Polygon>

wpf_1_006.jpg Poligonlardaki tek fark, yükseklik ve genişlik vermek yerine, poligonu oluşturan vertex’lerin koordinatlarını vermek. (Bir boşluk karakteriyle ayrılmış X,Y formatında. Her boşluk, yeni bir vertex koyduğunuz anlamına gelir.)Vertex nedir diyecek olan arkadaşlara küçük bir çizimle aşağıda anlatmaya çalıştım :

vertex.gif

 

 

Bir sonraki yazımda çizdiğimiz bu şekilleri hareketlendireceğiz. İşte WPF’in gücü ve kişisel düşünceme göre Flash’ın tahtını nasıl elinden alacağı bir sonraki yazımda daha güzel belirecek.Tüm sorularınız için rbdevelopment@gmail.com adresine elektronik postalarınızı bekliyorum !Yeniden görüşmek üzere…

HttpWebRequest | WAN IP from Windows Application

Herkese selamlar,

Birkaç gündür yazamadım, oldukça yoğun bir süreçteyiz. Elimden geldiğince telafi etmeye çalışacağım J

Bugünkü konumuz “Bir web sayfasının HTML çıktısına, Windows Application’dan erişmek”

Gelelim benim bunu nerede kullandığıma. Daha önceki yazımdan da hatırlayacağınız gibi, size ASP.NET üzerinden WAN Ip adresini okumanın bir yolunu göstermiştim. ServerVariables koleksiyonu içerisindeki “Remote_Addr” değişkenini okuyarak istemci kişinin WAN Ip adresini alabiliyorduk. Ancak aynı isteğimizi Windows Application üzerinde gerçekleştirmek istersek işin rengi biraz değişiyor.

WAN Ip adresini Windows uygulamalarında okumak öyle sanıldığı kadar kolay değil. 2 farklı metodu var (metodları daha sonra inceleyeceğiz, şu an sadece ismen geçiyoruz)

1.       WMI sorguları kullanarak Ethernet kartlarının özelliklerinden IP yakalama

2.       Windows NAT SDK kullanarak çıkış IP’lerini çözmek

WMI kullanarak yapmayı denedim ancak hem çok çilekeş hem de farklı konfigürasyondaki sistemlerde sorun çıkaracak, Unhandled Exception üretecek çok noktası var. Hepsini geçelim, WMI kullanıyorsunuz. Yavaş J

E tabi ben Türk olduğum için aklıma şöyle basit bir çözüm geldi. Geliştirdiğim yazılım zaten Online çalışıyor. Internet ortamı olmadan çalışması imkansız. Madem internet bağlantım var, bilgisayarımın IP adresini aşağıdaki şekilde yakalayabilirim.

 

İstemci Bilgisayarım IP Adresini  Windows Uygulamasından yakalayabilmek için gerekenler :

1.       Geliştirdiğiniz uygulama J

2.       Basit bir ASP.NET sayfası koyabileceğiniz herhangi bir Web Server. (Local IIS olmaz, size sürekli 127.0.0.1 adresini döndürür)

3.       Internet bağlantısı

Nasıl Olacak ?

1.       Uygulamanız, http://www.<domainAdi>.com/ipGoster.aspx adresini isteyecek. Bunu isterken .NET nesnelerinden HttpWebRequest sınıfını kullanacağız.

2.       ipGoster.aspx, önceki makalemde anlattığım Request.ServerVariables[“Remote_Addr”] değişkenini okuyarak bize istemcinin IP adresini gösterecek.

3.       ASPX sayfasının HTML çıktısı Windows uygulamamız tarafındaki HttpWebRequest sınıfı ile alınacak ve kullanımınıza sunulacak.

 

Örnek

Öncelikle Windows uygulamasını hazırlayarak başlıyoruz. IPGoster adında yeni bir proje oluşturuyorum.

wip001.jpg

 

Daha sonra aşağıdaki gibi bir GUI hazırlıyorum.

                Textbox               txtUrl
                Button                 btnGoster
                Label                   lblIP

wip002.jpg

 

Daha sonra, ipGoster.aspx sayfamı hazırlamaya geçiyorum. Tek satırlık bir şey yazacağız, o nedenle proje falan oluşturmadım. Notepad kullanmak yeterli.

<% Response.Write(Request.ServerVariables(Remote_Addr)) %>

ipGoster.aspx sayfamızı Web sunucumuz üzerine yerleştiriyoruz ve gerekli File Access izinleri vermeyi unutmuyoruz.Windows uygulamamıza geri dönelim. Sırada, web sunucumuz üzerine koyduğumuz ipGoster.aspx dosyamızın uygulamamız üzerinden çağrılması var. Öncelikle, bu işi yapabilmemiz için gerekli sınıfların Namespace’lerini uygulamama tanıtıyorum ki her seferinde uzun uzun yazmayayım ;

 

using System.Net;
using System.IO;
using System.Text; 

Aşağıdaki kodu btnGoster butonunun OnClick event handler’ına yazıyorum.

private void btnGoster_Click(object sender, EventArgs e)
{
     HttpWebRequest httpIstegim = (HttpWebRequest)WebRequest.Create(txtUrl.Text);
     httpIstegim.Method = “GET”;
     WebResponse httpIstegiminCevabi = httpIstegim.GetResponse();
     StreamReader sr = new StreamReader(httpIstegiminCevabi.GetResponseStream(), System.Text.Encoding.UTF8);
     string cevapMetni = sr.ReadToEnd();
     sr.Close();
     lblIP.Text = cevapMetni;
} 

Uygulamayı çalıştırıyorum ve texbox içine, ipGoster.aspx sayfamın olduğu sunucuyu yazıyorum. Butona basıp IP adresini okuyorum.

wip003.jpg

 

Umarım işinize yarar J
En kısa zamanda tekrar görüşmek üzere…

Dikey - Vertical Text | CSS & HTML

Selamlar,  Çoğu zaman dikey yazı yazmamız gereken durumlar olmasa da bazen gerekiyorlar işte J Özellikle ASP.NET projelerinin raporlama bölümlerinde, sütun başlığı olarak kullanacağınız text uzun olduğunda dikey yazımı tercih edebilirsiniz. Örneğin ;

vt0011.jpg

Bu görünümü elde etmek için aşağıdaki adımları gerçekleştireceğiz. Boş bir ASPX sayfa açacağız.Sonra bir CSS hazırlayacağız.Tablomuzu hazırlayıp gerekli CSS atamalarını yapacağız. 

1. Yeni bir ASPX sayfa açın. Adını istediğiniz herhangi bir şey verebilirsiniz.

2. Projeye yeni bir CSS ekleyin. Bunu yapmak için, CSS dosyasını ekleyeceğiniz yere (klasör olabilir, projenin root’u olabilir) sağ-klik yaparak Add New Item diyerek, karşımıza gelen pencereden Style Sheet item’ını seçerek bir isim vermeniz yeterli.

vt002.jpg

3. Visual Studio CSS dosyamızı projeye ekleyecek ve aşağıdaki boş haliyle ekrana getirecek.

vt003.jpg 

4. Dikey yazı özelliklerimizi barındıracak yeni bir grup oluşturuyoruz. .dikeyYazi
{
   font: bold 13px Arial;
  
color:Red;
}

5. Bu özellik grubumuz içerisine yazılan yazının dikey olması gerektiğini belirtecek CSS anahtarını değeri ile veriyoruz .dikeyYazi
{                  
  
font: bold 13px Arial;
   color:Red;
   writing-mode: tb-rl;
} 

Bu noktada Visual Studi