14 Aralık 2009 Pazartesi

DataGridView Drag-Drop (Sürükle-Bırak)

Datagridview’de satırların yerlerini sürükle-bırak ile değiştirmek isterseniz, aşağıdaki 4 eventtaki (MouseMove, MouseDown, DragDrop, DragOver) değişiklikleri yapmanız yeterli olacaktır:

private Rectangle dragBoxFromMouseDown;
private int rowIndexFromMouseDown;
private int rowIndexOfItemUnderMouseToDrop;
private void datagridview1_MouseMove(object sender, MouseEventArgs e)
{
    if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
    {
        // If the mouse moves outside the rectangle, start the drag.
        if (dragBoxFromMouseDown != Rectangle.Empty &&
            !dragBoxFromMouseDown.Contains(e.X, e.Y))
        {
            // Proceed with the drag and drop, passing in the list item. 
            if (datagridview1.Rows.Count != 0)
            {
                DragDropEffects dropEffect = datagridview1.DoDragDrop(
                  datagridview1.Rows[rowIndexFromMouseDown], DragDropEffects.Move);
            }
        }
    }
}

6 Kasım 2009 Cuma

Telefonlar İçin SMIL

  • Multimedya Mesaj hizmetlerini geliştirmek için Ericsson, Nokia, Siemens, Motorola, Logica, CMS ve Comverse ortak bir girişim başlattılar.
  • MMS multimedya içeriklerini tanımlamak için ortak dil olarak SMIL kullanılmaya başlandı.
  • SMIL, MMS mesajlarındaki içeriğin zamanlaması ve yerleşiminin tanımlanması açısından iyi tanımlanmış bir standart dil olduğundan, kabul edilmiştir.

SMIL XML serisi için yararlandığım kaynaklar:

1. http://www.w3schools.com/smil/default.asp, SMIL Tutorial

2. http://pet.ece.iisc.ernet.in/course/E0262/ch22.ppt, XML

3. http://www.cs.cmu.edu/~christel/MM2002/MM_111402.ppt, Synchronized Multimedia Interface Language (SMIL) and W3C

4. http://www.turkcebilgi.com/mms/ansiklopedi, MMS - Multimedia Messaging Service

SMIL İçerik Kontrolü

<smil>
<head>
<!-- … switch element can be used here … -->
</head>
<body>
<!-- … switch element can be used here too … -->
</body>
</smil>

İçerik kontrolü, <switch> etiketi ile yapılır ve bu özellikleri test eder:

  • Sistem bitrate
  • Sistem caption
  • Sistem dili
  • Sistem overdub-or-caption
  • Sistem gereksinimleri
  • Sistem ekran boyutu
  • Sistem ekran derinliği

Örnek:

<switch>
<meta name="title" content="CNN Skim, CC via RealText" system-captions="on"/>
<meta name="title" content="CNN Skim, CC off by player request"/>
</switch>

SMIL XML - Medya Elemanları

SMIL medya elemanları, içeriği tanımlamak için kullanır.
SMIL belgesinde aşağıdaki medya elemanları kullanılabilir:

SMIL Geçişler

Geçişler SMIL 2.0 ile birlikte gelen yeni bir özelliktir. SMIL 1.0’da böyle bir bölüm yoktur.
IE 6, SMIL 2.0 tabanlı geçişleri desteklemektedir.
Geçişler transitionfilter elemanı ile uygulanmaktadır.

SMIL XML - Parallel Elemanı

par elemanının içindeki nesneler paralel olarak (aynı zamanda) oynatılır.
par elemanının en çok kullanılan özellikleri şunlardır:

SMIL XML - Sequence Elemanı

seq elemanı, sıralamayı belirtir. seq elemanının çocuk elemanları, birbirlerini takip edecek şekilde sırayla gösterilirler.
<seq> etiketi, resimler listesini, paragraflar listesini, videolar listesini veya herhangi başka bir elemanı göstermek için kullanılır.
seq elemanı, birçok özelliğe sahiptir. Bu özelliklerden en çok kullanılanları şunlardır:

SMIL Zamanlama

Zaman Çizelgesi ve Zamanlama

Birçok SMIL elemanının, sunumun zaman çizelgesini belirlemek için zamanlama özellikleri vardır.
Zamanlama özellikleri, elemanın başlangıç zamanını ve süresini belirler.

XHTML+SMIL

SMIL Gelişim Süreci
  • SMIL 1.0, sanal medya sunumları oluşturmak ve onları oynatmak için basit bir yol tanımlamaktadır.
  • HTML+TIME ile yaklaşık olarak bütün HTML elemanlarına SMIL 1.0 yetenekleri eklenmiştir.
  • SMIL 2.0 ile SMIL 1.0’a etkileşim yeteneği eklenmiştir.
  • XHTML+SMIL ile yaklaşık olarak bütün XHTML elemanlarına SMIL 2.0 yetenekleri eklenmiştir.
XHTML+SMIL, web’de büyük bir seviye atlatmıştır. Böylece, tarayıcıların ses ve video göstermesi, eski tarayıcıların resim ve metin göstermeleriyle aynı duruma gelmiştir.

HTML’de SMIL

SMIL’ı IE’de Çalıştırmak


Internet Explorer 5.5 veya daha sonrasında SMIL elemanları HTML dosyalarının içine eklenebilmektedir.

HTML sayfalarınızda SMIL elemanlarını kullanabilmek için, elemanları işleyen “time” namespace’i eklenmelidir. SMIL etiketlerini kullanabilmek için time sınıfı tanımlanmalıdır:

  • <html> etiketine zaman namespace’ini ekle.
  • zaman namespace’ini belirtmek için <?import> elemanına ekle.
  • zaman sınıfını tanımlamak için <style> elemanına ekle.

4 Kasım 2009 Çarşamba

SMIL Dosyaları

  • SMIL dosyaları, çoklu sunumlar olarak tanımlanır.
  • SMIL dosyaları, .smil uzantısı ile saklanır.
  • Bir SMIL dosyası,

    • Sunumun yerleşimini,
    • Sunumun zaman çizelgesini,
    • Çoklu elementlerin kaynaklarını

          içerir.

SMIL Nedir?

SMIL (Synchronized Multimedia Integration Language / Senkronize Multimedya Entegrasyon Dili) Nedir?

  • SMIL, görsel-işitsel sunumları tanımlayan, HTML benzeri bir dildir.
  • Öğrenmesi ve anlaması çok kolaydır.
  • SMIL, XML’de yazılır.
  • SMIL sunumları metin editörü kullanılarak yazılabilir.
  • SMIL W3C tarafından 1997’de geliştirilmeye başlanmış, 1998’de yayınlanmıştır.

Generic List'de Birden Fazla Aynı Değere Sahip Eleman Var mı? (How to find duplicate values from List<> ?)

Belki biraz yavaş bir çözüm olabilir ama alternatiflerden biri:

private static List<string> findDuplicateValues(List<string> values)

{
         List<string> duplicateValues = values.FindAll(delegate(string i)
        {
                return values.FindAll(delegate(string j)
               {
                    return j == i;
               }).Count() > 1;
       }).Distinct().ToList();

       return duplicateValues;
}

20 Ekim 2009 Salı

DataGridView - 4 (AutoGenerateColumns)

Tanımladığım sütunlar herkeste düzgün görünürken sadece bir arkadaşımızda program çalıştığında, sütunların yeri olduğundan farklı olarak geliyordu. Bunu da sütunlarda değişiklik yapınca hata almasıyla fark ettik. Meğer, datagrid'in datasource'ını değiştirmeden önce;

dgProTaskTable.AutoGenerateColumns = false;

belirtmezsem sütunları kendi kendine yeniden generate ediyormuş. Sütunların yerinin neden sadece bir bilgisayarde değiştiğini bilmiyorum ama tek satırla hatayı çözmüş oldum :)

DataGridView - 3 (CurrentCellDirtyStateChanged)

Karşılaştığım diğer bir sorun, DataGridView'de runtime'da yapılan değişikliklerin hemen algılanmaması.

DataGridView - 2 (Combobox SelectedIndexChanged)

Karşılaştığım diğer bir sorun, Combobox'ların SelectedIndexChanged event'ının olmaması veya ulaşamamak. İnternette şöyle bir öneri vardı ne kadar doğru bilemem ama ben uyguladım oldu:

14 Ekim 2009 Çarşamba

DataGridView -1 (DataPropertyName)

Son yaptığım projede, tablo içinde combobox kullanımı istedi müşteriler. Ben de her zaman listeleme işlemi için ListView kullandığımdan ve onda da o özellik olmadığından bir arayış içine girdim. Sonunda da DataGridView'i keşfettim (Ben keşfetmedim aslında Mehmet Arslan keşfettirdi :) ). Projemde bugün itibariyle bittiğinden ancak bugün yazabildim bu yazıyı.

13 Mayıs 2009 Çarşamba

TextBox'a Para Değeri Girme ve Bölgesel Dil Ayarları

Eğer NumericEditBox veya MaskedTextBox gibi para miktarı girilen textbox'lar kullanıyorsanız, bölgesel dil ayarlarıyla ilgili sorun yaşayabilirsiniz. Çünkü her dil ayarına göre farklı noktalama işaretleri kullanılıyor.

Bu durumda programın kullanıldığı her bilgisayarda bölgesel dil ayarlarının değiştirilmesi yerine, tek satırlık kod yazarak, o anlık bölgesel dil ayarının öyle algılanmasını sağlayabilirsiniz. İşte bunun için kullanacağınız kod:

Thread.CurrentThread.CurrentCulture = new CultureInfo("tr-TR");

Güncelleme(23.12.2009):
Bölgesel seçeneklerin özelleştirilebildiğini öğrendim. Yani ayarı Türkçe olarak versek de ondalık sayılarda kullanılan ayraçlar (nokta ve virgül gibi) özelleştirilebiliyormuş. Bu da yukarıda yaptığımız işlemi geçersiz kılıyor. Bunun için en iyi çözüm bu ayraçları da en başta belirtmek (tabi işinize yarar şekilde). Böylece kullanıcı kendi ayarlarında ne yapmış olursa olsun sizi ilgilendirmemiş oluyor.

Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = ",";
Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator = ".";

24 Nisan 2009 Cuma

DateTimePicker'da Sonraki Ay

Kullandığım DateTimePicker'ın ValueChanged event'ında bir şey yazdırmak istediğimde, bir sonraki ay anlamındaki (>) tuşa bastığımda sonsuz döngüye girerek, sürekli MessageBox çıktığını fark ettim.

16 Nisan 2009 Perşembe

WCF Projesi Oluşturma

WCF (Windows Communication Foundation), COM+, .Net Remoting, XML Web Servisleri, MSMQ gibi servisleri tek çatı altında birleştiren bir servis diyebiliriz.
Bazı kaynaklarda, WCF’ in ABC’ si olarak Addresses (Adresler), Bindings (Bağlayıcılar) ve Contracts (Sözleşmeler) kelimelerinden bahsedilmektedir. Bu üçleme, WCF’ in çekirdeğinde yer alan en önemli kavramlardır. Öyleki, dağıtık modele göre servis olarak dış ortama sunulan her bir CLR tipi için bir endPoint tanımlanmak zorundadır. Aslında endPoint bir servisin dış ortama sunulan arayüzü (Interface) olarak düşünülebilir. Yani istemcilerin, proxy üzerinden gönderecekleri ve alacakları mesajların servis tarafında karşılandığı nokta olarak düşünülebilir. Bir endPoint içerisindeki üç önemli parça da adresler, bağlayıcılar ve sözleşmelerdir.

17 Mart 2009 Salı

UCSD için Anahtar Prensipler

Kullanıcı Merkezli Sistem Tasarımı için (User-Centered System Design) 12 tane anahtar prensip tanımlanmıştır. Kullanıcı merkezli sistem tasarlanırken bu maddeler dikkate alınmalıdır: