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

Silverlight

Silverlight 4 Beta ile Yazdırma (Printing) İşlemi


Silverlight 4 Beta ile birlikte gelen yeniliklerden biri de silverlight uygulamarına gelen yazdırma (printing) desteği. Silverlight 4 Beta ile birlikte yazdırma işlemi yapmak için System.Windows.Printing namespace’i altında yer alan PrintDocument sınfını kullanacağız. Bu sınıf ile uygulamanın tamamını yada belli bir UI Elementin yazdırılmasını sağlayabiliyoruz. Şimdi bu sınıfa ait üyeleri detaylı olarak inceleyelim.

PrintPage Event’i, yazdırılacak olan UI elementin belirlendiği event.

StartPrint
Event’i, yazdırma işlemi başladığında çalışacak olan event.

EndPrintEvent’i, yazdırma işlemi sona erdiğinde yada herhangi bir hata meydana geldiğinde çalışacak olan event. (Kartuş bittiğinde yada yazıcıya ulaşılamadığında vb. gibi sebeplerden hata alabiliriz)

DocumentName özelliği, yazdırma kuyruğunda (print queue) gösterilen dokümanın adı.

Print Metodu, print dialog ekranını açarak yazdırma işleminin başlatılmasını sağlar.

Yazdırma işlemini yapacağımız sınıfı ve üyeleri inceledikten sonra örneğimize geçebiliriz. Visual Studio 2010 ile yeni bir silverlight projesi oluşturalım. Ekranımızda bir TextBlock ve bir Button ekleyelim. TextBlock içerisinde yer alan text’i yazıcıya göndererek yazdırılmasını sağlayalım.

[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 İle Yazdırma İşlemi</TextBlock>
    <Button Height="23" HorizontalAlignment="Left" Margin="413,165,0,0" x:Name="btnYazdir" Content="Yazdır" VerticalAlignment="Top" Width="75" />
</Grid>
</UserControl>

Şimdi Yazdırma işlemine başlayabiliriz. PrintDocument sınıfını kullanabilmemiz için ilk olarak System.Windows.Printing namespaceni ekleyelim ve PrintDocument sınıfının bir örneğini alalım. Yazdırma işlemi butona tıkladığında başlayacak.

[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
   
{
        // Yazdırma işlemi için PrintDocument sınıfının örneğini alalım.
       
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; // Yazdırılacak başka sayfa varmı?
           
e.PageVisual = txtMetin; // Herhangi bir UI element;
           
e.PrintableArea = new Size(txtMetin.Width, txtMetin.Height);// Yazıdırılacak alanın size’ı
       
}

        void
btnYazdir_Click(object sender, RoutedEventArgs e)
        {
            PrintDocument.DocumentName = "Silverligt 4 Beta ile Yazdırma İşlemi";// Yazdırma kuyruğunda gösterilecek olan metin
           
PrintDocument.Print();// Yazdırma işlemini için print dialog ekranını açar ve yazdırma işleminin başlatılmasını sağlar.
       
}

        void
PrintDocument_EndPrint(object sender, EndPrintEventArgs e)
        {
            // Yazdırma işleminde bir hata geldiğinde yada sona erdiğinde çalışacak olan event..
           
if (e.Error == null) // Hata yoksa
            {
                MessageBox.Show("Yazdırma işlemi sona erdi...");
            }
            else // Hata varsa
           
{
                MessageBox.Show("Bir hata meydana geldi...");
            }
        } 

        void
PrintDocument_StartPrint(object sender, StartPrintEventArgs e)
        {
            // Yazdırma işlemi başladığında çalışacak olan event..
           
MessageBox.Show("Yazdırma işlemi başlıyor...");
         }
    }
}

Yazdırma işlemini başlatmak için butona tıklayalım.

Yazıcımız var ama biz yine de Microsoft XPS Document Writer’ı seçelim :)

Yazdırma kuyruğuna bakacak olursak kuyruktaki dökümanın adını PrintDocument sınıfının DocumentName özelliği ile belirtmiştik. Şimdi XPS dökümanını açalım bakalım.

Bu kadar J

Bu makalenin de sonuna geldik başka bir makale de görüşmek üzere. Silverlight ile kalın ;)

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

Kaynaklar
Silverlight 4 Beta SDK

Bu makaleye henüz yorum yapılmamış. | 20.11.2009 23:30:11

Silverlight 4 Beta ile WebCam ve Mikrofon Erişimi


Silverlight’ın ilk üç versiyonunda müthiş yenilikler geldi ve kullanım oranı her versiyon ile birlikte katlanarak arttı. Hala eksik olan birşeyler vardı, bunların başında WebCam ve Mikrofon erişimi geliyordu. Silverlight 4 Beta ile birlikte müjdeli haber geldi ve artık silverlight ile WebCam ve Mikrofon erişimi mümkün! Hemde kullanımı son derece basit. Uygulamaya geçmeden önce Silverlight 4 Beta için gerekli olan araçları indirip kuralım.

- 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çları kurduktan sonra örneğimiz için Visual Studio 2010 ile yeni bir Silverlight projesi başlatalım. Formumuza Webcam’den gelen görüntüyü göstermek için Rectangle nesnesi, Ses ve kamera aygıtlarını listelemek için iki adet combobox nesnesi, camerayı başlatmak-durdurmak ve cameradaki görüntünün resmini almak için bir adet button ve image nesnesi ekleyelim. XAML kodumuz aşağıdaki 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="Fotoğraf Ç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 browserında yayınlanmasını sağlar. (Hatta yayın sırasında bir karenin yakalanmasını sağlıyor J).

CaptureSource nesnesinin Start metodunu kullanarak görüntünün capture edilmesini sağlıyoruz. Stop medodu ise capture işleminin durdurulmasını sağlıyor. State isimli enum ile CaptureSource nesnesinin capture durumunu kontrol edebiliriz. AudioCaptureDevice özelliği sistemde yer alan ilişkili bir ses aygıtını, VideoCaptureDevice özelliği de sistemde yer alan ilişkili bir görüntü aygıtını temsil eder.

CaptureDeviceConfiguration nesnesi, sistemde yer alan ses ve görüntü aygıtlarına erişmemizi sağlar. Ayrıca kullanıcının bu aygıtlara erişime izin verip vermediğini kontrol eden üyeleri vardır.

[C#]

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

    public
MainPage()
    {
        InitializeComponent();
        // Kontrolllerin eventlerini oluşturalım
        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)
    {
        // İlk yükleme de sistem de yer alan aygıtları ilgili kontrollere yüklüyoruz.
        AygitlariYukle();
    }

    private
void AygitlariYukle()
    {
        // CaptureSource Nesnesinin örneğini alalım.
        CaptureSource = new CaptureSource(); 
        
        // Ses aygıtlarını combobox'a yükleyelim. GetAvailableAudioCaptureDevices() Metodu sisteme yer alan ses aygıtlarını getiriyor.
        cmbAudioSources.ItemsSource = CaptureDeviceConfiguration.GetAvailableAudioCaptureDevices();
        cmbAudioSources.DisplayMemberPath = "FriendlyName"
        
        // Kamera aygıtlarını combobox'a yükleyelim. GetAvailableVideoCaptureDevices() Metodu sisteme yer alan kamera aygıtlarını getiriyor.
        cmbVideoSources.ItemsSource = CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices();
        cmbVideoSources.DisplayMemberPath = "FriendlyName";
    }

    void
btnStart_Click(object sender, RoutedEventArgs e)
    { 
        // CaptureSource nesnesi başlatılmadıysa... 
        if (CaptureSource.State != CaptureState.Started)
        {
            // Seçtiğimiz ses aygıtını CaptureSource nesnesinin AudioCaptureDevice özelliğine bağlayalım.
            CaptureSource.AudioCaptureDevice = (AudioCaptureDevice)cmbAudioSources.SelectedItem;
            // Seçtiğimiz kamera aygıtını CaptureSource nesnesinin VideoCaptureDevice özelliğine bağlayalım.
            CaptureSource.VideoCaptureDevice = (VideoCaptureDevice)cmbVideoSources.SelectedItem;

            // VideoBrush nesnesi oluşutralım 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; 

            // İstemci aygıtlara erişimi izni verdiyse capture işlemini başlatalım.
            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 işlemini durduralım.
            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 bağlayalım
            });
        }
    }        
}

Uygulamamızı çalıştırdığımızda aşağıdaki gibi bir uyarı çıkacaktır. (Kamera ve Ses aygıtınıza erişime izin vermemizi istiyor) Evet diyerek devem edelim.

Sistemimizde yer alan ses ve kamera aygıtını seçerek kameradan görüntü almaya başlayalım.

Oynat dediğimizde:)

Birde resim yakalayalım :)

Bu makalenin de sonuna geldik başka bir makale de görüşmek üzere. Silverlight ile kalın ;)

Örnek uygulama için tıklayınız

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

Kaynaklar
Silverlight 4 Beta SDK

Bu makaleye 6 yorum yapılmış. | 19.11.2009 17:21:26

Silverlight 4 Beta Duyuruldu !


PDC 2009 ile birlikte bir bomba haber bekliyordum ama bu bombanın Silverlight ile patlayacağını hiç tahmin bile etmiyordum :) Silverlight 4 Beta ile ilgili detayları incelemek için aşağıdaki adresi kullanabilirsiniz.

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

Bu makaleye henüz yorum yapılmamış. | 18.11.2009 23:10:33

Microsoft'tan Küçük İşletmelere WebsiteSpark


Microsoft WebsiteSpark programı Türkiye'de de duyuruldu! 10 kişiye kadar çalışanı olan ve ASP.NET, Silverlight, Sharepoint, PHP gibi teknolojilerle web uygulamaları geliştiren şirketlere 3 yıl süre ile ücretsiz yazılımlar sağlıyor.

•3 adet Visual Studio 2008 Professional Edition Lisansı
•1 adet Expression Studio 3 lisansı (Expression Blend, Sketchflow ve Web!)
•Ayrıca 2 adet Expression Web 3 lisansı.
•Windows Web Server 2008 R2 4 işlemci lisansı
•SQL Server 2008 Web Edition 4 işlemci lisansı
•DotNetPanel yönetim paneli

Daha da güzeli var! SQL ve Windows Server lisanslarını isterseniz yayın ortamında da kullanabiliyorsunuz. Yani lisansnlar sadece geliştirme ortamı için değil bir hosting sağlayıcıdan alacağınız dedicated sunucunuza bu lisansları kurup uygulamanızı canlı yayına da alabilirsiniz. Tüm bunların yanında Microsoft Partner'ları gibi;

•Firma başına iki teknik destek hakkı.
•Microsoft’un web şirketleri ekosistemindeki iş ortakları, müşterileri ve tamamlayıcı servisleri ve teknolojilerinden oluşan topluluğa erişim hakkı.    
•MSDN üzerindeki teknik bilgi ve danışmanlık sunan tartışma gruplarına sınırsız erişim.
hizmetlerinden de WebsiteSpark üyesi kuruluşlar faydalanabiliyor.

Başvuru için hemen http://www.microsoft.com/web/websitespark/ adresini ziyaret edebilirsiniz.

3 yıl sonra ne olacak?
Üç yılın sonunda eğer programdan ayrılmak isterseniz 100$'lık bir ödeme yapmanız gerekiyor. Fakat tahmin etmiyorum ki kimse ayrılsın çünkü bu üç senede yayında bile kullanabileceğiniz ücretsiz lisanslar ile çoktan firmanızı kuvvetli bir şekilde ayağa kaldırmış olmanız mümkün. Bu durumda da normal yöntemlerle yıllık 999$ vererek tüm bu lisansların development ortamında kullanılabilecek olanlarını alabilirsiniz ve yayın tarafı için de yine yıllık 199$ ile 1 adet Windows Web Server ve 1 adet SQL Server Web edition edinebilirsiniz. Kişisel kanaatimi sorarsanız bu rakamlar bile bir yazılım şirketinin masrafları arasında en ufak kalemleri oluşturacaktır.

Spark programları süper!
Microsoft bundan önce de öğrencilere ücretsiz lisans sağlayan DreamSpark ve yazılım üretimi yapan şirketlere ücretsiz lisans sağlayan BizSpark ile güzel bir seriyi başlatmıştı. Bu serinin WebsiteSpark ile devam etmesi gerçekten muhteşem. Artık bir yazılım şirketi kurmak veya bu ekonomik krizde şirketi tekrar ayağa kaldırmak, lisans dertleriyle uğraşmamak çok daha rahat.

Kaynak
http://daron.yondem.com/tr/PermaLink.aspx?guid=7132de37-7259-4459-9051-9edd1dcb12f3

Bu makaleye henüz yorum yapılmamış. | 29.09.2009 13:16:07

Silverlight 3.0 Yayınlandı


Uzun zamandır beklenen Silverlight 3.0 beta sürümüne son vererek yayınlandı. Şimdilik detaylar için,

http://www.silverlight.net/getstarted 

Adresini inceleyebilirsiniz. Yakın zaman da Silverlight 3.0 ile ilgili makalelerimi yayınlıyor olacağım.

Bu makaleye henüz yorum yapılmamış. | 13.07.2009 13:18:20

1 2 3
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.