ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 24.02.2000

Diese Seite wurde zuletzt aktualisiert am 24.02.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Print nach Maß

Zurück...


Anzeige

(-hg) mailto:hg_printaligned@aboutvb.de

Mit dem Label-Steuerelement ist es kein Problem, Text horizontal ausgerichtet darzustellen. Auch die Anzeige mehrzeiliger Texte ist möglich. Eine vertikale Ausrichtung ist jedoch leider nicht möglich. Somit bleibt es Ihnen selbst überlassen, vertikal ausgerichteten Text in einer PictureBox, in einem UserControl, auf einer PropertyPage, in einem UserDocument oder auf einem Form auszugeben.


Mit der Prozedur PrintAligned können Sie Text beliebig angeordnet ausgeben

Die Hilfs-Prozedur PrintAligned übernimmt diese Aufgabe. Sie können ihr jedes Objekt übergeben, das die Eigenschaften bzw. Methoden MSDN Library - VB ScaleWidth, ScaleHeightScaleWidth, ScaleHeight, MSDN Library - VB ScaleTopScaleTop, MSDN Library - VB TextWidthTextWidth, MSDN Library - VB TextHeightTextHeight, MSDN Library - VB CurrentX, CurrentYCurrentX und CurrentY, sowie die MSDN Library - VB ClsCls- und die MSDN Library - VB PrintPrint-Methode anbietet.

Zwar gehört neben den oben angeführten Objekten auch das Printer-Objekt dazu. Da jedoch bei der Prozedur PrintAligned die Ausgabe über den gesamten "sichtbaren" Bereich erfolgt, also den Bereich, der von den Scale...-Eigenschaften beschrieben wird, wird ihre Verwendung wenig Sinn machen. Denn gegebenenfalls darüber hinausragende Textteile werden abgeschnitten bzw. erst gar nicht dargestellt, ohne dass Sie Informationen über die entfallenden Teile bekämen oder die Kontrolle darüber hätten. Die dafür notwendigen Mechanismen wären weitaus aufwändiger. Bei der Ausgabe in einem Objekt auf dem Bildschirm ist es allerdings auch nicht schön, wenn Texte abgeschnitten werden. Aber das dient in diesem Fall der Stabilität und Universalität der Prozedur und zugleich der Optimierung durch die Vermeidung unnötiger Ausgabeversuche ins Nichts hinein. Natürlich ist es am besten, Sie kontrollieren vorher, was im sichtbaren Bereich eines Objektes ausgegeben werden kann...

Sie übergeben der Prozedur PrintAligned das betreffende Ausgabe-Objekt und den auszugebenden Text als String, der gegebenenfalls Zeilenumbrüche (Zeichenfolge vbCrLf) enthalten kann, wenn der Text mehrzeilig dargestellt soll. Sollte ein Text nur einzeilig ausgegeben werden, sollten sie bereits vorher dafür sorgen, dass dieser keine Zeilenumbrüche mehr enthält.

Optional übergeben sie weiterhin einen Konstantwert aus der Enumeration pftAlignmentConstants zur Angabe der Ausrichtung - voreingestellt ist pftLetTop. Sie können ebenfalls festlegen, ob bei den einzelnen Zeilen eventuell vorhandene führende oder abschließende Leerzeichen vor der Ausgabe entfernt werden sollen.

Public Enum pftAlignmentConstants
  pftLeftTop
  pftCenterTop
  pftRightTop
  pftLeftMiddle
  pftCenterMiddle
  pftRightMiddle
  pftLeftBottom
  pftCenterBottom
  pftRightBottom
End Enum

Public Sub PrintAligned(Obj As Object, Text As String, _
 Optional ByVal Alignment As _
 pftAlignmentConstants = pftLeftTop, _
 Optional ByVal TrimLines As Boolean)

  Dim nLines As Variant
  Dim nLine As Long
  Dim nScaleWidth As Single
  Dim nTextHeight As Single
  Dim nPrintTop As Single
  Dim nPrintBottom As Single
  Dim nTop As Single
  Dim nFirst As Long
  
  If Len(Text) = 0 Then
    Exit Sub
  End If
  nLines = Split(Text, vbCrLf)
  If TrimLines Then
    For nLine = 0 To UBound(nLines)
      nLines(nLine) = Trim$(nLines(nLine))
    Next
  End If
  With Obj
    nScaleWidth = .ScaleWidth
    nTextHeight = .TextHeight(nLines(0))
    nPrintTop = .ScaleTop - nTextHeight
    nPrintBottom = .ScaleTop + .ScaleHeight + nTextHeight
    .Cls
    Select Case Alignment
      Case pftLeftTop
        For nLine = 0 To UBound(nLines)
          Obj.Print nLines(nLine)
          If .CurrentY > nPrintBottom Then
            Exit For
          End If
        Next 'nLine
      Case pftCenterTop
        For nLine = 0 To UBound(nLines)
          .CurrentX = (nScaleWidth - _
           .TextWidth(nLines(nLine))) \ 2
          Obj.Print nLines(nLine)
          If .CurrentY > nPrintBottom Then
            Exit For
          End If
        Next 'nLine
      Case pftRightTop
        For nLine = 0 To UBound(nLines)
          .CurrentX = nScaleWidth - .TextWidth(nLines(nLine))
          Obj.Print nLines(nLine)
          If .CurrentY > nPrintBottom Then
            Exit For
          End If
        Next 'nLine
      Case pftLeftMiddle
        nTop = (.ScaleHeight - (nTextHeight * _
         (UBound(nLines) + 1))) \ 2
        Do While nTop < nPrintTop
          nTop = nTop + nTextHeight
          nFirst = nFirst + 1
        Loop
        .CurrentY = nTop
        For nLine = nFirst To UBound(nLines)
          Obj.Print nLines(nLine)
          If .CurrentY > nPrintBottom Then
            Exit For
          End If
        Next 'nLine
      Case pftCenterMiddle
        nTop = (.ScaleHeight - (nTextHeight * _
         (UBound(nLines) + 1))) \ 2
        Do While nTop < nPrintTop
          nTop = nTop + nTextHeight
          nFirst = nFirst + 1
        Loop
        .CurrentY = nTop
        For nLine = nFirst To UBound(nLines)
          .CurrentX = (nScaleWidth - _
           .TextWidth(nLines(nLine))) \ 2
          Obj.Print nLines(nLine)
          If .CurrentY > nPrintBottom Then
            Exit For
          End If
        Next 'nLine
      Case pftRightMiddle
        nTop = (.ScaleHeight - (nTextHeight * _
         (UBound(nLines) + 1))) \ 2
        Do While nTop < nPrintTop
          nTop = nTop + nTextHeight
          nFirst = nFirst + 1
        Loop
        .CurrentY = nTop
        For nLine = nFirst To UBound(nLines)
          .CurrentX = nScaleWidth - .TextWidth(nLines(nLine))
          Obj.Print nLines(nLine)
          If .CurrentY > nPrintBottom Then
            Exit For
          End If
        Next 'nLine
      Case pftLeftBottom
        .CurrentY = .ScaleTop + .ScaleHeight - nTextHeight
        For nLine = UBound(nLines) To 0 Step -1
          Obj.Print nLines(nLine)
          .CurrentY = .CurrentY - 2 * nTextHeight
          If .CurrentY < nPrintTop Then
            Exit For
          End If
        Next 'nLine
      Case pftCenterBottom
        .CurrentY = .ScaleTop + .ScaleHeight - nTextHeight
        For nLine = UBound(nLines) To 0 Step -1
          .CurrentX = (nScaleWidth - _
           .TextWidth(nLines(nLine))) \ 2
          Obj.Print nLines(nLine)
          .CurrentY = .CurrentY - 2 * nTextHeight
          If .CurrentY < nPrintTop Then
            Exit For
          End If
        Next 'nLine
      Case pftRightBottom
        .CurrentY = .ScaleTop + .ScaleHeight - nTextHeight
        For nLine = UBound(nLines) To 0 Step -1
          .CurrentX = nScaleWidth - .TextWidth(nLines(nLine))
          Obj.Print nLines(nLine)
          .CurrentY = .CurrentY - 2 * nTextHeight
          If .CurrentY < nPrintTop Then
            Exit For
          End If
        Next 'nLine
    End Select
  End With
End Sub

In Visual Basic 6 steht die benötigte Funktion MSDN Library - VB SplitSplit bereits zur Verfügung. Für Visual Basic 5 verwenden Sie die in Teile-HaberschaftTeile-Haberschaft vorgestellte Funktion Split.


Beispiel-Projekt PrintAlignedTest (printaligned.zip - ca. 3,3 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikel

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer