Utskrift med dialogfönster

Utskrift Databashantering

I Toolbox finns ett antal dialogverktyg för utskrifthantering.

Vi skall göra ett program som öppnar en textfil, använder sidinställningar, visar en förhandsgranskning samt skriver ut på flera sidor.

I det här exemplet skall vi använda en RichTextBox i stället för en TextBox. Det är ett kraftfullare verktyg för textbearbetning än en vanlig TextBox. Vi skall också använda FileStream för att läsa textfiler i stället för att läsa in texten rad för rad i en variabel för att sedan läggas in i TextBoxen.

Lägg ut en RichTextBox och 4 Button. Skriv Öppna på en knapp och döp den till btnOpen. En annan knapp ges texten Sidinställningar och namnet btnSetup. På den tredje knappen skall det stå Förhandsgranskning och den får heta btnPreview. På den sista knappen skall det stå Skriv ut och den får namnet btnPrint.

Prefixet btn betyder att det är namnet på en Button. Om vi har många olika objekt och variabler kan det vara bra med prefix i namnet. Då man ser i koden vad det är för något, utan att behöva leta efter deklarationen.

Lägg också ut en OpenFileDialog, en PrintDocument, en PrintDialog, en PageSetupDialog samt en PrintPreviewDialog.

Längst upp i kodfönstret ovanför Public Class Form1 skriver vi:

Imports System.IO
Imports System.Drawing.Printing

Nu har vi tillgång till rutiner för in- och utmatning med FileStream samt för utskriftshantering. Under Windows Form Designer generated code deklarerar vi sedan några variabler:

Dim PrintPageSettings As New PageSettings()
Dim StringToPrint As String
Dim PrFont As New Font("Ariel", 12)

Nu skriver vi koden i knappen Öppna så att vi får ett dialogfönster där vi kan välja en fil att öppna i RichTextBoxen.

Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click

Dim FilePath As String
OpenFileDialog1.Filter = "Text files (*.txt)|*.txt"
OpenFileDialog1.ShowDialog()
If OpenFileDialog1.FileName <> "" Then
   FilePath = OpenFileDialog1.FileName
   Dim MyFileStream As New FileStream(FilePath, FileMode.Open)
   RichTextBox1.LoadFile(MyFileStream, RichTextBoxStreamType.PlainText)
   MyFileStream.Close()
End If
End Sub

Först gör vi ett filter så att det bara blir txt-filer som visas i dialogfönstret. Om vi har valt en fil läggs sökvägen in i variabeln FilePath. Sedan skapar vi en ström av typen FileStream med vår variabel och med sökvägen som attribut. Därpå laddas den valda filens text i RichTextBoxen och slutligen stänger vi filläsningen.

Nu gör vi sidinställningsknappen:

Private Sub btnSetup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetup.Click

PageSetupDialog1.PageSettings = PageSetUp
PageSetupDialog1.ShowDialog()
End Sub

ShowDialog öppnar ett dialogfönster där användaren kan göra sina sidinställningar.

Nu kommer turen till förhandsvisningen. Först måste vi skriva en subprocedur på samma sätt som i föregående lektion för utskrift.

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

Dim numChars, numLines As Integer
Dim stringForPage As String
Dim strFormat As New StringFormat()
Dim rectDraw As New RectangleF( e.MarginBounds.Left, e.MarginBounds.Top, e.MarginBounds.Width, e.MarginBounds.Height)
Dim sizeMeasure As New SizeF(e.MarginBounds.Width, e.MarginBounds.Height - PrFont.GetHeight(e.Graphics))
strFormat.Trimming = StringTrimming.Word
e.Graphics.MeasureString(PrintString, PrFont, sizeMeasure, strFormat, numChars, numLines)
stringForPage = PrintString.Substring(0, numChars)
e.Graphics.DrawString(stringForPage, PrFont, Brushes.Black, rectDraw, strFormat)
If numChars < PrintString.Length Then
   PrintString = PrintString.Substring(numChars)
   e.HasMorePages = True
Else
   e.HasMorePages = False
   PrintString = RichTextBox1.Text
End If
End Sub

Här definieras utskriftområde, en rektangel, med namnet rectDraw av typen RectangleF, baserat på inställningarna i sidinställningarna.

Text som hamnar utanför det området skall radbrytas. Variabeln strFormat och metoden Trimming justerar text som hamnar utanför högermarginalen.

Textsträngarna skrivs ut med metoden DrawString. Det här ser krångligt ut - spara den här subproceduren så att du kan använda den även i andra program där du skall göra utskrifter.

Nu skriver vi koden i knappen för förhandsvisning:

Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click

PrintDocument1.DefaultPageSettings = PageSetUp
PrintString = RichTextBox1.Text
PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.ShowDialog()
End Sub

Egenskapen DefaultPageSettings i PrintDocument får här de värden som ställts in i sidinställningen. Sedan läggs texten från RichTextBox in i den deklarerade variabeln StringToPrint för utskrift. Därefter anropas den subrutin vi har gjort för utskrift, och slutligen öppnas dialogfönstret PrintPreview.

Sist men inte minst koden för att skriva ut:

Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click

PrintDocument1.DefaultPageSettings = PageSetUp
PrintString = RichTextBox1.Text
PrintDialog1.Document = PrintDocument1
Dim result As DialogResult = PrintDialog1.ShowDialog()
   PrintDocument1.Print()
End If
End Sub

Först görs sidinställningarna för PrintDocument1. Sedan läggs texten från RichTextBox in i en variabel för utskrift. Därefter visas utskriftsfönstret. Om användaren klickar OK anropas subproceduren PrintDocument1 och texten skrivs ut.

Utskrift Databashantering

SupportData.Net
©