Sem GÖKSU - Kişisel Web Sitesi Ana Sayfa | Hakkımda | Çalışmalarım | Kitap Önerileri | Fotoğraflarım | RSS RSS | İletişim
İçerik Kategorileri
Makale Kategorileri
Etiket Bulutu
Arama
Tema
Kaynaklar
Takip Ettiklerim

Mail Grubum


Forum, Facebook, MSN, Blogum üzerinden gelen sorular son zamanlar da beni oldukça yordu ve baktim ki yetisemiyorum bende Daron'un fikrini örnek alarak kendime bir mail grubu kurmaya karar verdim. Böylece sorulara ben cevap veremezsem elbette bilen biri cevap verecek.  Böylece ben sorulara cevap veremedigim için üzülmeyegim, sizinde sorulariniz cevapsiz kalmayacak :)

Mail grubuna http://semgoksu.groups.live.com adresinden kaydolabilirsiniz. Kayit isleminden sonra da sorularinizi yada paylasimlarinizi semgoksu@groups.live.com adresine göndermeniz yeterli olacak :)

Mail grup hepimize hayirli olsun...

Yazilim | Yazilim Günlügü | Bu yazıya henüz yorum yapılmamış. | 07.02.2010 01:12:52

Silverlight 4 Beta ile Yazdirma (Printing) Islemi


Silverlight 4 Beta ile birlikte gelen yeniliklerden biri de silverlight uygulamarina gelen yazdirma (printing) destegi. Silverlight 4 Beta ile birlikte yazdirma islemi yapmak için System.Windows.Printing namespace’i altinda yer alan PrintDocument sinfini kullanacagiz. Bu sinif ile uygulamanin tamamini yada belli bir UI Elementin yazdirilmasini saglayabiliyoruz. Simdi bu sinifa ait üyeleri detayli olarak inceleyelim.

PrintPage Event’i, yazdirilacak olan UI elementin belirlendigi event.

StartPrint
Event’i, yazdirma islemi basladiginda çalisacak olan event.

EndPrintEvent’i, yazdirma islemi sona erdiginde yada herhangi bir hata meydana geldiginde çalisacak olan event. (Kartus bittiginde yada yaziciya ulasilamadiginda vb. gibi sebeplerden hata alabiliriz)

DocumentName özelligi, yazdirma kuyrugunda (print queue) gösterilen dokümanin adi.

Print Metodu, print dialog ekranini açarak yazdirma isleminin baslatilmasini saglar.

Yazdirma islemini yapacagimiz sinifi ve üyeleri inceledikten sonra örnegimize geçebiliriz. Visual Studio 2010 ile yeni bir silverlight projesi olusturalim. Ekranimizda bir TextBlock ve bir Button ekleyelim. TextBlock içerisinde yer alan text’i yaziciya göndererek yazdirilmasini saglayalim.

[XAML]

<UserControl x:Class="PrintIslemi.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"Height="200" Width="500">
<Grid x:Name="LayoutRoot" Background="White">
    <
TextBlock Margin="15,16,15,62" TextWrapping="Wrap" FontWeight="Bold" FontSize="40" x:Name="txtMetin">Silverlight Ile Yazdirma Islemi</TextBlock>
    <Button Height="23" HorizontalAlignment="Left" Margin="413,165,0,0" x:Name="btnYazdir" Content="Yazdir" VerticalAlignment="Top" Width="75" />
</Grid>
</UserControl>

Simdi Yazdirma islemine baslayabiliriz. PrintDocument sinifini kullanabilmemiz için ilk olarak System.Windows.Printing namespaceni ekleyelim ve PrintDocument sinifinin bir örnegini alalim. Yazdirma islemi butona tikladiginda baslayacak.

[C#]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Printing; // Unutmuyoruz !

namespace PrintIslemi
{

    public
partial class MainPage : UserControl
   
{
        // Yazdirma islemi için PrintDocument sinifinin örnegini alalim.
       
private PrintDocument PrintDocument = new PrintDocument();

        public
MainPage()
        {
            InitializeComponent();
            PrintDocument.StartPrint += new EventHandler<StartPrintEventArgs>(PrintDocument_StartPrint);
            PrintDocument.EndPrint += new EventHandler<EndPrintEventArgs>(PrintDocument_EndPrint);
            PrintDocument.PrintPage += new EventHandler<PrintPageEventArgs>(PrintDocument_PrintPage);
            btnYazdir.Click += new RoutedEventHandler(btnYazdir_Click);
        } 
   
        void
PrintDocument_PrintPage(object sender, PrintPageEventArgs e)
        {
            e.HasMorePages = false; // Yazdirilacak baska sayfa varmi?
           
e.PageVisual = txtMetin; // Herhangi bir UI element;
           
e.PrintableArea = new Size(txtMetin.Width, txtMetin.Height);// Yazidirilacak alanin size’i
       
}

        void
btnYazdir_Click(object sender, RoutedEventArgs e)
        {
            PrintDocument.DocumentName = "Silverligt 4 Beta ile Yazdirma Islemi";// Yazdirma kuyrugunda gösterilecek olan metin
           
PrintDocument.Print();// Yazdirma islemini için print dialog ekranini açar ve yazdirma isleminin baslatilmasini saglar.
       
}

        void
PrintDocument_EndPrint(object sender, EndPrintEventArgs e)
        {
            // Yazdirma isleminde bir hata geldiginde yada sona erdiginde çalisacak olan event..
           
if (e.Error == null) // Hata yoksa
            {
                MessageBox.Show("Yazdirma islemi sona erdi...");
            }
            else // Hata varsa
           
{
                MessageBox.Show("Bir hata meydana geldi...");
            }
        } 

        void
PrintDocument_StartPrint(object sender, StartPrintEventArgs e)
        {
            // Yazdirma islemi basladiginda çalisacak olan event..
           
MessageBox.Show("Yazdirma islemi basliyor...");
         }
    }
}

Yazdirma islemini baslatmak için butona tiklayalim.

Yazicimiz var ama biz yine de Microsoft XPS Document Writer’i seçelim :)

Yazdirma kuyruguna bakacak olursak kuyruktaki dökümanin adini PrintDocument sinifinin DocumentName özelligi ile belirtmistik. Simdi XPS dökümanini açalim bakalim.

Bu kadar J

Bu makalenin de sonuna geldik baska bir makale de görüsmek üzere. Silverlight ile kalin ;)

Sem GÖKSU
www.semgoksu.com | www.yazilimgunlugu.com
sem.goksu@yazilimgunlugu.com

Kaynaklar
Silverlight 4 Beta SDK

Silverlight | Silverlight 4 | Silverlight | Bu yazıya henüz yorum yapılmamış. | 20.11.2009 23:30:11

Silverlight 4 Beta ile WebCam ve Mikrofon Erisimi


Silverlight’in ilk üç versiyonunda müthis yenilikler geldi ve kullanim orani her versiyon ile birlikte katlanarak artti. Hala eksik olan birseyler vardi, bunlarin basinda WebCam ve Mikrofon erisimi geliyordu. Silverlight 4 Beta ile birlikte müjdeli haber geldi ve artik silverlight ile WebCam ve Mikrofon erisimi mümkün! Hemde kullanimi son derece basit. Uygulamaya geçmeden önce Silverlight 4 Beta için gerekli olan araçlari indirip kuralim.

- Visual Studio 2010 Beta 2 yada Visual Web Developer Express 2010 Beta 2
- Silverlight 4 Beta Tools for Visual Studio 2010
- Windows Runtime yada Mac Runtime
- Microsoft Expression Blend for .NET 4 Preview

Araçlari kurduktan sonra örnegimiz için Visual Studio 2010 ile yeni bir Silverlight projesi baslatalim. Formumuza Webcam’den gelen görüntüyü göstermek için Rectangle nesnesi, Ses ve kamera aygitlarini listelemek için iki adet combobox nesnesi, camerayi baslatmak-durdurmak ve cameradaki görüntünün resmini almak için bir adet button ve image nesnesi ekleyelim. XAML kodumuz asagidaki gibi oldu.

[XAML]

<UserControl xmlns=" http://schemas.microsoft.com/winfx/2006/xaml/presentation"mlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" x:Class="WebCamMicrofon.MainPage" Height="340" Width="550">

<Grid x:Name="LayoutRoot" Background="White">
    <
Rectangle Fill="White" Width="400" Height="300"Stroke="Black" Margin="10,20,130,20" x:Name="player"/>
    <ComboBox HorizontalAlignment="Right" VerticalAlignment="Top" Width="120" Margin="0,20,8,0" x:Name="cmbAudioSources"/>
    <ComboBox HorizontalAlignment="Right" Margin="0,54,8,0" VerticalAlignment="Top" Width="120" x:Name="cmbVideoSources"/>
    <
Button Content="Fotograf Çek" Width="104" Margin="422,0,24,175" x:Name="btnTake" Height="22" erticalAlignment="Bottom" />
    <Button Content="Durdur" HorizontalAlignment="Right" VerticalAlignment="Top" Width="104" x:Name="btnStop" Margin="0,115,24,0"/>
    <
Button Content="Oynat" HorizontalAlignment="Right" VerticalAlignment="Top" Width="104" x:Name="btnStart" Margin="0,89,24,0"/>
    <
Image Height="90" HorizontalAlignment="Left" Margin="422,193,0,0" Stretch="Fill" x:Name="image" VerticalAlignment="Top" Width="120" />
</Grid>
</UserControl>

CaptureSource nesnesi, sistemdeki görüntü ve sesin istemcinin browserinda yayinlanmasini saglar. (Hatta yayin sirasinda bir karenin yakalanmasini sagliyor J).

CaptureSource nesnesinin Start metodunu kullanarak görüntünün capture edilmesini sagliyoruz. Stop medodu ise capture isleminin durdurulmasini sagliyor. State isimli enum ile CaptureSource nesnesinin capture durumunu kontrol edebiliriz. AudioCaptureDevice özelligi sistemde yer alan iliskili bir ses aygitini, VideoCaptureDevice özelligi de sistemde yer alan iliskili bir görüntü aygitini temsil eder.

CaptureDeviceConfiguration nesnesi, sistemde yer alan ses ve görüntü aygitlarina erismemizi saglar. Ayrica kullanicinin bu aygitlara erisime izin verip vermedigini kontrol eden üyeleri vardir.

[C#]

public partial class MainPage : UserControl
{
    public CaptureSource CaptureSource { get; set; }

    public
MainPage()
    {
        InitializeComponent();
        // Kontrolllerin eventlerini olusturalim
        this.Loaded += new RoutedEventHandler(MainPage_Loaded);
        this.btnStart.Click += new RoutedEventHandler(btnStart_Click);
        this.btnStop.Click += new RoutedEventHandler(btnStop_Click);
        this.btnTake.Click += new RoutedEventHandler(btnTake_Click);
    } 

    void
MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        // Ilk yükleme de sistem de yer alan aygitlari ilgili kontrollere yüklüyoruz.
        AygitlariYukle();
    }

    private
void AygitlariYukle()
    {
        // CaptureSource Nesnesinin örnegini alalim.
        CaptureSource = new CaptureSource(); 
        
        // Ses aygitlarini combobox'a yükleyelim. GetAvailableAudioCaptureDevices() Metodu sisteme yer alan ses aygitlarini getiriyor.
        cmbAudioSources.ItemsSource = CaptureDeviceConfiguration.GetAvailableAudioCaptureDevices();
        cmbAudioSources.DisplayMemberPath = "FriendlyName"
        
        // Kamera aygitlarini combobox'a yükleyelim. GetAvailableVideoCaptureDevices() Metodu sisteme yer alan kamera aygitlarini getiriyor.
        cmbVideoSources.ItemsSource = CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices();
        cmbVideoSources.DisplayMemberPath = "FriendlyName";
    }

    void
btnStart_Click(object sender, RoutedEventArgs e)
    { 
        // CaptureSource nesnesi baslatilmadiysa... 
        if (CaptureSource.State != CaptureState.Started)
        {
            // Seçtigimiz ses aygitini CaptureSource nesnesinin AudioCaptureDevice özelligine baglayalim.
            CaptureSource.AudioCaptureDevice = (AudioCaptureDevice)cmbAudioSources.SelectedItem;
            // Seçtigimiz kamera aygitini CaptureSource nesnesinin VideoCaptureDevice özelligine baglayalim.
            CaptureSource.VideoCaptureDevice = (VideoCaptureDevice)cmbVideoSources.SelectedItem;

            // VideoBrush nesnesi olusutralim ve SetSource metoduna CaptureSource'u parametre olarak geçelim.
            VideoBrush vb = new VideoBrush();
            vb.SetSource(CaptureSource);
            // Player isimli kontrol de kameradan gelen görüntüyü gösterelim...
            player.Fill = vb; 

            // Istemci aygitlara erisimi izni verdiyse capture islemini baslatalim.
            if (CaptureDeviceConfiguration.AllowedDeviceAccess || CaptureDeviceConfiguration.RequestDeviceAccess())
            { 
                CaptureSource.Start();
            }
        }
    } 
    
    void
btnStop_Click(object sender, RoutedEventArgs e)
    {
        // Kamera görüntüsünü capture ediliyorsa.
        if (CaptureSource.State != CaptureState.Stopped)
        {
            // Capture islemini durduralim.
            CaptureSource.Stop();
        }
    }

    void
btnTake_Click(object sender, RoutedEventArgs e)
    { 
    // Kamera görüntüsü capture ediliyorsa.
        if (CaptureSource.State== CaptureState.Started)
        {
            CaptureSource.AsyncCaptureImage((rsm) =>
            {
                image.Source = rsm; // Yakalanan kamera görüntüsünü Image nesnesine baglayalim
            });
        }
    }        
}

Uygulamamizi çalistirdigimizda asagidaki gibi bir uyari çikacaktir. (Kamera ve Ses aygitiniza erisime izin vermemizi istiyor) Evet diyerek devem edelim.

Sistemimizde yer alan ses ve kamera aygitini seçerek kameradan görüntü almaya baslayalim.

Oynat dedigimizde:)

Birde resim yakalayalim :)

Bu makalenin de sonuna geldik baska bir makale de görüsmek üzere. Silverlight ile kalin ;)

Örnek uygulama için tiklayiniz

Sem GÖKSU
www.semgoksu.com | www.yazilimgunlugu.com
sem.goksu@yazilimgunlugu.com

Kaynaklar
Silverlight 4 Beta SDK

Silverlight | Silverlight 4 | Silverlight | Bu yazıya 4 yorum yapılmış. | 19.11.2009 17:21:26

Silverlight 4 Beta Duyuruldu !


PDC 2009 ile birlikte bir bomba haber bekliyordum ama bu bombanin Silverlight ile patlayacagini hiç tahmin bile etmiyordum :) Silverlight 4 Beta ile ilgili detaylari incelemek için asagidaki adresi kullanabilirsiniz.

http://www.silverlight.net/getstarted/silverlight-4-beta/

Yazilim | Silverlight | Silverlight 4 | Bu yazıya henüz yorum yapılmamış. | 18.11.2009 23:10:33

INETA'dan Yeni bir etkinlik: INETA NEXT


 

Kayit yaptirmak için www.inetatr.org adresini kullanabilirsiniz.

Yazilim | Seminer | Bu yazıya henüz yorum yapılmamış. | 16.11.2009 10:40:09

Ana Sayfa | Hakkımda | Çalışmalarım | Kitap Önerileri | Fotoğraflarım | RSS | İletişim
Sem Göksu 2004-2009 © Tüm Hakları Saklıdır.