Windows Live Writer

22.04.2009 Çar

Tekrar merhaba,

Blog tutanlar bilir. Pek çok farklı blog engine var şu an ve neredeyse hepsi ücretsiz olarak blog tutmanıza olanak tanıyan alanlar verebiliyor. Kendilerine ait yönetim panellerini kullanarak yazılarınızın girişlerini yapabiliyor, okunma oranlarını takip edebiliyorsunuz.

Blog tutma kararı aldığımda nedense pek bir araştırma yapmadan WordPress’i tercih etmiştim. Belki yönetim paneliydi belki de işlerden çok yoğun olduğumdan kodlamasına zaman ayırmak istemediğim için varolan eklentilerinin fazlalığı nedeniyle böylebirseçim yapmıştım.

Tuttuğunuz blog her marka veya model olursa olsun :) aşağıdaki adresi ziyaret ederek Windows Live Writer uygulamasını indirmenizi ve kullanmanızı şiddetle tavsiye ederim. Bloglarını daha çok “geliştirme çalışmalarında kullanılan notepad” olarak gören blogcuların çok işine yarayacağını düşünüyorum. Bu yazıyı yazmak, formatlamak ve yayınlamak sadece 2 dakikamı aldı. WordPressentegrasyonu ise kusursuz !

http://download.live.com/writer

İşte bu yazının hazırlanması sırasındaki ekran görüntüsü :

image

Uzun bir süredir yazamıyordum. Yeterince “acıkan” okurlarımızı lezzetli içerikle doyurmanın vakti geldi de geçti bile. İşte o makalelerden biri.

Geçenlerde XP Service Pack 3 çalışan bilgisayarlarımdan birine Windows 7 Visual Transformation Pack yükledim. Aslında hiç sevmem bu tarz uygulamaları ama denemek istedim, nasıl oluyor görmeliydim :)

Uzun lafın kısası, pek iyi bir sonuç vermedi. Kitlenen, tıklanamayn pencereler, sürükle bırak yaparken BSOD’lar vs… Kurulum sırasında değiştirilen sistem dosyalarını nasıl geri yüklerim diye bir endişi sardı. Kurtulmalıydım ! :)

Neyse ki yüklediğim transformation pack’in bir restore özelliği varmış. Tüm sistem dosyaları yüklemeden önceki haline geri döndü. Ancaaak….. Taskbar üzerindeki uygulama buton boyları 50 piksel gibi bir boyuta düştü.  Aşağıdaki gibi :

Tasbar Item Width

 

 

 

 

Bu durumun üstesinden gelmek ve program butonlarınızın boyutunu ayarlamak için aşağıdaki yönergeleri takip edebilirsiniz :

1. Start’a basın, RUN komutunu çalıştırın.
2. Çalışıtırılacak komut alanına “REGEDIT” yazarak Enter tuşuna basın.
3. Açılacak olan pencere Registry penceresi. Sol taraftaki ağaç üzerinde aşağıdaki yolu bulun :
     My Computer >> HKEY_CURRENT_USER >> Control Panel >> Desktop >> WindowMetrics
4. Sol tarafta WindowMetrics seçiliyken, sağ taraftaki listeden MinWidth alanını bulun.
5. Üzerine 2 kez tıklayın ve değer kutusunun içine Piksel cinsinden (sadece sayı) istediğiniz
     genişliği yazın.
6. Bilgisayarınızı baştan başlatın. Birkaç denemeden sonra en uygun boyutu bulacağınıza eminim :)

 

Tekrar görüşmek dileğiyle,

Ozan GUNCELER

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()

12.07.2007 Per

Ç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…

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