Problem mit TextWidth

  • VB6

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Mad Andy.

    Problem mit TextWidth

    Hi,

    ich habe 2 Objekte. Eine PictureBox (picData) und ein Printer Objekt (prnObject).

    folgende Befehle liefern unterschiedliche Ergebnisse:


    MsgBox picData.TextWidth("Beispieltext")

    MsgBox prnObject.TextWidth("Beispieltext")


    Auf dem Printerobjekt benötigt der auszugebende Text immer einige mm mehr Platz als auf dem PictureBox Steuerelement. Das ist mir absolut unerklärlich. Der Text sollte doch egal wo ich ihn "drucken" möchte die gleiche Breite habe oder ???
    Ich benötigen diese Funktion um einen sauberen Zeilenumbruch (Wortgenau) zu erzeugen. Dabei soll die Druckvorschau (picData) genau so aussehen wie nachher der Druck. Momentan kann es aber dazu kommen, dass der Druck 2 Seiten hat obwohl die Vorschau nur eine Seite hat. 8o 8o 8o

    Vielleicht hat ja einer von euch eine Idee oder einen Tipp wie ich das ganze umgehen oder korrigieren kann.


    bye ...

    LaMa5.

    P.S. Der Font, die Größe und die Formatierungen sind natürlich bei beiden Objekten exakt gleich eingestellt.
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de
    Vielleicht ist die ScaleMode-Eigenschaft nicht richtig? Ansonsten, wenn die Unregelmäßigkeit ein System hat (z.B. 1 zu 1,01), einfach den Faktor ermitteln und dann immer umrechnen.
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    Hi,

    ich poste mal nen Beispiel mit dem ich eure Tipps getestet habe. Vielleicht habe ich da ja irgendwo nen Denkfehler drin.

    Private Sub Form_Load()
    Dim p As Printer
    Set p = Printer
    Me.Picture1.ScaleMode = vbMillimeters: p.ScaleMode = vbMillimeters
    Me.Picture1.Font = "Times New Roman": p.Font = "Times New Roman"
    Me.Picture1.FontSize = 12: p.FontSize = 12

    Me.Label1 = Me.Picture1.TextWidth("Beispieltext")
    Me.Label2 = p.TextWidth("Beispieltext")
    End Sub

    Für den Code wird eine PictureBox (Picture1) und zwei Label (Label1,Label2) benötigt.

    Die Scalemode Eigenschaft ist definitiv gleich!!

    Sobald eine Schriftart mit fester Zeichenbreite (Courier New) eingegeben ist funktioniert es so wie's soll. Aber wenn eine "vernünftige" Schriftart eingestellt ist, klappt das nicht mehr.
    Bisher konnte ich auch noch kein System in den Unreglmäßigkeiten feststellen 8o

    Danke für die Hilfe.

    bye ...

    LaMa5.
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de
    Ich benötigen diese Funktion um einen sauberen Zeilenumbruch (Wortgenau) zu erzeugen.

    Dann könnte dir doch auch der folgende Tipp weiterhelfen?!
    Texte oder Strings die keine Umbrüche haben drucken

    Ansonsten könntest du doch die beiden ScaleWidth-Eigenschaften ins Verhältnis setzen
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Agent“ ()

    Du könntest mal folgendes versuchen:

    Du setzt mal die Scalemode bei beiden aufs gleiche
    Dan setzt du bei beiden Scriftart 1 ein und lasst dir die differenz anzeigen
    Das machst du dann auch noch bei ein paar anderen schriftarten

    Wenn die differez immer gleich is, kommt ein fixer wert dazu bzw weg.

    Andernfalls könntest du vielleicht ein System entdecken

    Und wenn auch kein System dabei rauskommt, haben die leute von MS wieder mal sch**** gebau ;)
    Hi,

    @Mad Andy
    Schau Dir mal den Quelltext an, den ich weiter oben geschrieben habe, kopiere Ihn und setz die angegebenen Steuerelemente auf ein Formular und Du wirst sehen, dass die Differenz jedesmal unterschiedlich ist. Leider habe ich auch noch kein System erkannt.

    Im Laufe der weiteren Programmierung habe ich jedoch festgestellt, das im PictureBox Steuerelement die Millimetergenaue Ausgabe von Text teilweise nach links oder rechts verrutscht (2-3 Pixel). Daher tippe ich drauf, dass in dem Steuerelement ein kleiner Bug ist.
    Ich habe es allerdings noch nicht geschafft, ein VB6 ohne SP aufzusetzen um den Effekt dort zu testen.

    Evtl. lässt sich das auch durch Installation von SP6 lösen. Diesen Schritt wollte ich aber zuletzt einsetzen, weil ich dann alle Entwicklungsrechner updaten muss. :D


    bye ...

    LaMa5.
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de
    Tschuldigung, dass ich das nich mitbekommen hab...
    (Das mim Quelltext)


    du könntest versuchen dir mit APIs eine eigene PictureBox zu bauen ^^

    viel spaß dabei!


    Naja... mir fällt auch keine Lösung ein...
    Du könntest dich ja mal an MS wenden ;)
    das führt zwar sicher auch zu nichts aber bei word funzts ja auch