Rubrik: Grafik und Font · Font & Text | VB-Versionen: VB4, VB5, VB6 | 15.07.03 |
Text im Blocksatz ausgeben Eine Funktion, um Texte im Blocksatz auszugeben | ||
Autor: E7 | Bewertung: | Views: 15.292 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Um Text im Blocksatz auszugeben, benötigen Sie lediglich eine Picturebox und diesen Tipp:
Option Explicit Private Const LongText As String = "Dies ist ein sinn- und " & _ "einfallsloser, aber ellenlanger Text mit einigen Satzzeichen, " & _ "den wir zur Anzeige in der Picturebox benötigen. Ohne solche " & _ "langen Sätze wäre es nicht möglich, den sogenannten BLOCKSATZ-" & _ "EFFEKT zu sehen. Dieser Blocksatzeffekt soll den Text genau aus" & _ "richten. Dazu wird der Zwischenraum der einzelnen Wörter einfach" & _ " vergrößert. Allmählich sollte es mit Text reichen; allerdings " & _ "ist das Ergebnis noch immer so kurz und eindruckslos."
Private Sub Form_Load() ' Wichtig! Picture1.AutoRedraw = True End Sub
Private Sub Form_Resize() If Me.WindowState <> vbMinimized Then ' PictureBox positionieren With Picture1 .Left = 0 .Top = 0 .Width = Me.ScaleWidth .Height = Me.ScaleHeight .Cls End With ' Text im Blocksatz ausgeben PrintBlocksatz Picture1, LongText End If End Sub
' beliebigen Text im Blocksatz auf einer ' PictureBox ausgeben (oder auch Drucker) Private Sub PrintBlocksatz(PicBox As Object, _ ByVal OutputText As String, _ Optional ByVal LeftMargin As Long = 80, _ Optional ByVal RightMargin As Long = 80, _ Optional ByVal TopMargin As Long = 80) Dim S As String Dim AP As Long Dim T As String Dim L As Long Dim V As Variant Dim O As String Dim N As Long Dim C As Long Dim aSM As Long With PicBox aSM = .ScaleMode .ScaleMode = vbTwips S = OutputText AP = TopMargin Do While Len(S) > 0 Do While Len(S) > 0 If InStr(1, S, " ") > 0 Then T = Left(S, InStr(1, S, " ") - 1) Else T = S End If If .TextWidth(O & " " & T) > .ScaleWidth - _ LeftMargin - RightMargin Then Exit Do Else If InStr(1, S, " ") > 0 Then O = O & " " & T S = Mid(S, Len(T) + 2) Else O = O & " " & S S = vbNullString End If End If Loop Do C = Len(O) O = Replace(O, " ", " ") Loop While C > Len(O) O = Trim(O) V = Split(O, " ") O = Replace(O, " ", vbNullString) Do If UBound(V) = 0 And Len(S) > 0 Then O = vbNullString For C = 1 To Len(V(0)) O = O & " " & Mid(V(0), C, 1) Next C O = Trim(O) V = Split(O, " ") O = Replace(O, " ", vbNullString) ElseIf Len(S) > 0 Then N = .ScaleWidth - LeftMargin - RightMargin N = N - .TextWidth(O) N = N / UBound(V) Exit Do Else N = .TextWidth(" ") Exit Do End If Loop L = LeftMargin For C = 0 To UBound(V) .CurrentX = L .CurrentY = AP PicBox.Print V(C) L = L + .TextWidth(V(C)) + N Next C AP = AP + .TextHeight(O) O = vbNullString Loop .ScaleMode = aSM End With End Sub
Wenn Sie das Beispiel starten, wird die PictureBox ganz oben an der Form ausgerichtet und der Text erscheint dort im Blocksatz.
Fügen Sie der Form jetzt noch einen CommandButton hinzu. Beim Klick auf den Button wird der Text dann ausgedruckt - natürlich ebenfalls im Blocksatz.
Private Sub Command1_Click() ' Text im Blocksatz ausdrucken PrintBlocksatz Printer, LongText Printer.EndDoc End Sub