Favorilerine Ekle | Giriş Sayfan Yap | Tavsiye Et

 

Kurs Tanıtım Sayfası | Süper Üye Kimdir? | Menü Tasarımı Konulu Örnek Ders
Kod İndir| Hazır Kodlar | Makaleler| İpuçları | VB .NET Kursu | Dersler | Forum | Alt Bölümler | Servisler
    Merhaba Misafir
    anasayfa » visual basic makaleleri » PictureBox nesnesinin İçeriğini Yazdırmak
Üye Girişi
Kullanıcı Adı:  
Şifre : 
Kaydet ?
Siteden tam olarak faydalanabilmek için üye olmalısınız.
Unuttuğunuz şifrenizi öğrenebilmek için kayıt sırasında verdiğiniz Hatırlatma Cevabı'nı bilmeniz gereklidir.
Şifre hatırlatma işlevini sadece 3 defa kullanma hakkınız vardır.
Kullanıcı adını ve şifresini unutan üyelere email ile yardım verilmez.

Aktivasyon Gelmedi mi?Aktivasyon mesajınız email adresinize gelmedi mi?
Buraya tıklayarak bir kez daha aktivasyon mesajı gönderilmesini sağlayabilirsiniz.
Lütfen email hesabınızın BULK ve SPAM klasörlerini de kontrol ediniz.
Rastgele Makale

access ta veritabanı mantığı

Yazar: yasaliyavuz
access ta veritabanı oluşturmayı basit bir mantıkla anlattım.


Webmasterlar
Sitenize Ekleyin!
Sitenizde "Son Eklenen 10 Visual Basic Yazısı"'nı göstermek ve içeriğini zenginleştirmek için buraya tıklayınız.

Vbasicmaster.com'a link verin!
Aşağıdaki minik banneri sitenize eklemek için tıklayın!

Üye Sayısı:
Ziyaretçiler nerede?
Yayın № : 5405
Yayın Tar:18.12.2005
Yazar : demonfire
Hit :4373

Bu Yazarın Yazıları Sadece bu yazarın  göster
Bu Yazıyı Tavsiye Et

Visual Basic .NET projeleri dahilinde yazdırma işlemleri PrintDocument kontrolü sayesinde yapılmaktadır. Bu nedenle Toolbox'ta PrintDocument kontrolünün seçilip forma yerleştirilmesi gerekir.



PrintDocument kontrolü çalışma anında görüntülenen bir kontrol veya nesne olmadığı için formun alt kısmına Component Tray adı verilen panele yerleştirilmektedir. PrintDocument nesnesini bu şekilde Toolbox'tan yararlanıp forma yerleştirmek yerine kod yazarak oluşturabilirsiniz. Konunun devamında bu işlemin nasıl yapıldığı anlatılacaktır.



Bu şekilde forma yerleştirilen PrintDocument nesnesini devreye sokmak veya kullanmak için Print() metodundan yararlanılmaktadır. Bu amaçla forma "Yazdır" başlığına sahip bir düğme yerleştirdim ve bu düğmenin Click yordamında Print() metoduna yer verdim.



Bu şekilde düzenlenen proje çalıştırılıp formdaki düğme tıklanıp bu yordam işletilirse PrintDocument nesnesi devreye girer ama henüz yazdırılacak herhangi bir bilgi söz konusu değildir. Print() metodu bu şekilde kullanıldığında kısa bir süre için ekrana aşağıda verilen Printing diyalog kutusu gelir ve yazıcıdan bir sayfa boş olarak çıkar.



Print() metodu ile PrintDocument nesnesi devreye sokulduğundan PrintDocument nesnesi ile ilgili olarak PrintPage olayı meydana gelir. Bu nedenle Print() metodu kullanıldığı zaman PrintPage() yordamına yazılmış satırlar işletilir. Bu yordamın yapısını aşağıda görebilirsiniz.

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object,
ByVal e As System.Drawing.Printing.PrintPageEventArgs)
Handles PrintDocument1.PrintPage
End Sub

PrintPage() yordamı 2 parametreye sahiptir. "e" adındaki 2. parametre ile yazdırma işlemi sırasında kullanılacak nesne yordama gönderilmektedir. Yazdırma işlemi DrawString() metodu ile yapılmaktadır. Bu metod ile yazdırmanın nasıl yapıldığını anlatmak için formun üzerine bir metin kutusu yerleştirdim ve PrintPage() yordamına aşağıda verdiğim 2 satırı yazdım.

Dim Yazi_tipi As Font = New Font("Tahoma", 12, FontStyle.Bold)
e.Graphics.DrawString()TextBox1.Text, Yazi_tipi, Brushes.Black, 50, 100)

İlk satırda Font sınıfından yararlanıp yazdırma işlemi sırasında kullanılacak font ve puntoyu belirledim. Font sınıfını daha önce formların üzerinde bilgi yazarken de kullanmıştık. Yazıcıya yazdırma ile formun üzerine DrawString() metodu ile bilgi yazma arasıdaki tek fark, Graphics nesnesinin başına PrintPage() yordamının "e" adlı 2. parametresinin yazılmasıdır.

Çalışma anında formdaki metin kutusuna bilgi girip "Yazdır" adını vermiş olduğum düğme tıklanıp PrintDocument.Print() satırı işletilirse PrintPage olayı meydana gelir ve yukarıda verilen 2 satır işletilip metin kutusunun içeriği yazdırılır. Konunun iyice anlaşılmasını sağlamak için formun üzerine 3 metin kutusu daha yerleştirdim.



Çalışma anında bu metin kutularına bilgi girilip "Yazdır" başlıklı düğmede tıklama yapıldığı zaman metin kutularının içeriklerinin yazıcıya gönderilip aynı satıra yazılmasını sağlamak için PrintPage() yordamını aşağıdaki gibi düzenledim.

Dim Yazi_tipi As Font = New Font("Tahoma", 12, FontStyle.Regular)
e.Graphics.DrawString()TextBox1.Text, Yazi_tipi, Brushes.Black, 50, 100)
e.Graphics.DrawString()TextBox2.Text, Yazi_tipi, Brushes.Black, 150, 100)
e.Graphics.DrawString()TextBox3.Text, Yazi_tipi, Brushes.Black, 250, 100)
e.Graphics.DrawString()TextBox4.Text, Yazi_tipi, Brushes.Black, 550, 100)

Bu yordamda önce Font sınıfından yararlanıp yazma işlemi sırasında kullanacağım font ve puntoyu belirledim. Burada yapıldığı gibi kullanılacak font ve puntoyu belirleyip bir değişkene aktarmak yerine DrawString() metoduna doğrudan verebilirsiniz. Aşağıda verdiğim satırda kullanmak istediğim font ve puntoyu DrawString() metoduna 2. parametre olarak doğrudan verdim.

e.Graphics.DrawString()TextBox1.Text, New Font("Tahoma", 12, FontStyle.Regular),
Brushes.Black, 50, 100)

DrawString() metodunu arka arkaya birkaç kez kullanıyorsanız kullanmak istediğiniz font ve punto için değişken tanımlamanız önerilir. DrawString() metodunun 4. ve 5. parametreleri ile söz konusu bilgilerin(burada TextBox1'in içeriği) kağıt üzerinde nereye yazılacağı belirlenmektedir. Formdaki metin kutularına yazdığım bilgilerin kağıt üzerinde aynı satıra yazılmasını istediğim için DrawString()'in 5. parametrelerinde aynı değeri kullandım.

Yukarıda anlatılan yazdırma tekniğinde yazdırmak istenenler 1 sayfadan fazla değilse oldukça pratiktir. Ancak yazdırılmak istenen bilgiler bir sayfadan fazla ise sorunlar çıkıyor. Çünkü yazdırılmak istenen bilgi ne kadar uzun olursa olsun yazıcıdan bir sayfa çıkarılıyor.

Yazdırmak istediğiniz bilgi birden fazla sayfayı dolduracak kadar fazla ise HasMorePages özelliğine True değerini aktarmanız gerekir. Ancak bu özellik True değerini içiyorken 2. sayfa yazdırılırken tekrar PrintPage olayı meydana gelmekte ve bu yordamdaki satırlar tekrar işletilmektedir. Bu nedenle 2. veya 3. sayfalar yazdırılırken bazı hazırlıkların yapılması gerekiyor.
Bu anlatılanlara göre Visual Basic .NET, yazdırma işlemi bakımından şimdiye kadar yaygın olarak kullanılan programlama dillerinden oldukça farklıdır. Şimdilik pratik değeri olan örnek vermekten çok konunun kolay anlaşılmasını hedeflemekteyim. Bu amaçla formun üst kısmımda "Satir" ve "Sayfa" adında 2 Integer değişken tanımladım.



Bu değişkenlerin PrintPage() yordamında tanımlanması sorunlara neden olmaktadır. Çünkü yazdırılacak metin kaç sayfa ise PrintPage yordamı o sayıda işletilmektedir. "Sayfa" değişkenine ilk değer aktarma işlemini Print() metodunun kullanıldığı yordamda yaptım.



Normalde bir veritabanından okunan bilgiler satırlar halinde yazıcıya gönderilir. Formdaki 4 metin kutusuna yazmış olduğum bilgileri döngü halinde tekrar tekrar yazdırarak geçerli yazıcıdaki kağıdın dolup 2. sayfaya gerek duyulmasını sağlayacağım. Her sayfaya 25 kez olmak üzere aynı satırı 2 sayfaya 50 kez yazdıracağım.



Pratik değeri olmayan bu yordamda yapılan yazdırma işlemi anlaşılırsa Visual Basic .NET'te yazdırma sorunu çözülür. Bu yordam DrawString() metodu 4 kez kullanılarak formdaki 4 metin kutusunun içeriği kağıtta aynı satıra yazılmaktadır. İlk DrawString() metodunun 4. parametresinde kullandığım 50 piksel değerini göz kararı ile seçtim.

Aynı düşünce ile DrawString() metodunun kullanıldığı diğer 3 satırda 4. parametre olarak 150, 250 ve 550 değerlerini metin kutularına yazmayı düşündüğüm bilginin miktarını gözeterek belirledim. Aslında DrawString() metodunun 4. parametresi geçerli punto ve bilgi miktarına göre kod yazılarak belirlenebilir. 5. parametre olarak kullandığım 40 piksel değeri satır yüksekliğidir. Satır yüksekliği yine geçerli puntoya göre belirlenebilir. Ancak bir A4 kağıdın 25 satırda dolmasını istediğim için satır yüksekliğini 40 piksel olarak seçtim.

4 metin kutusunun içeriğini DrawString() metodu ile aynı satıra yazdırdıktan sonra Satır_no değişkenin içeriğini 1 arttırdım ve If deyimi ile sayfaya yazılan satırların sayısının 25 olup olmadığını veya sayfanın dolup dolmadığını kontrol ettim.

If Satir_no > 25 Then
Sayfa = Sayfa + 1
e.HasMorePages = True
Exit Do
End If

Eğer o ana kadar yazılan satırların sayısı 25 ise veya "Satır_no" değişkeni 25 olduysa "Sayfa" değişkenin içeriğini 1 arttırdım ve HasMorePages özelliğine True değerini aktardım. Bu özelliğe True değeri aktarılıp önlem alınmaz ise Visual Basic .NET aynı metni tekrar tekrar yazıcıya gönderir.

Bu nedenle istenildiği kadar sayfa yazıcıya gönderildikten sonra HasMorePages özelliği False yapılmalıdır. Bu özellik False yapıldıktan sonra Exit Do deyimi ile döngünün diğer satırları işletilmeyip programının işletimin Loop deyiminden sonraki satıra geçmesini sağladım.

If Sayfa = 2 Then
e.HasMorePages = False
End If

Loop deyiminden sonra sayfa sayısı kontrol edilmektedir. Sayfa sayısı 2 olduysa HasMorePages özelliği False yapılmaktadır. Bu özellik False yapıldıktan sonra yazdırma işlemi tamamlanır. Yazdırılacak sayfaların sayısını programın yazımı sırasında belirlemek yerine kullanıcıya sorabilir veya yazdırılacak bilginin miktarını kod yazarak öğrenebilirsiniz.

Nasıl ki Print() metodu ile yazdırma işlemi başlatıldığında PrintDocument nesnesi ile ilgili PrintPage olayı meydana geliyorsa, yazdırma işlemi tamamlandığında ise EndPrint olayı meydana gelmektedir. Yazdırma işleminin tamamlandığı konusunda kullanıcıya mesaj vermek istiyorsanız EndPrint yordamından yararlanabilirsiniz.




PictureBox nesnesinin İçeriğini Yazdırmak

Yukarıdaki sayfalarda metin kutularının içeriklerinin nasıl yazdırıldığı konusunda bilgi verildi. Şimdi ise forma yerleştirilen PictureBox nesnelerine yerleştirilen resimlerin nasıl yazdırıldığını anlatacağım. Bu amaçla üzerinde çalıştığım projenin formunu aşağıdaki gibi düzenledim.



PictureBox nesnesindeki resim yazdırılmak istendiği zaman "Yazdır" düğmesi tıklanacak. "Yazdır" düğmesi tıklandığı zaman işletilecek yordamda Print() metoduna yer verdiğim için PrintDocument nesnesinin PrintPage() yordamı işletilir. Formdaki PictureBox nesnesinin içeriğinin yazdırılmasını sağlamak için PrintPage() yordamını aşağıdaki gibi düzenledim.



PictureBox nesnelerinin içeriklerini yazdırırken DrawImage() metodu kullanılmaktadır. Bu metod 1. parametre olarak yazdırılmak istenen PictureBox nesnesinin Image özelliğini almaktadır. 2. ve 3. parametrelerde yazdırmanın yapılacağı koordinat işaret edilmektedir. 4. ve 5. parametrede ise resmin kağıt üzerindeki boyutları belirtilmektedir.

PictureBox nesnesine aktarılan resmi büyütüp veya küçültüp öyle yazdırmak istiyorsanız bu yordamı aşağıdaki gibi düzenleyebilirsiniz. Aşağıda verdiğim yordam sayesinde PictureBox'a aktarılan resim yüzde yüz büyütülüp öyle yazdırılır.



PictureBox nesnesinin içeriğini yazdırırken kağıdın üzerine ayrıca sabit bir bilgiyi yazdırmak istiyorsanız aşağıda yapıldığı gibi ayrıca DrawString() metodunu kullanmalısınız.




RichTextBox nesnesinin İçeriğini Yazdırmak

Şimdi ise forma bir RichTextBox nesnesi yerleştirip bu nesneye aktarmış olduğum bilgiyi yazdıracağım. RichTextBox nesnesine bilgi aktarma işlemini doğrudan yapabileceğiniz gibi tasarım veya çalışma anında bir dosyanın içeriğini aktarabilirsiniz.



Projenin formunu bu şekilde düzenledikten sonra forma yerleştirmiş olduğum düğmenin Click yordamında Print() metoduna yer verdim. Düğmenin Click yordamını hazırladıktan sonra PrintDocument nesnesine ait PrintPage yordamını aşağıdaki gibi düzenledim. Bu yordamda önce yazdırma işlemi sırasında kullanılacak fontu belirledim. Yazdırma işlemini yapacak bu yordamda yazma işleminin başlayacağı sol üst köşenin koordinatını doğrudan yazdım.

Dim Yazi_tipi As Font = New Font("Tahoma", 12, FontStyle.Regular)
e.Graphics.DrawString()RichTextBox1.Text, Yazi_tipi, Brushes.Black, 100, 100)

Ancak isterseniz PrintDocument nesnesinin MarginBounds özelliğinden yararlanıp geçerli yazıcı için seçilmiş olan kenar boşluklarının gözetilmesini sağlayabilirsiniz. MarginBounds özelliğinin nasıl kullanıldığını size göstermek için yukarıda verdiğim 2 satırı aşağıdaki gibi değiştirdim.

Dim Yazi_tipi As Font = New Font("Tahoma", 12, FontStyle.Regular)
e.Graphics.DrawString()RichTextBox1.Text, Yazi_tipi, Brushes.Black,
e.MarginBounds.Left, e.MarginBounds.Top)

RichTextBox nesnesine aktarılan bilgi 1 sayfadan fazla ise yukarıda verilen kod ile ancak metnin ilk sayfası yazdırılır. Çünkü başlangıçta PrintDocument nesnesinin HasMorePages özelliği False'dir. Bu özelliğe True değeri aktarılıp gerekli tedbirler alınmazsa Visual Basic .NET aynı sayfayı sürekli yazmaya çalışır.

Yukarıda yaptığım gibi başlangıçta RichTextBox nesnesine 2 sayfa kadar bilgi aktarıp her 2 sayfayı yazdırmaya çalışacağım. Konunun devamında RichTextBox nesnesine aktarılan bilginin uzunluğunu öğrenip kaç sayfa tuttuğunu hesaplayıp ona göre yazdırmanın nasıl yapıldığını anlatacağım. Bu amaçla ilk olarak formun üst kısmında "Satir_no" adında bir değişken tanımladım ve bu değişkenin başlangıç içeriğinin 0 olmasını sağladım.



Formun üst kısmında bu değişkeni tanımladıktan PrintPage() yordamında aşağıda verdiğim değişkenleri tanımladım. RichTextBox nesnesinin satir sayısını bulup "Satir_sayisi" değişkenine aktaracağım.

Dim Yazi_tipi As Font = New Font("Tahoma", 11, FontStyle.Regular)
Dim Satir_sayisi As Integer
Dim Satir_metni As String
Dim Sayfadaki_satir As Integer
Dim Sayac As Integer = 1

RichTextBox nesnesinin satır sayısı Lines koleksiyonun Lentgh özelliğinde saklanmaktadır. Bir sayfaya sığacak satır sayısı geçerli font, punto ve kenar boşluklarına göre değişmektedir. Kağıdın yüksekliği font nesnesinin GetHeight özelliğine bölünürse sayfaya sığacak satır sayısı bulunur. Bu işlemleri yapan 2 satırı aşağıda verdim.

Satir_sayisi = RichTextBox1.Lines.LengthSayfadaki_satir = e.MarginBounds.Height / Yazi_tipi.GetHeight

Bu şekilde RichTextBox nesnesindeki satır sayısını bulduktan sonra aşağıda verdiğim döngüyü hazırladım. Bu döngünün her turunda ilk olarak RichTextBox nesnesinin 1 satırı okunup "Satir_metni" değişkenine aktarılmaktadır.

Do While Satir_sayisi > Satir_no
Satir_metni = RichTextBox1.Lines.GetValue(Satir_no)
Sayac = Sayac + 1
e.Graphics.DrawString()Satir_metni, Yazi_tipi, Brushes.Black, 50, 20 * Sayac)
Satir_no = Satir_no + 1
If Sayac >= Sayfadaki_satir Then
Exit Do
End If
Loop

Yukarıda RichTextBox'ın içeriğini yazdırırken Text özelliğinden yararlandım. Birden fazla sayfa söz konusu olduğu zaman RichTextBox'ın içeriğini yazdırırken Text özelliği yerine Lines özelliğini kullanmalısınız. Dizi değişken gibi işlev gören Lines özelliğinin her satırı ayrı bir elemana aktarılmaktadır.



Satır okunup "Satir_metni" değişkenine aktarıldıktan sonra "Sayac" değişkenin içeriği 1 arttırılmaktadır. "Sayac" değişkeni ile sayfanın dolup dolmadığı kontrol edilmektedir. RichTextBox nesnesinin bir satırı GetValue() metodu ile okunup DrawString() metodu ile yazdırıldıktan sonra "Satir_no" değişkenin içeriği 1 arttırılmaktadır.

Döngü içindeki If-End If deyimi ile "Sayac" değişkeni ile sayfanın dolup dolmadığı araştırılmaktadır. Sayfa dolduğunda Exit Do deyimi ile döngüden çıkılmaktadır. Döngünün hemen altına yazılan aşağıda verilen satırların işlevini biliyorsunuz.

If Satir_no >= Satir_sayisi Then
e.HasMorePages = False
Else
Sayac = 1
e.HasMorePages = True
End If

If deyimi ile RichTextBox nesnesinin bütün satırlarının okunup okunmadığı araştırılmaktadır. Bütün satırlar okunduysa HasMorePages özelliğine False, satırların okunup DrawString() metodu ile yazdırılması işlemi henüz bitmediyse Sayac değişkenin içeriği 1'e eşitlenmektedir. Aşağıda PrintPage() yordamına yazdıklarımı toplu olarak verdim.




Yazdır Diyalog Kutusu

Forma yerleştirilen düğme tıklandığı zaman RichTextBox nesnesinin içeriğini veya yazdırılmak istenenleri hemen yazıcıya göndermek yerine ekrana Windows'un standart "Yazdır" diyalog kutusunun getirilmesini istiyorsanız PrintDialog kontrolünden yararlanmalısınız.



Bu kontrolün nasıl kullanıldığı size anlatırken yukarıda birden fazla sayfaya sahip RichTextBox nesnesinin içeriğini yazdırmak için hazırladığım projeden yararlanacağım. Toolbox'ta PrintDialog kontrolünü temsil eden düğme seçilip formun üzeri tıklanırsa Component Tray'a PrintDialog nesnesi yerleştirilir.



Forma PrintDialog nesnesi yerleştirildikten sonra PrintDocument ile PrintDialog nesnesi arasında ilişki kurulur veya PrintDialog nesnesinin hangi PrintDocument nesnesine hizmet edeceği belirlenir. Bu ilişki PrintDialog nesnesinin Document özelliği sayesinde kurulur.



Properties penceresinde Document özelliğine ait liste kutusunu açtığınızda mevcut PrintDocument nesneleri listelenir. PrintDialog nesnesi için PrintDocument nesnesi seçme işlemini tasarım anında Properties penceresinde yapmak yerine kod yazarak yapabilir. Bu kodu Form_Load() yordamına veya Print() metodunun kullanıldığı yordama yazabilirsiniz.



PrintDialog ile PrintDocument arasında bu şekilde ilişki kurulduktan sonra PrintDialog nesnesine ait diyalog kutusu ShowDialog() metodu ile ekrana getirilmelidir. Bu nedenle bu koda 3. bir satır yazdım.



Bildiğiniz gibi kullanıcı söz konusu belge veya metni yazdırmak istemiyorsa "Yazdır" diyalog kutusundaki İptal düğmesini tıklar. Yazdırma işleminin Yazdır(Print) diyalog kutusundaki OK düğmesi tıklandığı zaman gerçekleşmesi için bu kod aşağıdaki gibi düzenlenmelidir.



Çalışma anında "Yazdır" düğmesi tıklanıp bu yordama işletilirse ekrana Windows'un standard diyalog kutularından birisi olan "Yazdır" diyalog kutusu getirilir. Kullanıcı söz konusu bilgileri yazıcıya göndermek istiyorsa Tamam düğmesini, yazdırmak istemiyorsa İptal düğmesini tıklar. Tamam düğmesi tıklandığında yazılan koddaki PrintDocument.Print() satırı işletileceğinden PrintPage olayı meydana gelir ve bu yordama yazılan satırlar işletilir.



Bu ekran görüntüsünü aldığım sırada yazıcıya gönderdiğim metin birden fazla sayfa olmasına rağmen yazdırılacak sayfaların seçildiği Sayfa radyo düğmesi kullanılamaz durumdaydı. Eğer "Yazdır" diyalog kutusunda kullanıcıya yazdırılacak sayfaları seçme imkanını vermek istiyorsanız PrintDialog nesnesinin AllowSomePages özelliğini True yapmalısınız.




PrintPreviewDialog Kontrolü

PrintPage() yordamına yazılan satırlar ile belirlenen metni yazıcıya göndermeden önizleme penceresinde görmek istiyorsanız PrintPreviewDialog kontrolünden yararlanabilirsiniz.



Bu amaçla üzerinde çalıştığım projenin forma bir PrintPreviewDialog nesnesi ve "Önizleme" başlığına sahip bir düğme yerleştirdim. Çalışma anında "Önizleme" başlıklı düğme tıklandığı zaman PrintPreviewDialog nesnesi sayesinde ekrana Print Preview penceresi getirilecek.



Forma PrintPreviewDialog nesnesi yerleştirildikten sonra Properties penceresinde Document özelliği ile bu nesnesinin hizmet edeceği PrintDocument nesnesi belirlenir.



Bu ekran görüntüsünü aldığım sırada formun üzerinde "PrintDocument1" adında bir PrintDocument vardı. Document özelliği ile PrintDocument nesnesi seçimini yaptıktan sonra "Önizleme" başlıklı düğmenin Click yordamında ShowDialog() metoduna yer verdim.



Çalışma anında formdaki Önizleme başlıklı düğme tıklanıp bu yordam işletilirse ekrana aşağıda verilen Print Preview penceresi gelir. Bu penceredeki düğmelerden yararlanarak metni yazdırabilir ve sayfalar arasında dolaşabilirsiniz.




Sayfa Yapısı Ayarları

Yazdırma işlemi öncesi Windows'un standart diyalog kutularından birisi olan Sayfa Yapısı diyalog kutusunu ekrana getirip kenar boşluklarını ve kağıt boyutunu seçmek istiyorsanız PageSetupDialog kontrolünden yararlanabilirsiniz. Aşağıda verilen ekran görüntüsünü PageSetupDialog kontrolünü temsil eden düğmeyi seçtikten sonra aldım.



PageSetupDialog kontrolünün işlevini size göstermek için üzerinde çalıştığım projenin formuna PageSetupDialog nesnesi ve bir düğme yerleştirdim. Forma PageSetupDialog nesnesi yerleştirildikten sonra Properties penceresinde Document özelliğinden yararlanılarak PrintDocument seçimi yapılır.



Forma PageSetupDialog nesnesi yerleştirip Document özelliği ile PrintDocument seçimini yaptıktan sonra forma "Sayfa Yapısı" başlıklı bir düğme yerleştirip bu düğmenin Click() yordamını aşağıdaki gibi düzenledim.



Bu hazırlıktan sonra proje çalıştırılıp formdaki düğme tıklanırsa, yazıcılar ile ilgili her türlü ayarlamanın yapılabildiği Sayfa Yapısı diyalog kutusu ekrana gelir. Bu diyalog kutusundaki Yazıcı düğmesi tıklanırsa geçerli yazıcının özelliklerinin listelendiği diyalog kutusu ekrana gelir.




Dosyaları Yazdırmak

Bazen hard diskte bulunan dosyanın içeriği yazdırılmak istenir. Bu işlemin nasıl yapıldığını size anlatmak için yeni bir proje hazırladım ve projenin formuna bir düğme, OpenFileDialog ve PrinmtDocument nesnesi yerleştirdim. Kullanıcı yazdırmak istediği dosyayı OpenFileDilaog kontrolü sayesinde ekrana getirilen diyalog kutusunda seçip yazıcıya gönderecek.



Daha önce text dosyaları hakkında verilen bilgilerden yararlanarak dosyaların içeriklerini yazdırabilirsiniz. Ancak Visual Basic .NET'in System.IO adlı Namespace'de tanımlı olan StreamReader sınıfı ile bu işlem kolayca yapılmaktadır. Bu nedenle Imports deyimi ile System.IO adlı Namespace'i projeye dahil ettim ve formun üst kısmında dosya içeriğini aktarmak üzere StreamReader tipinde bir değişken tanımladım.



Bu hazırlıklardan sonra forma yerleştirmiş olduğum düğmenin Click() yordamını aşağıdaki gibi düzenleyerek OpenFileDialog kontrolü ile ekrana getirilen diyalog kutusunda seçilen dosyanın içeriğini StreamReader tipindeki değişkene aktardım.



Bu yordamda Print() metoduna yer verdiğim için PrintDocument nesnesinin PrintPage() yordamı işletilir. Bu amaçla yazdırma işlemini yapacak satırları PrintDocument nesnesinin PrintPage() yordamına yazdım. Bu yordamda ReadToEnd() metodu ile StreamReader nesnesinin bütün içeriğini okuyup "Metin" adını vermiş olduğum String değişkene aktardım.



ReadToEnd() metodu StreamReader nesnesinin bütün içeriğini okumaktadır. ReadToEnd() metodu yerine ReadLine() metodunu kullanırsanız her seferinde StreamReader nesnesinden 1 satır okunur. İçeriğini yazdırmak istediğiniz dosya 1 sayfadan fazla bilgi içeriyorsa bu yordam ile ancak dosyanın ilk sayfası yazdırılır.


Kod Yazarak PrintDocument Nesnesi Hazırlamak

Şimdiye kadar PrintDocument nesnesini Toolbox'tan yararlanarak forma yerleştirdik. Ancak isterseniz PrintDocument nesnesini kod yazarak hazırlayabilirsiniz. Bu işlemin nasıl yapıldığını anlatmak için yukarıda forma yerleştirmiş olduğum PrintDocument nesnesini sildim ve formun üst kısmında aşağıdaki gibi değişiklik yaptım.



Formun üst kısmında önce Imports deyimi ile Printing adlı Namespace'i projeye dahil ettim ve "Yazdirma_belgesi" adında bir PrintDocument nesnesi hazırladım. Bu hazırlıklardan sonra OpenFileDialog kontrolü sayesinde dosya seçimi yapılan diyalog kutusunu ekrana getirdim.



Kullanıcı içeriğini yazdıracağı dosyayı seçip Aç diyalog kutusunu OK düğmesi ile kapatırsa seçtiği dosya StreamReader() metoduna parametre olarak verilerek dosyanın içeriği okunur ve tipindeki StreamReader nesneye aktarılır. En son olarak kod yazarak hazırladığım PrintDocument nesnesinin PrintPage() yordamını aşağıdaki gibi düzenledim.







Bu sayfa için henüz yorum eklenmemiş.

© Hakan Ersöz 2000-2013| Üyelik Sözleşmesi | | Ödeme Bildirimi
Sitemizden yenilikleri hemen öğrenin, pop upları engelleyin, chat yapın... ToolBarımızı indirin:
Vasicmaster Toolbar'ı indirin