• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 8/2/2020 11:38:31 PM'Basit' Yazılım Dili
  • 6/25/2020 3:18:13 PMderleme hatası
  • 12/11/2017 4:49:15 PMWindows Hizmeti Hk.
  • 4/23/2016 12:55:33 AMC programlama 2 oyun

Popüler Sorular

  • 5/27/2012 5:49:50 AMAsp.Net ile Date time alana veri ekleyemiiyorum ?
  • 4/2/2012 12:45:18 AM.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 5/12/2012 8:44:49 AMAcil Yardım
  • 5/27/2012 1:46:51 PMveri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LibreOffice
  • LINQ
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

MultiPoint Programlama'ya Giriş

MultiPoint Programlama'ya Giriş

10.03.2010

Yazar: Daron Yöndem (Google+)

Kategori: WPF

6915

Makalemize ilk olarak MultiPoint programlamanın ne olduğunu tanımlayarak başlayalım. Bugün bilgisayarlarımızda alıştığımız sistem sadece tek bir Pointer / İmleç kontrol etmeye dayanır. Örneğin bilgisayarınıza iki fare bile bağlasanız aslında her ikisi de aynı imleci kontrol eder. Oysa geleceğe baktığımızda artık birden çok Pointer'ın bulunduğu sistemlere doğru ilerliyoruz hatta birden çok imlecin tabi ki farklı kullanıcılar tarafından kullanıldığını da görebiliyoruz. Özellikle i-Phone ile popülerleşen Surface Programming mantığına kısmen yakın olsa da MultiPoint programlamada her bir Point'in kesinlikle ayrı kimliklere ait olduğu varsayılır. Bu varsayımla en azından hangi noktaların hangi kimliğe ait olduğunu bulma gibi bir dertlerle uğraşmaya gerek kalmıyor.

Özetle bu yazımızda amaçladığımız şey bilgisayarımıza bağlı farelerin farklı imleçler şeklinde ekrana yansımasını sağladıktan sonra oluşturacağımız bir düğme kontrolüne de hangi kullanıcının tıkladığını algılayabilecek kodu yazmak.

MultiPoint SDK

Windows ortamında .NET ile MultiPoint uygulamaları geliştirmek istiyorsanız donanımla doğrudan uğraşmamak adına işinizi kolaylaştırabilmek için Microsoft tarafından bir SDK paketi yayınlanmış durumda. MultiPoint SDK olarak geçen paketi bilgisayarınıza yüklediğimizde projelerimizde kullanacağımız kütüphaneleri de edinmiş oluyoruz.

http://www.microsoft.com/downloads/details.aspx?FamilyID=a137998b-e8d6-4fff-b805-2798d2c6e41d&displaylang=en

Yeni bir MultiPoint projesi yaratalım.

Visual Studio içerisinde yeni bir WPF projesi yaratalım ve MultiPoint kütüphanelerini referans olarak ekleyelim. MultiPoint DLL'lerini doğrudan MultiPoint'in yüklendiği klasörün içinde Bin klasöründe bulabilirsiniz. DLL'lerin yanı sıra yarattığımız projeye sağ tuş tıklayarak "Add Existing Item" diyip yine Bin klasöründeki Microsoft.MultiPoint.MultiPointSDK.dll.config dosyasını de eklemeliyiz. Artık her şey hazır, sıra geldi kodlamaya.

İlk olarak uygulamamız için MultiPointSDK'dan bir Instance almamız gerekiyor. Söz konusu değişkenin uygulama genelinde kullanılabilmesi için Application.xaml'ın arkasında tanımlanmasında fayda var.

[VB]

Class Application

 

    Public Shared MultiPointObject As Microsoft.MultiPoint.MultiPointSDK.MultiPointSDK = Microsoft.MultiPoint.MultiPointSDK.MultiPointSDK.GetInstance

 

End Class

[C#]

using Microsoft.MultiPoint.MultiPointSDK;

 

class Application

{

    public static MultiPointSDK MultiPointObject = MultiPointSDK.GetInstance;

}

Application.xaml'ın arkasında yukarıdaki kodumuzu yazdıktan sonra WPF uygulamamızın ana penceresine geçerek MultiPointObject değişkenimizi kullanabiliriz.

[VB]

Application.MultiPointObject.RegisterMouseDevice()

Application.MultiPointObject.CurrentWindow = Me

Application.MultiPointObject.DrawMouseDevices()

MultiPointSDK.SystemCursorPosition = New Point(Me.Left + 10, Me.Top + 10)

MultiPointSDK.HideSystemCursor()

[C#]

Application.MultiPointObject.RegisterMouseDevice();

Application.MultiPointObject.CurrentWindow = this;

Application.MultiPointObject.DrawMouseDevices();

MultiPointSDK.SystemCursorPosition = new Point(this.Left + 10, this.Top + 10);

MultiPointSDK.HideSystemCursor();

Bir sonraki adımda WPF uygulamamızın ana ekranında Page.Load event'ı içerisinde yukarıdaki kodları yazıyoruz. Böylece o an sisteme bağlı fareleri algılayarak ekrana getirebiliyoruz. Bu işlemi yaparken normal imleci de görünmez hale getiriyoruz. Aslında MultiPoint API'ları bizim yerimize donanım olarak var olan her bir fare için ayrı ayrı imleçler yaratıyor. Sistemde o an var olan tüm farelerin bir listesini Application.MultiPointObject.MouseDeviceList dizisinde bulabilir ve her bir MultiPointMouseDevice için ayrı ayrı DeviceVisual tanımlayarak imleçleri değiştirebilirsiniz.

Kendi kontrollerimizi yaratmamız gerek....

Aslında sıfırdan kontrol yaratmaktan bahsetmiyoruz fakat maalesef ki hali hazırdaki WPF kontrollerinin hiçbiri MultiPoint desteklemiyor. Yani hiçbiri farklı imleçler ve onların kimliklerinden haberdar olamıyor. Bu nedenle bizim kendi kontrollerimizi hazırlamamız gerekecek. Bu kontrolleri yaratırken IMultiPointMouseEvents ve IMultiPointGenericDeviceEvents interfacelerini implemente edersek aslında çoğu işlemi yine MultiPoint kütüphanelerine paslamış oluyoruz. Gelin bir Button yaratarak nasıl ilerleyebileceğimizi görelim.

[VB]

Public Class MultiPointColorButton

    Inherits System.Windows.Controls.Button

    Implements IMultiPointMouseEvents

    Implements IMultiPointGenericDeviceEvents

 

End Class

[C#]

public class MultiPointColorButton : System.Windows.Controls.Button, IMultiPointMouseEvents, IMultiPointGenericDeviceEvents

{

}

Yukarıdaki kodları yeni yarattığınız bir VB veya C# dosyasına yapıştırabilirsiniz. Aslında işlemler çok basit; sistemde tanımlı herhangi bir kontrol olarak Button kontrolünü alıp MultiPoint kütüphanelerinden gerekli arayüzleri dahil ediyoruz. Böylece otomatik olarak birçok yeni event tanımlanmış oluyor. İkinci adımda işin biraz karışık kısmına doğru geçiş yapacağız. MultiPoint kütüphanesi ile gelen eventları her bir fare cihazı için ayrı ayrı oluşturuluyor bizim bunları doğru bir şekilde ayrı bir genel geçer eventlar tanımlayarak onlara bağlamamız gerek.

[VB]

    Public Custom Event CustomClick As RoutedEventHandler

        AddHandler(ByVal value As RoutedEventHandler)

            MultiPointMouseEvents.AddMultiPointMouseDownHandler(Me, value)

        End AddHandler

        RemoveHandler(ByVal value As RoutedEventHandler)

            MultiPointMouseEvents.RemoveMultiPointMouseDownHandler(Me, value)

        End RemoveHandler

        RaiseEvent(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)

        End RaiseEvent

    End Event

[C#]

    public event RoutedEventHandler CustomClick {

        add { MultiPointMouseEvents.AddMultiPointMouseDownHandler(this, value); }

        remove { MultiPointMouseEvents.RemoveMultiPointMouseDownHandler(this, value); }

    }

Yukarıdaki kodlarda kendi tanımladığımız eventların ataçlanması ve detaçlanması noktasında yapılacak işlemleri de biz belirliyoruz ve elimizde MultiPoint kütüphanesinden gelen metodları kullanıyoruz. Kodumuzda da görebileceğiniz gibi MultiPoint ile kullanılabilecek her durum için ayrı ayrı event bağlama metodları MultiPointMouseEvents sınıfı altında bulunuyor. Biz şimdilik Button kontrolümüze sadece MultiPoint için Click event'ını tanımlamış olduk. Kullanacağınız tüm event'ları bu şekilde tanımlamak zorundasınız.

Peki nasıl kullanacağız?

İsterseniz kod tarafında otomatik olarak bu kontrollerden yaratıp uygulamanıza ekleyebilirsiniz. Eğer XAML tarafında yarattığımız bu Button kontrolünü kullanmak isterseniz XAML'da uygulamanızın XML NameSpace'larını yaratmanız gerek. Bir anlamda XAML tarafına kodumuzu "import" etmek olarak tanımlayabiliriz bu işlemi.

[XAML]

<Window x:Class="Window1"

  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  xmlns:Daron="clr-namespace:MPP"

  Title="MultiPointPaint" Height="480" Width="640" >

Yukarıda gördüğünüz kod yarattığımız uygulamanın ana penceresinin XAML kodunun başlangıcı. Burada ben Daron adında bir XML namespace yaratarak onu da arka planda adı MPP olan uygulamamın ana sınıfına bağladım. Zaten tüm bu kodlar otomatik olarak Intellisense içerisinde geliyor.

[XAML]

    <Daron:MultiPointColorButton Background="#FF000000" Content="Exit" x:Name="btnExit" VerticalAlignment="Center" HorizontalAlignment="Center" Width="50"/>

Bir önceki adımda kodunu yazdığımız ve adını da MultiPointColorButton verdiğimiz düğmemizi XAML tarafında yukarıdaki şekilde kullanabiliyoruz. Eğer XML NameSpace tanımını doğru yaptıysanız XAML kodları içerisinde de NameSpace'in adını yazdıktan sonra içerisindeki bütün kontrollerin listesi Intellisense'de görebilirsiniz.

Düğmemizi de yarattığımıza göre son olarak code-behind tarafına geçip daha önce tanımladığımız CustomClick adındaki özel event'ı kullanarak düğmeye tıklayan imleçleri ve kullanıcıları algılayabiliriz.

[VB]

Private Sub Color_CustomClick(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)

        Dim MyDeviceInfo As DeviceInfo = CType(e, MultiPointMouseEventArgs).DeviceInfo

        Dim MyMultiPointMouseDevice As MultiPointMouseDevice = CType(MyDeviceInfo.DeviceVisual, MultiPointMouseDevice)

        MessageBox.Show(MyMultiPointMouseDevice.DeviceId)

End Sub

[C#]

private void Color_CustomClick(object sender, System.Windows.RoutedEventArgs e)

{

    DeviceInfo MyDeviceInfo = ((MultiPointMouseEventArgs)e).DeviceInfo;

    MultiPointMouseDevice MyMultiPointMouseDevice = (MultiPointMouseDevice)MyDeviceInfo.DeviceVisual;

    MessageBox.Show(MyMultiPointMouseDevice.DeviceId);

}

Kod içerisinde de görebildiğiniz üzere aslında event-listener'lara gelen RoutedEventArgs'ın kendisi bir MultiPointMouseEventArgs. Biz bu parametre üzerinden DeviceInfo'nın DeviceVisual'ını MultiPointMouseDevice olarak alabiliyoruz. Sonuç olarak bu değişken üzerinden de DeviceID geliyor. Tahmin edebileceğiniz gibi sisteme bağlı her cihazın kendine özel bir DeviceID'si var ve biz de bu ID'ler üzerinden imleçlerin kimliklerini ayırt edebiliyoruz. Artık gerisi sizin hayal gücünüze kalmış ;)

Hepinize kolay gelsin.

Yazar Hakkında

Daron Yöndem

Daron Yöndem

daron.yondem.com

DEVELOAD Yazılım şirketi kurucusu Daron Yöndem ASP.NET alanında aldığı MVP ünvanını son üç yıldır Silverlight alanında devam ettirmektedir. Microsoft Regional Director ünvanına da sahip olan Daron Yöndem’e 2009, 2010 ve 2011 yıllarında Microsoft tarafından “Gold Global Impact Award” ödülü verilmiştir. Microsoft TechEd, PDC, DevReach, Microsoft DevDays gibi uluslararası konferanslarda konuşmacı olan Daron Yöndem INETA (International .NET Association) Orta-Doğu Afrika Bölge Başkanlığı görevini sürdürürerek 262.000’i aşkın üyesi olan 58 sosyal topluluğa destek vermektedir. Üç Türkçe, üç İngilizce kitabı olan Daron Yöndem’in Wrox Publishing gibi uluslararası yayınevlerinden kitapları bulunmaktadır.

Sosyal Medya

ORANLAR

  • 6915izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Merhaba, ellerinize sağlık çok yardımcı ol...
  • Merhaba Bu uygulama örneğinden ASP.net ...
  • Hocam Link başka sayfaya yönlendiriyor.

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 123776
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 70839
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 51496
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ