Rakkoc.Com Recep Akkoç / Rakkocun Yazıtları

21Eki/110

Doping ADSL’den Davacıyım..!

Bugün kargocu ile telefonda kavga ettikten sonra eve geldiğimde beni küçük bir süpriz karşıladı.  Doping ADSL bana bir kutu göndermişti. Kutuyu açmadan önce “Heralde bir internet paketi gönderdiler. Yanında da bir ADSL modem galiba” diye düşünmeye başladım.  Bu kadar büyük bir kutu içerisinde başka ne olabilirdi ki?

Kutuyu açtığım zaman içerisinden vazelin, saat, tencere kapağı, tütsü, kahve, zımba, cd ve kullanım kılavuzu çıktı. Şaşırdığımı itiraf etmeliyim.  Kullanım klavuzunu açarak ne olduğunu anlamaya çalıştım.

Tencere kapağını kablosuz modemlerinden gelen sinyali daha iyi alabilmek için kullanmam gerektiği yazıyordu. Yerli mühendislik ürünüymüş.  Uğraştım uğraştım bir türlü ADSL modem sinyalini artıramadım. Tütsüye geçip okumaya başladım. Tütsü radyo sinyallerini akışkan hale getiriyormuş.  Hiçbir işe yaramadı.  Hala internet bağlantım kötü durumdaydı. Bir kutu tütsüyü bitirdikten sonra Vazeline geçiş yaptım.  (Şu adresten görebilirsiniz http://www.bizedopinglazim.com/) Vazelini kullanma klavuzunda kablolara iyicene sürmem gerektiğini söylemişler. En iyi sonucu almak için modem ve splitter girişlerine sürmemizi istemişler. Bolcana sürdüm.

Sonuçta internetim komple gitti…!

Bir arkadaşımı çağırdım ve bana yeni bir splitter ile modem getirdi. Onları bağladık.  Yine de pes etmedim. Zımba ile modemdeki kaçakları kapatmam gerekiyormuş.  Kullanma klavuzunda yazdığı gibi zımba ile modemi çok zor da olsa zımbalamaya başladım.  Arkadaşım “Napıyorsun böyle olmaz” diye seslensede modemin her tarafını resimde görüldüğü gibi zımbaladım.  Fakat internet bağlantım bir türlü düzelmedi. FrekansCD ile bilgisayarımın modemle ID sini bağlamamdan bahsediliyordu.  Bu işleme geçtim. Bilgisayarıma CD’yi taktım fakat CD boş çıktı.  İçinde hiçbirşey yoktu. Ama bir program olması lazım değil miydi?

Bana boş CD göndermişler..!

Son olarak ADSL modeme saati kurup kahve olayına geçtim.  Kullanım klavuzunda kahveyi modemin üstüne döküp bekmemem gerektiği yazıyordu.  Modemin üstüne bir güzel kahveyi döktüm.  Sonrada beklemeye başladım.  Modem sıcaklığından mı yoksa başka birşey mi oldu anlayamadım modemimden cızırtılar gelmeye başladı. En sonunda modemin içinden ateş çıktı ve modem yandı.  Sigortalar attı.  Modemi fişten çektim gidip sigortaları açtım ışıkları yaktığımda ikinci modeminde simsiyah olduğunu gördüm.

Davacıyım..!

Gönderdikleri ürünlerin hiçbiri hiçbir işe yaramadı.  2 tane adsl modem yaktım az kalsın kahveyi pc nin içine ve prizlerin içine dökecektim.  Doping Adsl müşteri hizmetlerini aradım.  Durumu anlattım Selin hanım (müşteri hizmetlerinden) telefonda bana bunları yapmamam gerektiğini ve yanlış olduğunu söyledi.  Fakat kutudan çıkan kullanma klavuzunda yazanları yaptığımı ve elimde klavuz olduğunu söylesemde beni dinlemedi.  En sonunda telefon numaramı kontrol ederek Doping ADSL müşterisi olmadığımı söyledi ve telefonu kapattı.

Selin Hanımdan da davacıyım..!

Madem bunları yapmamam gerekiyor neden kullanma klavuzunda bunları yazıp gönderiyorsunuz?  Üstelik http://www.bizedopinglazim.com/  internet adresinizde videolarınızda var.  2 tane adsl modem yaktım vazelin ve kahve sayesinde az daha evimde yangın çıkacaktı. Üstelik müşteri yerine bile koymadılar beni.  Hemen tüm paketi kargo kağıdını ve internet adresindeki videoları alıp savcılığa gittim.

O kadar sinirliydim ki Savcıya tüm içimdekileri döktüm.

Savcı bana elimdeki kullanma klavuzu ve kargo kağıdını delil olarak kullanabileceğimizi söyledi.  Tanıdığı bir avukatı çağırdı O avukat arkadaşa derdimi bir güzel anlattım.  Bana gönderilen paketi ve kullanma klavuzumla beraber yanmış olan 2 adsl modemimi aldı.

Sonunda Doping Adsl’ye dava açtım..!

Davanın birkaç gün içersinde sonuçlananacağını söyledi avukatım.  Özelliklede elimizde sağlam deliller olması ve benim dışımda Kupa kıralı, Simto, Sahika, Melih Bayram Dede gibi arkadaşlara da bu paketi gönderdiklerini söyledim. Bunun üzerine davayı kazanıp tazminat davası da açabileceğimizi söyledi.  Bakalım doping adsl firması ne yapacak..!

NOT: Burada yazılan gerçek bir hikaye değildir. Tamamiyle uydurmadır. Doping ADSL’e ilgi alaka ve hediyeleri için teşekkürlerimi iletirim :)

http://www.bizedopinglazim.com

http://www.doping.com.tr/

Teakolik.com'dan alintidir.
20Eki/110

Eski Ogrencim

Merhaba Sevgili okurlarim, googleBot ve sadik dostum CyberEgo;

Gecenlerde tanimadigim bir numaradan bir cagri aldim; islerim ile alakalidir diye hemen geri dondum. Ciliz ve korarkak bir ton ile bir bayan sesi Sey afedersiniz Recep beylemi gorusuyorum. "Beyaz seytan" dedi. (Hafif ten bir flashback yasar gibi oldum. yaklasik 10 yil boyunca beyazSeytan diye internette dolastim ve ticari projelerim icin nickimi Adim ve Soyadimin birlesimi Rakkoc olarak degistirdim.)

Evet ben Recep dedigimde. Hocam ben Kubra diye bir karsilik aldim. Hala bu numarayi kullanmiyor olabilirsiniz diye tedirgindim; suanda hacet tepede okuyorum bir konuda yardinizi istiyecegim diye devam eden bir konusma gecti aramizda.

Cok mutlu oldum o an. CeTurk (http://www.ceturk.com) da ASP bolumunde tanistigim birisi taa 2008-2009 de bana bir is imkani sunmustu ve sayesinde bir suru genc ile tanismistim.

Konunun adi "Odevimi yapacak birini ariyorum" seklinde bir sey idi (tam boyle olmaya bilir. geri donuk arama yapmaya calistim suanda ama bulamadim. muhtemelen silinmistir dedim.

400 tl karsiliginda odevlerini yapmistim ve hocalari bunu siz yapmamisiniz diye biraz sıkıstırdıgında kabul edip benimle hocalari ile konusmami istemislerdi ben kabul etmiyince hocaya benim tel nomu hocalarina verip iletisime gecmemi saglamislardi.

Hocalari Hamile bir bayanmis ve dogum iznine cikacakmis; Meslek Lisesinde Web Programlama dersine girecek konuya hakim hoca olmadigi icin disardan sozlesmeli hoca tutmayi dusunuyorlarmis. Sen ASP'ye cok hakimsin gordugum kadari (buyuk bi formu teker teker db ye baglamak ve aktarmak yerine foreach kullandigim icin :]  ) ile bu konuda bize yardimci olurmusun dediler. bende memnuniyet ile kabul ettim. Klasik ASP ve Klasik VB derslerinde ben ogretmenlik yaptim dogrusu cokta zevkli bir zaman gecirmistim.

Kategori: Anılarım Yorum yok
18Eki/110

Unix ve C programlama dilinin yaratıcısı Dennis Ritchie öldü

Steve Jobs‘ın ölümüyle sarsılan bilişim dünyası bu kez de C programlama dilinin yazılımcısı Dennis Ritchie‘nin ölümünün üzüntüsünü yaşıyor (12 Ekim 2011).
RitchieSteve Jobs kadar medyatik olmasa da teknoloji dünyası için en az onun kadar önemli bir isim. programlama dilinin ve UNIX işletim sisteminin yaratıcılarından Dennis Ritchie, yaşamı boyunca gerek kişisel, gerekse ekip arkadaşlarıyla birlikte yaptığı çalışmalar sayesinde birçok ödül almış bir uzmandı.

C programlama dilini arkadaşı Ken Thompson’la beraber Bell labaratuarlarında geliştiren Ritchie, birçok bilgisayar mühendisinin idolüydü.

Dennis Ritchie ve Brian Kernighan​ tarafından 1978 yılında yayınlanan ve tüm dünyaya bu yeni dili öğreten ‘The C Programming Language’ kitabıysa bugün hala C dilinin kutsal kitabı olarak görülüyor.Dennis Ritchie, Unix işletim sisteminin gelişmesi için ömrü boyunca bir çok çalışmada yer almış, bu işletim sisteminin özellikle sunucular üzerinde çok yaygın olarak kullanılmasının en önemli temsilcilerinden biri olmuştur.

Uzun süredir sağlık durumu kötü giden ve 71 yaşında hayata veda eden Dennis Ritchie“UNIX, temelde basit bir işletim sistemidir, ama bu basitliği anlamak için bir dahi olmanız gerekir” sözüyle biliniyor.

 

 

Kategori: Bilişim, Genel Yorum yok
11Eki/110

Cebit 2011

Merhaba Sevgili okurlarım; henüz bildiğim bir okurum yok ama yinede ben yazicagim birseyler.

Cebit donusu 2. gunumde cebittin eskisini arattigini artik bilisim dunyasinin degil is dunyasinin kartvizit dagitmak icin toplandigi bir yer oldugunu herkez gibi belirtmekte olucam. Calismakta oldugum sirketim Teknikkart ( http://teknikkart.com.tr/ )  ile satandimizda gecirdigim 4 gun boyunca iyi işler pesinde kostuk evet guzel projeler icin anlasmalarimizda oldu fakat sadece kendi bazimda dusunmuyorum durumu bir cok firma bu sene bekledigi sonucu alamadi ve cevre standlarimizdan aldigim bilgilere gore bir cogu seneye katilmamayi dusunuyor.

Bu sene 1-4-5-8 nolu salonlar da kapali idi. Gelen ogrencilerin bir cogu sponsor aramakta. Almanya Cebit'e gitmek istiyorum artik. Turkiyede bir cok seyi ele alip basarabilecek daha guzel noktalara getirebilecek bir noktada iken yonetimsel problemler yuzunden batirmakta oldugumuzu dusunuyorum. Artik cebit'e gelen kisiler bilisimci degil halk cunku bilisim adina kalan bir sey yok.

Peki neden boyle oldu; Yurtdisindan direk gelen sicak teknoloji urunleri daha ilk zamanki halkin ve promosyon toplayicilarin elinden gecince artik gelme hevesini kaybetti. yani bu benim sahsi gorusum ama buyuk bir nebzede cevremdeki insanlarda buna katiliyor.

Fuarin yinede eglenceli gecmedigini soylemiyecegim cunku ozellik ile son gunun tbt'den arkadaslar ile gelenekselleşmiş cebit buluşmamizi gerceklestirdik. Burgerking de yemek ve hoş sohbet ile bir cebit macerami daha bitirdim.

Etiketler: , Yorum yok
11Eki/110

CSharp Printing | C# ile çıktı almak

işim geregi kullanmakta oldugum print-printer islemlerini bir yerde toplu buldum ve blogumda yayinlamak istedim.

C# Printing Functions

Printing text and graphics is one of the more important tasks in Windows application programming. With .NET, simple printing, such as sending a string to the printer, is easy; however, the .NET Framework lacks a ready-to-use class that encapsulates complex printing tasks. For example, some coding is required if you want to allow the user to set the printer and the page to print, change the margins, print more than one copy, etc. This article offers a brief tutorial on printing using the .NET Framework class library. It starts with printing a simple string and then proceeds with some coding for page setup and print preview. To provide printing features in your Windows application, you should be familiar with the Graphics class in theSystem.Drawing namespace. You can find a discussion of this class in my previous article, " System.Drawing with C#."

For printing, you use the System.Drawing.Printing namespace. The main class in this namespace is the PrintDocument class, which represents an object that sends output to the printer. The role of this class is so central that you can achieve simple and complex printing tasks by using this class alone. However, as we shall see, other classes in this and other namespaces help make coding easier.

To print text or graphics, you call the Print method of the
System.Drawing.Printing.PrintDocument class. One of the events the Print method invokes is the PrintPage event. You need to wire an event handler to the PrintPageevent and write the code to send output to the printer. The event handler will receive an argument of type System.Drawing.Printing.PrintPageEventArgs, containing data related to the PrintPage event. One of the properties inPrintPageEventArgs is Graphics, from which you can obtain aSystem.Drawing.Graphics object. This Graphics object represents a print page. To send a string to the printer, for example, you use the Graphics class' DrawStringmethod. Of course, you can also call other methods of the Graphics class, such asFillRectangleDrawEllipse, etc.

To illustrate how printing is done using members of the System.Drawing.Printingnamespace, I've created a simple form, shown in Example 1. This is basically a blank form without any printing capability. I will gradually add code to this class to add printing features. The code in Listing 1 is a form class with a menu containing a single menu item, fileMenuItem. This item in turn contains three submenu items:filePageSetupMenuItem, filePrintPreviewMenuItem, and filePrintMenuItem.

Listing 1: The form template for printing

 using System; using System.Drawing; using System.Drawing.Printing; using System.IO; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace CSharpPrinting { public class Form1 : System.Windows.Forms.Form { public Form1() { MenuItem fileMenuItem = new MenuItem("&File"); MenuItem filePageSetupMenuItem = new MenuItem("Page Set&up...", new EventHandler(filePageSetupMenuItem_Click)); MenuItem filePrintPreviewMenuItem = new MenuItem("Print Pre&view", new EventHandler(filePrintPreviewMenuItem_Click)); MenuItem filePrintMenuItem = new MenuItem("&Print...", new EventHandler(filePrintMenuItem_Click), Shortcut.CtrlP); fileMenuItem.MenuItems.Add(filePageSetupMenuItem); fileMenuItem.MenuItems.Add(filePrintPreviewMenuItem); fileMenuItem.MenuItems.Add(filePrintMenuItem); this.Menu = new MainMenu(); this.Menu.MenuItems.Add(fileMenuItem); } // -------------- event handlers ------------------------------------- private void filePrintMenuItem_Click(Object sender , EventArgs e) { } private void filePrintPreviewMenuItem_Click(Object sender , EventArgs e) { } private void filePageSetupMenuItem_Click(Object sender , EventArgs e) { } //-------------- end of event handlers ------------------------------ [STAThread] static void Main() { Application.Run(new Form1()); } } } 

Note that each of the three menu items in fileMenuItem is wired with an event handler in its declaration. The event handlers for the three menu items arefilePageSetupMenuItem_Click, filePrintPreviewMenuItem_Click, andfilePrintMenuItem_Click, as shown in the following code, which is part of the class' constructor.

 MenuItem filePageSetupMenuItem = new MenuItem("Page Set&up...", new EventHandler(filePageSetupMenuItem_Click)); MenuItem filePrintPreviewMenuItem = new MenuItem("Print Pre&view", new EventHandler(filePrintPreviewMenuItem_Click)); MenuItem filePrintMenuItem = new MenuItem("&Print...", new EventHandler(filePrintMenuItem_Click), Shortcut.CtrlP); 

As you can see from the code in Listing 1, the three event handlers are currently blank.

 private void filePrintMenuItem_Click(Object sender , EventArgs e) { } private void filePrintPreviewMenuItem_Click(Object sender , EventArgs e) { } private void filePageSetupMenuItem_Click(Object sender , EventArgs e) { } 

Now, we're ready to add code to this template to enable printing. Here is what we will do.

  1. Add a class-level variable called printDoc of typeSystem.Drawing.Printing.PrintDocument:
    private PrintDocument printDoc = new PrintDocument(); 
  2. In the class' constructor, wire the PrintPage event of printDoc with an event handler we simply call printDoc_PrintPage:
    printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage); 
  3. Add code to the filePrintMenuItem_Click event handler:
     private void filePrintMenuItem_Click(Object sender, EventArgs e) { printDoc.Print(); } 
  4. Add code to printDoc_PrintPage:
     private void printDoc_PrintPage(Object sender , PrintPageEventArgs e) { String textToPrint = ".NET Printing is easy"; Font printFont = new Font("Courier New", 12); e.Graphics.DrawString(textToPrint, printFont, Brushes.Black, 0, 0); }

The resulting form is given in Listing 2.

Listing 2: The form with code that prints.

 using System; using System.Drawing; using System.Drawing.Printing; using System.IO; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace CSharpPrinting { public class Form1 : System.Windows.Forms.Form { private PrintDocument printDoc = new PrintDocument(); public Form1() { MenuItem fileMenuItem = new MenuItem("&File"); MenuItem filePageSetupMenuItem = new MenuItem("Page Set&up...", new EventHandler(filePageSetupMenuItem_Click)); MenuItem filePrintPreviewMenuItem = new MenuItem("Print Pre&view", new EventHandler(filePrintPreviewMenuItem_Click)); MenuItem filePrintMenuItem = new MenuItem("&Print...", new EventHandler(filePrintMenuItem_Click), Shortcut.CtrlP); fileMenuItem.MenuItems.Add(filePageSetupMenuItem); fileMenuItem.MenuItems.Add(filePrintPreviewMenuItem); fileMenuItem.MenuItems.Add(filePrintMenuItem); this.Menu = new MainMenu(); this.Menu.MenuItems.Add(fileMenuItem); printDoc.PrintPage += new PrintPageEventHandler( printDoc_PrintPage); } // -------------- event handlers --------------------------------- private void filePrintMenuItem_Click(Object sender , EventArgs e) { printDoc.Print(); } private void filePrintPreviewMenuItem_Click(Object sender , EventArgs e) { } private void filePageSetupMenuItem_Click(Object sender , EventArgs e) { } private void printDoc_PrintPage(Object sender , PrintPageEventArgs e) { String textToPrint = ".NET Printing is easy"; Font printFont = new Font("Courier New", 12); e.Graphics.DrawString(textToPrint, printFont, Brushes.Black, 0, 0); } //-------------- end of event handlers ------------------------------- [STAThread] static void Main() { Application.Run(new Form1()); } } } 

Now, if you run the form and press Ctrl+P (of course, assuming a printer is connected to your computer and the correct driver is installed), the printer will print the string ".NET printing is easy." Isn't it easy?

Using PrintDialog

Usually in a Windows application, you will see the Print dialog box prior to printing. This dialog box gives the user the chance to cancel printing, change the printer properties, select the number of copies, select the pages to print, etc. If you modify the filePrintMenuItem_Click in Listing 2 with the one in Listing 3, a Print dialog box will be displayed prior to printing. A Print dialog box is represented by theSystem.Windows.Forms.PrintDialog class.

Listing 3: Using PrintDialog

 private void filePrintMenuItem_Click(Object sender , EventArgs e) { PrintDialog dlg = new PrintDialog(); dlg.Document = printDoc; if (dlg.ShowDialog() == DialogResult.OK) { printDoc.Print(); } } 

The filePrintMenuItem_Click event handler in Listing 3 only sends output to the printer if the user clicks the Print dialog box's OK button. However, the settings a user changes in the Print dialog box won't take effect until you write the code to take those options into account.

Page Setup

The following section adds the feature to set up the page that is used for printing. For this, you must perform the following steps.

  1. Construct an instance of the System.Drawing.Printing.PageSettings class (for this example, I add the following to the Declarations part of the form class):
    private PageSettings pgSettings = new PageSettings(); 
  2. Set pgSettings to the DefaultPageSettings property of printDoc before printing. Therefore, add the highlighted code to the filePrintMenuItem_Click event handler in your form:
     private void filePrintMenuItem_Click(Object sender , EventArgs e) { printDoc.DefaultPageSettings = pgSettings; PrintDialog dlg = new PrintDialog(); dlg.Document = printDoc; if (dlg.ShowDialog() == DialogResult.OK) { printDoc.Print(); } } 
  3. Allow the user to change the setting of the page. For our example, add the following code to the filePageSetupMenuItem_Click event handler:
     private void filePageSetupMenuItem_Click(Object sender , EventArgs e) { PageSetupDialog pageSetupDialog = new PageSetupDialog(); pageSetupDialog.PageSettings = pgSettings; pageSetupDialog.AllowOrientation = true; pageSetupDialog.AllowMargins = true; pageSetupDialog.ShowDialog(); } 
  4. Modify the printDoc_PrintPage event handler to take into account the top and left margins. Here is the code for our form:
     private void printDoc_PrintPage(Object sender , PrintPageEventArgs e) { String textToPrint = ".NET Printing is easy"; Font printFont = new Font("Courier New", 12); int leftMargin = e.MarginBounds.Left; int topMargin = e.MarginBounds.Top; e.Graphics.DrawString(textToPrint, printFont, Brushes.Black, leftMargin, topMargin); } 

Now you can select Page Setup from the File menu. What it looks like depends on your printer type. The complete code for the form that includes page setup is given in Listing 4.

Listing 4: The form class that allows the user to change the page setup

 using System; using System.Drawing; using System.Drawing.Printing; using System.IO; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace CSharpPrinting { public class Form1 : System.Windows.Forms.Form { private PrintDocument printDoc = new PrintDocument(); private PageSettings pgSettings = new PageSettings(); public Form1() { MenuItem fileMenuItem = new MenuItem("&File"); MenuItem filePageSetupMenuItem = new MenuItem( "Page Set&up...", new EventHandler( filePageSetupMenuItem_Click)); MenuItem filePrintPreviewMenuItem = new MenuItem( "Print Pre&view", new EventHandler( filePrintPreviewMenuItem_Click)); MenuItem filePrintMenuItem = new MenuItem("&Print...", new EventHandler(filePrintMenuItem_Click), Shortcut.CtrlP); fileMenuItem.MenuItems.Add(filePageSetupMenuItem); fileMenuItem.MenuItems.Add(filePrintPreviewMenuItem); fileMenuItem.MenuItems.Add(filePrintMenuItem); this.Menu = new MainMenu(); this.Menu.MenuItems.Add(fileMenuItem); printDoc.PrintPage += new PrintPageEventHandler( printDoc_PrintPage); } // -------------- event handlers ---------------------- private void filePrintMenuItem_Click(Object sender , EventArgs e) { printDoc.DefaultPageSettings = pgSettings; PrintDialog dlg = new PrintDialog(); dlg.Document = printDoc; if (dlg.ShowDialog() == DialogResult.OK) { printDoc.Print(); } } private void filePrintPreviewMenuItem_Click(Object sender , EventArgs e) { } private void filePageSetupMenuItem_Click(Object sender , EventArgs e) { PageSetupDialog pageSetupDialog = new PageSetupDialog(); pageSetupDialog.PageSettings = pgSettings; pageSetupDialog.AllowOrientation = true; pageSetupDialog.AllowMargins = true; pageSetupDialog.ShowDialog(); } private void printDoc_PrintPage(Object sender , PrintPageEventArgs e) { String textToPrint = ".NET Printing is easy"; Font printFont = new Font("Courier New", 12); int leftMargin = e.MarginBounds.Left; int topMargin = e.MarginBounds.Top; e.Graphics.DrawString(textToPrint, printFont, Brushes.Black, leftMargin, topMargin); } //-------------- end of event handlers ------------------ [STAThread] static void Main() { Application.Run(new Form1()); } } } 

Printer Setting

You can also enable the user to change printer settings by performing the following steps.

  1. Create an instance of the System.Drawing.Printing.PrinterSettings class. For our form, add the following line of code:
    private PrinterSettings prtSettings = new PrinterSettings(); 
  2. Set prtSettings to the PrinterSettings property of the PageSetupDialog:
     private void filePageSetupMenuItem_Click(Object sender , EventArgs e) { PageSetupDialog pageSetupDialog = new PageSetupDialog(); pageSetupDialog.PageSettings = pgSettings; pageSetupDialog.PrinterSettings = prtSettings; pageSetupDialog.AllowOrientation = true; pageSetupDialog.AllowMargins = true; pageSetupDialog.ShowDialog(); } 

Now the Printer button in the Page Setup dialog is enabled. If you click the Printer button, the Printer setting page will be displayed.

Print Preview

In a Windows application, before the user prints, they can normally view a preview of how the printout will like on paper. You can also provide this feature by adding the following code to the filePrintPreviewMenuItem_Click event handler.

 private void filePrintPreviewMenuItem_Click(Object sender , EventArgs e) { PrintPreviewDialog dlg = new PrintPreviewDialog(); dlg.Document = printDoc; dlg.ShowDialog(); } 

The Print Preview dialog box is represented by theSystem.Windows.Forms.PrintPreviewDialog class. You can create an instance of this dialog box by using its no-argument constructor. Then you must assign thePrintDocument object to print to the Document property of the PrintPreviewDialogobject. When the ShowDialog method is called, it will invoke the PrintPage event of the PrintDocument object. However, the output will not be sent to the printer but to the PrintPreviewDialog object. The complete code is given in Listing 5.

Listing 5: The complete code with Page Setup and Print Preview

 using System; using System.Drawing; using System.Drawing.Printing; using System.IO; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace CSharpPrinting { public class Form1 : System.Windows.Forms.Form { private PrintDocument printDoc = new PrintDocument(); private PageSettings pgSettings = new PageSettings(); private PrinterSettings prtSettings = new PrinterSettings(); public Form1() { MenuItem fileMenuItem = new MenuItem("&File"); MenuItem filePageSetupMenuItem = new MenuItem("Page Set&up...", new EventHandler(filePageSetupMenuItem_Click)); MenuItem filePrintPreviewMenuItem = new MenuItem("Print Pre&view", new EventHandler(filePrintPreviewMenuItem_Click)); MenuItem filePrintMenuItem = new MenuItem("&Print...", new EventHandler(filePrintMenuItem_Click), Shortcut.CtrlP); fileMenuItem.MenuItems.Add(filePageSetupMenuItem); fileMenuItem.MenuItems.Add(filePrintPreviewMenuItem); fileMenuItem.MenuItems.Add(filePrintMenuItem); this.Menu = new MainMenu(); this.Menu.MenuItems.Add(fileMenuItem); printDoc.PrintPage += new PrintPageEventHandler( printDoc_PrintPage); } // -------------- event handlers ------------------------------------ private void filePrintMenuItem_Click(Object sender , EventArgs e) { printDoc.DefaultPageSettings = pgSettings; PrintDialog dlg = new PrintDialog(); dlg.Document = printDoc; if (dlg.ShowDialog() == DialogResult.OK) { printDoc.Print(); } } private void filePrintPreviewMenuItem_Click(Object sender , EventArgs e) { PrintPreviewDialog dlg = new PrintPreviewDialog(); dlg.Document = printDoc; dlg.ShowDialog(); } private void filePageSetupMenuItem_Click(Object sender , EventArgs e) { PageSetupDialog pageSetupDialog = new PageSetupDialog(); pageSetupDialog.PageSettings = pgSettings; pageSetupDialog.PrinterSettings = prtSettings; pageSetupDialog.AllowOrientation = true; pageSetupDialog.AllowMargins = true; pageSetupDialog.ShowDialog(); } private void printDoc_PrintPage(Object sender , PrintPageEventArgs e) { String textToPrint = ".NET Printing is easy"; Font printFont = new Font("Courier New", 12); int leftMargin = e.MarginBounds.Left; int topMargin = e.MarginBounds.Top; e.Graphics.DrawString(textToPrint, printFont, Brushes.Black, leftMargin, topMargin); } //-------------- end of event handlers ----------------------------- [STAThread] static void Main() { Application.Run(new Form1()); } } } 

Conclusion

As you can see, this article has shown how to provide the printing feature in your Windows application, step-by-step. However, the code for printing is scattered around the other code. It is a good idea to encapsulate the printing feature in a class of its own so that you can have the printing feature without making your code "dirty."

Budi Kurniawan is a senior J2EE architect and author.

 

 

orjinal sayfa asagidaki linktedir :
http://ondotnet.com/pub/a/dotnet/2002/06/24/printing.html

Toplam 2 sayfa mevcuttur; 1. sayfayi okuyorsunuz...12