Private Sub CalculationDetailRange(NewTopWhileNotFirstSite As Boolean)
Dim anzahlfelder As Integer
Call SetSql
'Anzahl felder ermitteln
Connect
RS.Open sql, CN
For Each X In RS.Fields
If Not (X.Name = "ID" Or X.Name = "Area") Then
a = Split(X, "|")
If a(8) > Area3Top And a(8) < Area4Top Then
anzahlfelder = anzahlfelder + 1
End If
End If
Next
RS.Close
'Array erstellen
ReDim felder(1 To anzahlfelder) As String
anzahl = 0
RS.Open sql, CN
For Each X In RS.Fields
a = Split(X, "|")
If Not (X.Name = "ID" Or X.Name = "Area") Then
If (a(8) > Area3Top And a(8) < Area4Top) And a(0) = "Wahr" Then
anzahl = anzahl + 1
felder(anzahl) = a(8) & "|" & a(0) & "|" & a(1) & "|" & a(2) & "|" & a(3) & "|" _
& a(4) & "|" & a(5) & "|" & a(6) & "|" & a(7) & "|" & a(9) & "|" & a(10) & _
"|" & a(11) & "|" & X.Name
End If
End If
Next
CLOSEN
'Array muss jetzt sortiert werden
QuickSort felder
'Nun, bis auf Textfeld, alle Felder im Detail-Bereich drucken (Die werden immer
' gedruckt)
For i = 1 To anzahlfelder
a = Split(felder(i), "|")
If Not a(12) = "Textfeld" Then
Printer.Font = a(5)
Printer.FontBold = a(9)
Printer.FontItalic = a(10)
Printer.FontSize = a(6)
Printer.FontUnderline = a(11)
wert = GetPrintText(a(12), a(1), a(7))
MyRect.left = (a(3) * Printer.ScaleWidth) / breite
MyRect.Right = ((a(4) * Printer.ScaleWidth) / breite) + MyRect.left
If NewTopWhileNotFirstSite = False Then
MyRect.Top = (a(0) * Printer.ScaleHeight) / höhe
Else
MyRect.Top = ((a(0) - Area2height) * Printer.ScaleHeight) / höhe
End If
'If NewTopWhileNotFirstSite = False Then
MyRect.Bottom = ((a(8) * Printer.ScaleHeight) / höhe) + MyRect.Top
'Else
'MyRect.Bottom = (((a(8) + Area2height) * Printer.ScaleHeight) / höhe)
' + MyRect.Top
'End If
Printer.Print ""
If a(2) = "0" Then
Result = DrawText(Printer.hdc, wert, Len(wert), MyRect, DT_LEFT Or _
DT_WORDBREAK)
ElseIf a(2) = "1" Then
Result = DrawText(Printer.hdc, wert, Len(wert), MyRect, DT_RIGHT Or _
DT_WORDBREAK)
Else
Result = DrawText(Printer.hdc, wert, Len(wert), MyRect, DT_CENTER _
Or DT_WORDBREAK)
End If
End If
Next
'Nun Daten für Textfeld holen
For i = 1 To anzahlfelder
a = Split(felder(i), "|")
If a(12) = "Textfeld" Then
Alignment = a(2)
Printer.Font = a(5)
Printer.FontBold = a(9)
Printer.FontItalic = a(10)
Printer.FontSize = a(6)
Printer.FontUnderline = a(11)
'wert = GetPrintText(a(12), a(1), a(7))
MyRect.left = (a(3) * Printer.ScaleWidth) / breite
MyRect.Right = ((a(4) * Printer.ScaleWidth) / breite) + MyRect.left
If NewTopWhileNotFirstSite = False Then
MyRect.Top = (a(0) * Printer.ScaleHeight) / höhe
Else
MyRect.Top = ((a(0) - Area2height) * Printer.ScaleHeight) / höhe
End If
'If NewTopWhileNotFirstSite = False Then
MyRect.Bottom = ((a(8) * Printer.ScaleHeight) / höhe) + MyRect.Top
'Else
'MyRect.Bottom = (((a(8) + Area2height) * Printer.ScaleHeight) / höhe)
' + MyRect.Top
'End If
'Printer.Print ""
MyNewRect = MyRect
MyNewText = Text
If a(2) = "0" Then
Result = DrawText(Printer.hdc, MyNewText, Len(MyNewText), _
MyNewRect, DT_LEFT Or DT_WORDBREAK Or DT_MODIFYSTRING Or _
DT_WORD_ELLIPSIS Or DT_CALCRECT)
ElseIf a(2) = "1" Then
Result = DrawText(Printer.hdc, MyNewText, Len(MyNewText), _
MyNewRect, DT_RIGHT Or DT_WORDBREAK Or DT_CALCRECT Or _
DT_MODIFYSTRING Or DT_WORD_ELLIPSIS)
Else
Result = DrawText(Printer.hdc, MyNewText, Len(MyNewText), _
MyNewRect, DT_CENTER Or DT_WORDBREAK Or DT_CALCRECT Or _
DT_MODIFYSTRING Or DT_WORD_ELLIPSIS)
End If
If MyNewRect.Bottom >= MyRect.Bottom Then
sText = Text
Set objDest = Printer
R = MyRect
'MsgBox "result holen"
Result = GetCharCountForRect
Else
'MsgBox "result ist rest vom text"
Result = Len(Text)
End If
'MsgBox Result & "-" & Len(Text)
If Len(Text) > Result Then
NewSite = "ja"
'Result = GetMaxCountWithReturn(Result)
'MsgBox Result
Else
NewSite = ""
End If
End If
Next
TextToPrint = LTrim(left(Text, Result))
RestText = LTrim(Mid(Text, Result))
Text = RestText
End Sub |