<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Shenturk.com &#187; indir</title>
	<atom:link href="http://www.shenturk.com/tag/indir/feed" rel="self" type="application/rss+xml" />
	<link>http://www.shenturk.com</link>
	<description>Hava Durumu, Hava Cıva!, ADSL Kota, Ey DSL!, Döviz, Mini Döviz, Radyo, RDK, Haber...</description>
	<lastBuildDate>Fri, 10 Feb 2012 07:30:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>WPF ve C# ile Yeniden Analog Saat Yapalım</title>
		<link>http://www.shenturk.com/genel/wpf-ve-c-ile-yeniden-analog-saat-yapalim</link>
		<comments>http://www.shenturk.com/genel/wpf-ve-c-ile-yeniden-analog-saat-yapalim#comments</comments>
		<pubDate>Tue, 17 Jan 2012 15:35:24 +0000</pubDate>
		<dc:creator>freedelphi</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[2008]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[analog]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[clock]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[ders]]></category>
		<category><![CDATA[ders notları]]></category>
		<category><![CDATA[digital]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[gdi+]]></category>
		<category><![CDATA[gdiplus]]></category>
		<category><![CDATA[indir]]></category>
		<category><![CDATA[layered]]></category>
		<category><![CDATA[layeredwindow]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[notlar]]></category>
		<category><![CDATA[örnek]]></category>
		<category><![CDATA[plus]]></category>
		<category><![CDATA[saat]]></category>
		<category><![CDATA[Studio]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[updatelayeredwindow]]></category>
		<category><![CDATA[Visual]]></category>
		<category><![CDATA[widget]]></category>
		<category><![CDATA[window]]></category>

		<guid isPermaLink="false">http://www.shenturk.com/?p=1507</guid>
		<description><![CDATA[Maalesef yine bir analog saat yapacağım. Umarım sıkılmazsınız. Bu kez analog saat yapımı için başka bir araç kullananacağım. Microsoft Visual Studio kullanan arkadaşların yabancılık çekmeyeceği bir araç bu: Windows Presentation Foundation yada kısa adıyla WPF. Geçenlerde aldığım bir e-mail üzerine bu yazıyı yazma ihtiyacı duydum. Tartışmanın konusu kısaca şöyle: Basit bir saat yapmak için neden [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption aligncenter" style="width: 495px"><img title="WPF ve C# ile Analog Saat" src="http://www.shenturk.com/images/img0183.png" alt="WPF ve C# ile Analog Saat" width="475" height="312" /><p class="wp-caption-text">WPF ve C# ile Analog Saat</p></div>
<p>Maalesef yine bir analog saat yapacağım. Umarım sıkılmazsınız. Bu kez analog saat yapımı için başka bir araç kullananacağım. Microsoft Visual Studio kullanan arkadaşların yabancılık çekmeyeceği bir araç bu: <a href="http://msdn.microsoft.com/en-us/library/ms754130.aspx" title="Windows Presentation Foundation" target="_blank">Windows Presentation Foundation</a> yada kısa adıyla <strong>WPF</strong>. Geçenlerde aldığım bir e-mail üzerine bu yazıyı yazma ihtiyacı duydum. Tartışmanın konusu kısaca şöyle: Basit bir saat yapmak için neden bu kadar kod yazmak zorundayız? WPF kullanarak yapamaz mıyız? Cevap basit: Elbette yapabiliriz! Hemde yok denecek kadar az kod yazarak! Önceki Analog Saat örneklerimde Windows' un klasik pencerelerini kullanarak Widget tarzı programların nasıl oluşturulduğunu göstemeye çalıştım. Geçmiş örneklerdeki en önemli kısım pencerenin <strong>katmanlı</strong> yapıya geçirilmesiydi. Bu işlem için <strong>UpdateLayeredWindow</strong> prosedürünü kullandığımızı hatırlayalım. Zorunlu olarak Windows API' den faydalandık. Üstelik ekrandaki her değişiklik için tüm kontrolleri yeniden çizmemiz gerekiyordu. Oldukça zahmetli değil mi? Herkes gibi ben de bu işlemleri otomatikleştirmek için araçlar aradım ve WPF ile tanıştım. Bildiğiniz üzere WPF çok gelişmiş çizim teknikleri içerir. Üstelik doğrudan GPU kullanabilme özelliği de vardır. Microsoft' un beğendiğim yazılım geliştirme ortamlarından biridir açıkçası. Üstelik katmanlı pencere desteği vardır ve tek tuşla aktif hale getirilebilir. Dakikalar içinde masaüstü araçları oluşturabilirsiniz. Yapalım o zaman...</p>
<p><strong>1. TASARIM</strong><br />
Bu projeyi <strong>Microsoft Visual Studio 2010</strong> ile <strong>.NET 4.0</strong> kullanarak geliştirdim. Tasarım aşamasında dikkat edilmesi gereken bazı noktalar var. C# ile yeni bir <strong>WPF Application</strong> seçtiğinizde varsayılan olarak çalışma pencereniz katmalı olarak <strong>ayarlanmaz</strong>. Runtime esnasında klasik bir Windows penceresi ekrana gelir. Oysa biz kenarlık ve başlık satırı istemiyoruz. Saat tasarımı için gerekli resimleri ekrana yerleştirdikten sonra ana pencerenin <strong>Properties</strong> bölümünden şu özelliklerin ayarlaması gerekir:</p>
<ul>
<li>İlk önce <strong>WindowStyle</strong> özelliği <strong>None</strong>,</li>
<li><strong>AllowsTransparency</strong> özelliği <strong>True</strong>,</li>
<li>Son olarak <strong>Background</strong> özelliği <strong>Transparent</strong> olacak. <strong>Null Brush</strong> seçerseniz de aynı sonucu elde edersiniz.</li>
</ul>
<p>Eğer Properties penceresinden ayarlamak istemezseniz bu özellikleri WPF mimarisinin temel yapısı olan <strong>XAML</strong> dosyasından da değiştirebilirsiniz. Bilindiği üzere <strong>XAML</strong> dosyası basit bir <strong>XML</strong> yapısından oluşur. Aslında Visual Studio ortamı sizin için XAML dosyası oluşturak gereken özellikleri Attributes kısmına yazar. Bazen elle düzenleme yapmak daha hızlı olabilir. Yukarıdaki işlemlerden sonra pencereniz katmanlı duruma geçer ve Widget tarzı çok şık bir görünüm elde edersiniz.</p>
<p><strong>2. KOD</strong><br />
Gelelim kod kısmına. Yazdığım kod o kadar kısa ki biz buna kod yazdık bile diyemeyiz. Neredeyse Twitter' da bile daha fazla yazı yazıyoruz... C# ile yazılan Kaynak kodun tamamı 69 satırdan ibaret. Üstelik geniş geniş yazdım ki okunabilir olsun. <strong>MainWindow.xaml.cs</strong> dosya adına sahip kaynak kodun tamamı aşağıdadır. Kod az olunca tamamını yayınlamakta bir sakınca görmedim...</p>
<pre class="brush: c-sharp;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace AnalogSaatWPF
{
    ///
<summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            DragMove();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            DispatcherTimer clockTimer = new DispatcherTimer();
            clockTimer.Tick += new EventHandler(clockTimer_Tick);
            clockTimer.Interval = new TimeSpan(0, 0, 1);
            clockTimer.Start();
        }

        private void clockTimer_Tick(object sender, EventArgs e)
        {

            // Acilari su anki saate gore hesapla.
            DateTime now = DateTime.Now;

            int hours = now.Hour;
            if (hours > 12) hours = hours - 12;
            int minutes = now.Minute;
            int seconds = now.Second;

            double hourAngle = (hours * 30) + (minutes / 2);
            double minuteAngle = (minutes * 6) + (seconds / 10);
            double secondAngle = seconds * 6;

            hourImage.RenderTransform = new RotateTransform(hourAngle);
            minuteImage.RenderTransform = new RotateTransform(minuteAngle);
            secondImage.RenderTransform = new RotateTransform(secondAngle);

        }

        private void exitMenuItem_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

    }
}
</pre>
<p>Kaynak koda göz atmanız bittiyse bazı püf noktaları verebiliriz artık. <strong>WPF</strong> ile yazılım geliştiren arkadaşlarımız <strong>Toolbox</strong> bölümünde <strong>Timer</strong> bileşeninin <strong>olmadığını</strong> bilirler. Saat programı yapıyorsak bizim kesinlikle bir zamanlayıcıya ihtiyacımız var. Maalesef bu işlemi kod yazarak halletmek zorundayız. Neyseki WPF bize bu desteği sağlıyor. Ana penceremizin <strong>Loaded</strong> olayına küçük bir kod yazdım. Yukarıdaki kod parçasında <strong>35-41</strong> arası satırlara tekrar göz atmanızı öneririm. Ekrandaki saat parçalarının belli bir eksen etrafında dönmesi sağlamak için <strong>Image</strong> sınıfının <a href="http://msdn.microsoft.com/en-us/library/ms750596.aspx" title="MSDN: Transforms Overview" target="_blank">RenderTransform</a> özelliğini değiştirmek yeterlidir. Örneğimizde <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.rotatetransform.aspx" title="MSDN: RotateTransform Class" target="_blank">RotateTransform</a> sınıfını kullandım doğal olarak.</p>
<p>WPF ve C# ile analog saat projesi hakkında söyleyeceklerim şimdilik bu kadar. Aşağıdaki bağlantılardan projenin kaynak kodu ve çalıştırılabilir demosunu indirebilirsiniz...</p>
<table>
<tbody>
<tr>
<td><img src="http://www.shenturk.com/images/vs2010-48x48.png" alt="" /></td>
<td>Microsoft Visual Studio 2010 Framework .NET 4.0<br />
<a href="http://www.shenturk.com/downloads/analogsaatwpf-vs2010-source.rar">Kaynak Kod İndir [72 KB]</a><br />
<a href="http://www.shenturk.com/downloads/analogsaatwpf-vs2010-demo.rar">Demo İndir [38 KB]</a>
</td>
</tr>
<tr>
<td><img src="http://www.shenturk.com/images/vs2008-48x48.png" alt="" /></td>
<td>Microsoft Visual Studio 2008 Framework .NET 3.5<br />
<a href="http://www.shenturk.com/downloads/analogsaatwpf-vs2008-source.rar">Kaynak Kod İndir [71 KB]</a><br />
<a href="http://www.shenturk.com/downloads/analogsaatwpf-vs2008-demo.rar">Demo İndir [38 KB]</a>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.shenturk.com/genel/wpf-ve-c-ile-yeniden-analog-saat-yapalim/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# ile Hava Durumu Programı</title>
		<link>http://www.shenturk.com/genel/c-ile-hava-durumu-programi</link>
		<comments>http://www.shenturk.com/genel/c-ile-hava-durumu-programi#comments</comments>
		<pubDate>Tue, 03 Jan 2012 10:50:36 +0000</pubDate>
		<dc:creator>freedelphi</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[2008]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[ders]]></category>
		<category><![CDATA[ders notları]]></category>
		<category><![CDATA[diziler]]></category>
		<category><![CDATA[durumu]]></category>
		<category><![CDATA[forecast]]></category>
		<category><![CDATA[hava]]></category>
		<category><![CDATA[indir]]></category>
		<category><![CDATA[kaynak]]></category>
		<category><![CDATA[kod]]></category>
		<category><![CDATA[notlar]]></category>
		<category><![CDATA[örnek]]></category>
		<category><![CDATA[sample]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[Studio]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Visual]]></category>
		<category><![CDATA[weather]]></category>

		<guid isPermaLink="false">http://www.shenturk.com/?p=1454</guid>
		<description><![CDATA[C# ile örnek programlarımıza devam ediyoruz. Bu kez bir Hava Durumu programı tasarladım. Aslında amacım hava durumu takip programı yapmaktan öte birkaç teknik göstermek. Öncelikle göstermek istediğim şey resimlerin C# ve GDI+ ile nasıl renklendirileceği. Ayrıca Kış Uykusu konusunda çok mail aldım. Bende C# ile kış uykusu denilen şeyin nasıl yapılacağını göstermeye çalıştım. Başlıyoruz... 1. [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption aligncenter" style="width: 460px"><img title="C# ile Hava Durumu Programı" src="http://www.shenturk.com/images/img0180.jpg" alt="C# ile Hava Durumu Programı" width="377" height="413" /><p class="wp-caption-text">C# ile Hava Durumu Programı</p></div>
<p>C# ile örnek programlarımıza devam ediyoruz. Bu kez bir <strong>Hava Durumu</strong> programı tasarladım. Aslında amacım hava durumu takip programı yapmaktan öte birkaç teknik göstermek. Öncelikle göstermek istediğim şey resimlerin C# ve GDI+ ile nasıl renklendirileceği. Ayrıca <strong>Kış Uykusu</strong> konusunda çok mail aldım. Bende C# ile kış uykusu denilen şeyin nasıl yapılacağını göstermeye çalıştım. Başlıyoruz...</p>
<p><strong>1. TASARIM</strong></p>
<div class="wp-caption aligncenter" style="width: 460px"><img title="C# ile Hava Durumu Programı Tasarım Aşaması" src="http://www.shenturk.com/images/img0181.jpg" alt="C# ile Hava Durumu Programı Tasarım Aşaması" width="378" height="459" /><p class="wp-caption-text">C# ile Hava Durumu Programı Tasarım Aşaması</p></div>
<p>Son derece çirkin bir ekran görüntüsü değil mi? Tasarım aşamasında seçtiğim renklere takılmayın. Sadece ana form üzerinde çok fazla kontrol vardı ve ayırt etmek güç olduğundan farklı farklı renklerle boyadım. Hepsi bu. Programın çalışma zamanındaki ekran görüntüsü çok şık olacak inanın. Tasarım aşamasında önceki yazılarımda belirttiğim gibi ana formun <strong>FormBorderStyle</strong> özelliğini <strong>None</strong> olarak ayarlıyoruz. Form üzerindeki resimler için Picturebox ve yazılar için Label bileşenlerini kullanacağız. Siz, konumlar üzerinde değişikilik yaparak farklı ekran tasarımları elde edebilirsiniz. Denemenizde fayda var. Bu arada tasarım kısmında form üzerindeki birçok kontrol disable durumdadır. Bunun sebebi çalışma sırasındaki sürükleme işleminde kolaylık sağlaması. Sürükleme işlemini ana formun MouseMove olayına bağlamak en kolay yoldu benim için. Gelelim kod kısmına...</p>
<p><strong>2. KOD</strong></p>
<p>Diğer örneklere nazaran biraz daha fazla kod yazdım. Özellikle <strong>Renklendirme</strong> ve <strong>Kış Uykusu</strong> için gerekliydi. Ama gözünüz korkmasın oldukça kolaydır. Hava durumu bilgilerini <strong>MSN Weather Service</strong>' ten alıyoruz. Kaynak kod içinde gerekli URL adresleri mevcut. <strong>GetWeatherData()</strong> isimli prosedür gerekli internet bağlantısını sağlıyor. Bildiğiniz gibi bu tip bağlantılar için <strong>WebClient</strong> sınıfınından bir nesne kullanmak en kolay yoldur. Diğer projelerden farklı olarak WebClient ile oluşturduğumuz bağlantıyı asenkron (Async) yapacağız ki bağlantı sırasında diğer ekran işlemleri kesintiye uğramasın. Bağlantıyı sağlayan GetWaetherData() prosedürü aşağıdaki şekildedir. Detaylar kaynak kod içinde mevcut.</p>
<pre class="brush: c-sharp;">private void GetWeatherData()
{
	locationLabel.Text = Properties.Resources.Connecting;

	RepaintLayeredForm();
	UpdateLayeredForm();

	string requestURL = String.Format(dataFormat, locationCode, degreeType, culture);
	WebClient webclient = new WebClient();
	webclient.Encoding = Encoding.UTF8;
	webclient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(OnDownloadStringCompleted);
	webclient.DownloadStringAsync(new Uri(requestURL));
}
</pre>
<p>Bu yazıda İnternet bağlantısı ve veri çekme işlemlerinden bahsetmeyeceğim. Bizi asıl ilgilendiren konulara giriş yapalım. Yukarıda belirttiğim gibi Renklendirme ve Kış Uykusu temel hedefimiz.</p>
<p><strong>RENKLENDİRME</strong><br />
GDI+ renklendirme işlemi için bir matris kullanır. Bu matris 5x5 şekilinde kare bir matristir. Sadece köşegenleri 1 olan ve diğer elemanları 0 olan bir matristir bu. C# içinde ColorMatrix adıyla tanımlanmıştır. Temel renklendirme matrisi C# için şu şekildedir:</p>
<pre class="brush: c-sharp;">ColorMatrix matrix = new ColorMatrix(new float[][]
{
	new float[]{ 1f, 0f, 0f, 0f, 0f },
	new float[]{ 0f, 1f, 0f, 0f, 0f },
	new float[]{ 0f, 0f, 1f, 0f, 0f },
	new float[]{ 0f, 0f, 0f, 1f, 0f },
	new float[]{ 0f, 0f, 0f, 0f, 1f }
});
</pre>
<p>Benim geliştirdiğim tüm projelerde bu matris kullanılmıştır. Fakat işin sırrı matriste değil kullandığım resimlerde gizlidir. Resimlerimin tamamı <strong>gri tonlarından</strong> oluşmuştur. Ancak bu tip bir resimde renklendirme istenilen sonucu verir. Hava durumu projesinde ekrandaki resimleri herhangi bir renge çevirmek istediğinizde matris içindeki ilk üç köşegeni değiştirmek yeterlidir. Kodu şu şekilde yazabiliriz:</p>
<pre class="brush: c-sharp;">matrix.Matrix00 = (float)color.R / (float)255;
matrix.Matrix11 = (float)color.G / (float)255;
matrix.Matrix22 = (float)color.B / (float)255;
</pre>
<p>Burada dikkat edilirse renk değerleri 255' e bölünmüştür. GDI+ renkler için normalize edilmiş değerler kullanır. Sebebi tamamen bu. Kaynak kod içinde DrawColorizedPicture adında bir prosedür mevcut. Burada PictureBox türünden bir nesne istenilen bir renkte çizilebiliyor.</p>
<pre class="brush: c-sharp;">private void DrawColorizedPicture(PictureBox picture, Color color)
{
	ColorMatrix matrix = new ColorMatrix(new float[][]
	{
		new float[]{ 1f, 0f, 0f, 0f, 0f },
		new float[]{ 0f, 1f, 0f, 0f, 0f },
		new float[]{ 0f, 0f, 1f, 0f, 0f },
		new float[]{ 0f, 0f, 0f, 1f, 0f },
		new float[]{ 0f, 0f, 0f, 0f, 1f }
	});
	matrix.Matrix00 = (float)color.R / (float)255;
	matrix.Matrix11 = (float)color.G / (float)255;
	matrix.Matrix22 = (float)color.B / (float)255;
	using (ImageAttributes attr = new ImageAttributes())
	{
		attr.SetColorMatrix(matrix);
		graphics.DrawImage(picture.Image, picture.Bounds, 0f, 0f, picture.Image.Width, picture.Image.Height, GraphicsUnit.Pixel, attr);
	}
}
</pre>
<p><strong>KIŞ UYKUSU</strong><br />
Bu ifade tamamen benim uydurduğum bir şeydir. Programlama dünyasında <strong>Prevent Dragging</strong> (Sürükleme önlemi yada engeli) olarak bilinir. Bir de saydamlık ekledim. Daha şık olur diye düşündüm. Bu işlemi yapmak için penceremize <strong>WS_EX_TRANSPARENT</strong> özelliği eklememiz gerekiyor. Bu özellik pencerenizin fare ile yapılacak tüm olaylara geçirgen davranmasını sağlar. En basit olarak fare ile pencerenin hiçbir yerine tıklatamazsınız. C# ile bir pencereyi kış uykusu moduna geçirmek ve kış uykusundan çıkmasını sağlamak için şu kodları kullanabiliriz:</p>
<pre class="brush: c-sharp;">private void DoHibernate()
{
	long style = Win32.GetWindowLong(this.Handle, Win32.GWL_EXSTYLE).ToInt32();
	if ((style &#038; Win32.WS_EX_TRANSPARENT) == 0)
	{
		style |= Win32.WS_EX_TRANSPARENT;
		Win32.SetWindowLong(this.Handle, Win32.GWL_EXSTYLE, (IntPtr)style);
		opacity = 0x80;
	}
}
</pre>
<p>Uyandırma işlemi için gereken kod:</p>
<pre class="brush: c-sharp;">private void DoWakeup()
{
	long style = Win32.GetWindowLong(this.Handle, Win32.GWL_EXSTYLE).ToInt32();
	if ((style &#038; Win32.WS_EX_TRANSPARENT) != 0)
	{
		style &#038;= ~Win32.WS_EX_TRANSPARENT;
		Win32.SetWindowLong(this.Handle, Win32.GWL_EXSTYLE, (IntPtr)style);
		opacity = 0xff;
	}
}
</pre>
<p>Kış uykusuna geçmiş bir pencereyi uyandırmak için yukarıdaki kodu nasıl kullanacağız? Bu işlem biraz daha kod gerektiriyor: Madem ki fare ile tıklatamıyorum o zaman klavyedeki tuşları takip ederim bende... Basit bir Timer bileşeni ile tuşları takip edebilirim aslında. Benim kullandığım teknik şu: Kış uykusuna geçtikten sonra ekranda farenin koordinatlarına bakıyorum ve klavyeden CTRL tuşuna basılıp basılmadığını kontrol ediyorum. Bu iki durum oluşmuşsa pencerenin uyanmasını istiyorum. Tabi bu işlemleri bir Timer' in OnTick olayı içinde yapmanız gerekiyor. Klavyeden CTRL tuşunu ve ekrandaki farenin pencere üzerinde olup olmadığını şu şekilde kontrol edebiliriz:</p>
<pre class="brush: c-sharp;">private void keyTimer_Tick(object sender, EventArgs e)
{
	Win32.Rect rect = new Win32.Rect();
	Win32.GetWindowRect(this.Handle, ref rect);
	Win32.Point p = new Win32.Point();
	Win32.GetCursorPos(ref p);
	if (Win32.PtInRect(ref rect, p))
	{
		short keyState = Win32.GetKeyState(Win32.VK_CONTROL);
		if ((keyState &#038; 0x8000) != 0)
		{
			hibernate = false;
			SetHibernateState(hibernate);
		}
	}
}
</pre>
<p>Evet. Kabaca anlatmaya çalıştım. Eğer kaynak kodu indirip incelerseniz çok daha kolay anlayacağınızı umuyorum. C# ile Hava Durumu programının kaynak kodunu aşağıdaki linkten indirebilirsiniz.</p>
<table>
<tbody>
<tr>
<td><a href="http://www.shenturk.com/downloads/havadurumu-csharp-source.rar"><img src="http://www.shenturk.com/images/img0166.png" alt="" /></a></td>
<td><a href="http://www.shenturk.com/downloads/havadurumu-csharp-source.rar">havadurumu-csharp-source.rar [1.85 MB]</a></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.shenturk.com/genel/c-ile-hava-durumu-programi/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# ile Dijital Saat (Digital Clock)</title>
		<link>http://www.shenturk.com/genel/c-ile-dijital-saat-digital-clock</link>
		<comments>http://www.shenturk.com/genel/c-ile-dijital-saat-digital-clock#comments</comments>
		<pubDate>Wed, 28 Dec 2011 12:50:33 +0000</pubDate>
		<dc:creator>freedelphi</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[2008]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[analog]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[clock]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[ders]]></category>
		<category><![CDATA[ders notları]]></category>
		<category><![CDATA[digital]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[gdi+]]></category>
		<category><![CDATA[gdiplus]]></category>
		<category><![CDATA[indir]]></category>
		<category><![CDATA[layered]]></category>
		<category><![CDATA[layeredwindow]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[notlar]]></category>
		<category><![CDATA[örnek]]></category>
		<category><![CDATA[plus]]></category>
		<category><![CDATA[saat]]></category>
		<category><![CDATA[Studio]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[updatelayeredwindow]]></category>
		<category><![CDATA[Visual]]></category>
		<category><![CDATA[widget]]></category>
		<category><![CDATA[window]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.shenturk.com/?p=1436</guid>
		<description><![CDATA[Analog Saat ve Döviz.NET projelerinden sonra bir Dijital Saat yapmak geldi içimden. Aslında bu işin ne kadar kolay olduğunu göstermekti amacım. Basit bir form tasarlıyorsunuz ve ona uygun resimler ile süslüyorsunuz. Gerisi zaten kaynak kod ile geldiğinden size sadece kodları projenize eklemek kalıyor. Hepsi bu. Dijital saat yapımında Yahoo! Widgets kütüphanesinde bulunan Digital Clock çalışmasını [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption aligncenter" style="width: 460px"><img title="C# ile Dijital Saat (Digital Clock)" src="http://www.shenturk.com/images/img0179.png" alt="C# ile Dijital Saat (Digital Clock)" width="441" height="268" /><p class="wp-caption-text">C# ile Dijital Saat (Digital Clock)</p></div>
<p><a href="http://www.shenturk.com/genel/c-ve-analog-clock" title="C# ve Analog Clock">Analog Saat</a> ve <a href="http://www.shenturk.com/genel/doviz-net-c-ile-online-doviz-programi" title="Döviz.NET: C# ile Online Döviz Programı">Döviz.NET</a> projelerinden sonra bir <strong>Dijital Saat</strong> yapmak geldi içimden. Aslında bu işin ne kadar kolay olduğunu göstermekti amacım. Basit bir form tasarlıyorsunuz ve ona uygun resimler ile süslüyorsunuz. Gerisi zaten kaynak kod ile geldiğinden size sadece kodları projenize eklemek kalıyor. Hepsi bu. Dijital saat yapımında <a href="http://widgets.yahoo.com" title="Yahoo! Widgets" target="_blank">Yahoo! Widgets</a> kütüphanesinde bulunan <strong>Digital Clock</strong> çalışmasını örnek aldım. Yani resimlerin tamamı bu projeden. Elbette birebir aynı değil. Bazı özellikeri devre dışı bırakmak zorunda kaldım. Malum amacımız temel bazı şeyleri öğretmek olduğundan oldukça sade bir proje yapmalıyız. Bu projeye <strong>Tema</strong> özelliği de ekledim. Eğer ana pencere üzerinde <strong>farenin sağ tuşuna</strong> basarsanız içerik menüsü görüntülenecektir. Ekrandaki <strong>Temalar</strong> menüsünden <strong>4 farklı</strong> temadan birini seçebilirsiniz. Çalışma esnasında seçtiğiniz tema hemen uygulanactır. Daha fazla söze gerek yok sanırım. İndirin ve tecrübelerinizi bizimle paylaşın. Kolay gelsin...</p>
<table>
<tbody>
<tr>
<td><a href="http://www.shenturk.com/downloads/digital-clock-csharp-source.rar"><img src="http://www.shenturk.com/images/img0166.png" alt="" /></a></td>
<td><a href="http://www.shenturk.com/downloads/digital-clock-csharp-source.rar">digital-clock-csharp-source.rar [641 KB]</a></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.shenturk.com/genel/c-ile-dijital-saat-digital-clock/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

