vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Der Code hat doch gepasst 
Autor: lighty
Datum: 05.09.06 12:13

Imports System
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Runtime.InteropServices
Imports System.Drawing.Printing

Namespace Printing
Public Class PrintFromRichTextBox

Private RTB As RichTextBox
Private WithEvents PrintDoc As PrintDocument
Private CharsToPrint As Integer
Private Pos As Integer

#Region "Properties"

Public ReadOnly Property PrintDocument() As PrintDocument
Get
If PrintDoc Is Nothing Then
PrintDoc = New PrintDocument
End If

Return PrintDoc
End Get
End Property

#End Region

#Region "Const"

Private Const AnInch As Double = 14.4
Private Const WM_User As Integer = &H400
Private Const EM_Formatrange As Integer = WM_User + 57

#End Region

#Region "Structur"

<StructLayout(LayoutKind.Sequential)> _
Private Structure Rect
Public Left
Public Top
Public Right
Public Bottom
End Structure

<StructLayout(LayoutKind.Sequential)> _
Private Structure CharRange
Public FirstChar As Integer
Public LastChar As Integer
End Structure

<StructLayout(LayoutKind.Sequential)> _
Private Structure FormatRange
Public hdc As IntPtr
Public hdcTarget As IntPtr
Public Rectangle As Rect
Public RectanglePage As Rect
Public ChRange As CharRange
End Structure

#End Region

#Region "Function"

Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hWnd As IntPtr, _
ByVal msg As Integer, ByVal wp As IntPtr, ByVal lp As IntPtr) As IntPtr

Private Function Print(ByVal CharFrom As Integer, ByVal CharTo As Integer, ByVal e As PrintPageEventArgs) As Integer
Dim CRange As CharRange

CRange.FirstChar = CharFrom
CRange.LastChar = CharTo

Dim RectToPrint As Rect
RectToPrint.Top = e.MarginBounds.Top * AnInch
RectToPrint.Bottom = e.MarginBounds.Bottom * AnInch
RectToPrint.Left = e.MarginBounds.Left * AnInch
RectToPrint.Right = e.MarginBounds.Right * AnInch

Dim rectPage As Rect
rectPage.Top = e.PageBounds.Top * AnInch
rectPage.Bottom = e.PageBounds.Bottom * AnInch
rectPage.Left = e.PageBounds.Left * AnInch
rectPage.Right = e.PageBounds.Right * AnInch

Dim hdc As IntPtr = e.Graphics.GetHdc()

Dim fmtRange As FormatRange
fmtRange.ChRange = CRange
fmtRange.hdc = hdc
fmtRange.hdcTarget = hdc
fmtRange.Rectangle = RectToPrint
fmtRange.RectanglePage = rectPage

Dim res As IntPtr = IntPtr.Zero

Dim wparam As IntPtr = IntPtr.Zero
wparam = New IntPtr(1)

Dim lparam As IntPtr = IntPtr.Zero
lparam = Marshal.AllocCoTaskMem(Marshal.SizeOf(fmtRange))
Marshal.StructureToPtr(fmtRange, lparam, False)

res = SendMessage(RTB.Handle, EM_Formatrange, wparam, lparam)

Marshal.FreeCoTaskMem(lparam)

e.Graphics.ReleaseHdc(hdc)

Return res.ToInt32

End Function

#End Region

#Region "Sub"

Public Sub New(ByVal RichTextBox As RichTextBox)
RTB = RichTextBox
End Sub

Public Sub SelPrint()
If RTB.SelectionLength > 0 Then
CharsToPrint = RTB.SelectionStart + RTB.SelectionLength
Pos = RTB.SelectionStart
Else
CharsToPrint = RTB.TextLength
Pos = 0
End If

PrintDoc.Print()
End Sub

Private Sub PrintDoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDoc.PrintPage
Pos = Print(Pos, CharsToPrint, e)

If Pos < CharsToPrint Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If

End Sub

#End Region

End Class
End Namespace

Mfg, lighty

---------------------------------------------------
Schaut mal hier:
http://www.reset.ch/index.html

(die Links sind ungef?hrlich )

Ps.: F?r jeden, der wie ich, zu oft vorm Rechner sitzt

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
RitchTextBox drucken - Ansatz1.019lighty04.09.06 18:55
Re: RitchTextBox drucken - Ansatz703Moderatorralf_oop04.09.06 19:30
Re: RitchTextBox drucken - Ansatz685lighty04.09.06 19:40
Re: RitchTextBox drucken - Ansatz708lighty04.09.06 19:52
Re: RitchTextBox drucken - Ansatz737ModeratorDaveS04.09.06 20:07
Re: RitchTextBox drucken - Ansatz683lighty04.09.06 20:47
Problem beim Drucken752lighty05.09.06 12:12
Der Code hat doch gepasst781lighty05.09.06 12:13
Re: Problem beim Drucken674lighty06.09.06 09:19

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel