PDA

Vollständige Version anzeigen : Berechnungen von effektiven Texthöhen und Breiten in Berichten


WeinGeist
16.05.2009, 16:50
Hallo Forum-Leute,

Manchmal würde man gerne herausfinden wie Hoch und Breit ein Text effektiv auf dem Ausdruck ist. Zum Beispiel im Voraus in Abfragen um anschliessend Formatierungen in einem Bericht händisch vorzunehmen. Normalerweise kann man dies nur mit Richtwerten ungefähr berechnen.

Dazu muss man Grösse, Schriftart und die Formatierung wie Fett und Kursiv berücksichtigen. Dies geht leider nur sehr mühsam in VBA --> Mithilfe des ReportObjekts.

Anbei eine kleine DLL welche diese Funktionalität bietet.
Diese muss vor der Verwendung in Windows registriert werden.
Die Beispieldatei geht vom Ordner Windows\System32 aus.

Unter Start>Ausführen: "regsvr32 C:\%WINDIR%\System32\TextSizeCalc.dll"

Es liegt auch eine Beispieldatenbank bei welche die verschiedenen Funktionen zeigt.

Aktueller Umfang:

'############################################################################### #########
'# Proceduren für die Berechnung von versch. Textgrössen
'# --------------------------------------------------------------------------------------
'# Ermittelung von effektiven Höhen- und Breitenangaben von Text unter Berücksichtigung
'# von Schriftart, Formatierung, Zeilenvorschüben.
'# Für die Berechnung von Höhe und Anzahl Zeilen kann man einen Limiter für die Breite
'# angeben werden.
'#
'# - Bei Höhen-/Linienberechnungen wird ohne die Angabe des Limiters
'# von den Zeilenschüben innerhalb des Strings ausgegangen bei einer belieb langen Breite.
'# - Bei Angabe eines Limiters werden die zusätzlich benötigten Zeilenschübe dazugezählt.
'# - Wörter die breiter sind als der Limiter werden folgendermassen gezählt:
'# LimiterBreite / Wortlänge = AnzLines (aufgerundet)
'#
'############################################################################### #########
'# Übliche Verwendung
'# --------------------------------------------------------------------------------------
'# GetTextSize Liefert Höhe/Breite eines Textes
'# GetTextWidth Liefert Breite eines Textes
'# GetTextHeight Höhe eines Textes
'# GetTextAnzLines Liefert die Anzahl Linien des Textes
'# WordLenCheck Überprüft ob ein Wort eines Textes länger als der Limiter ist (True = Breite überschritten)
'# MaxWordLen Gibt die Länge des längsten Wortes eines Textes zurück.
'#
'############################################################################### #########
'# Direkte Verwendung mit Eigenschaften eines Controls
'# --------------------------------------------------------------------------------------
'# GetTextWidthControl Liefert Breite eines Textes innerhalb eines TextControls
'# GetTextHeightControl Höhe eines Textes innerhalb eines TextControls
'# GetTextAnzLinesControl Liefert die Anzahl Liniene eines Textes innerhalb eines TextControls
'# MaxWordLenControl Liefert Länge des längsten Wortes
'# WordLenCheckControl Gibt an ob ein Wort in diesem Control zu lang für das control ist.
'#
'############################################################################### #########


Für Tipps, Anregungen, Bugs, Erweiterungen bin ich natürlich wie immer empfänglich. ;)

Ein bisschen Hintergrundinfos: Es wird mit dem PrinterObjekt von VB6 gearbeitet. Wer helfen möchte, die Performance zu verbessern bekommt je nach dem auch den SourceCode dazu.

Viel Spass damit! :)