Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Textbreite mit GetTextExtentPoint bestimmen

Forumthread: Textbreite mit GetTextExtentPoint bestimmen

Textbreite mit GetTextExtentPoint bestimmen
Andreas
Hallo,
ich habe per Suchmaschine eine Funktion gefunden, mit der es möglich ist, die Breite eines Strings zu bestimmen:

Private Type SIZE
cx As Long
cy As Long
End Type
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPointA" (ByVal  _
hDC As Long, ByVal lpszStr As String, ByVal cchString As Long, lpSize As SIZE) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long
Public Function GetTxtPxLen(ByVal sTxt As String) As Long
Dim hWnd As Long
Dim hDC As Long
Dim sz As SIZE
hWnd = GetForegroundWindow()
If hWnd Then
hDC = GetDC(hWnd)
If hDC Then
GetTextExtentPoint32 hDC, sTxt, Len(sTxt), sz
ReleaseDC hWnd, hDC
GetTxtPxLen = sz.cx
End If
End If
End Function
Ich wüsste nun sehr gern, welcher Font von Funktion GetTextExtentPoint32 bei der Berechnung zugrunde gelegt wird. Ich konnte hierzu nur folgende Information finden:
The GetTextExtentPoint32 function uses the currently selected font to compute the dimensions of the string.
Kann mir jemand verraten, wie ich mir den "currently selected font" anzeigen lassen kann? Optimal wäre es, wenn ich ihn auch noch verändern könnte.
Grüße
A.M.
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Textbreite mit GetTextExtentPoint bestimmen
28.05.2012 18:10:43
Reinhard
Hallo Andreas,
soweit ich zu wissen glaube sind z.B. die Zahlwerte bei der Spaltenbreite abhängig
von der Schriftart die in der Systemsteuerung festgelegt ist. Da von der Breite der 0.
Vielleicht spielt das hier auch eine Rolle, k.A.
Wie man die Standardschriftart per Vba ändern kann müßte im Archiv zu finden sein.
Frage noch offen.
Gruß
Reinhard
Anzeige
AW: Textbreite mit GetTextExtentPoint bestimmen
28.05.2012 18:24:48
Andreas
Hallo Reinhard,
danke für Deine Antwort! Es handelt sich aber vermutlich nicht um den Standardfont von Excel, sondern um eine Windows-Einstellung. Vielleicht meldet sich ja noch ein API-Spezialist, der weiss, wie man die abfragen kann.
Gruß
Andreas
AW: Textbreite mit GetTextExtentPoint bestimmen
28.05.2012 18:30:53
Reinhard
Hallo Andreas,
Excel bezieht sich auf den Standardfont von Windows bei Spaltenbreiten.
Excels Standardfont für Zellen ist etwas anderes.
Den meinte ich nicht.
Gruß
Reinhard
Anzeige
AW: Textbreite mit GetTextExtentPoint bestimmen
28.05.2012 18:41:15
Andreas
Hallo Reinhard,
vielleicht hilft mir das dann doch ein wenig weiter. An den Excel-Einstellungen habe ich nämlich bereits herumgespielt, ohne dass sich das Ergebnis der Funktion bei einem Teststring geändert hätte. Weisst Du vielleicht, wo sich der Standardfont bei Win7 versteckt? Kann man den über einen Menüpunkt ändern oder läuft das nur über die Registry (wo ich vor Stunden etwas von "Tahoma" in mir unklaren Zusammenhängen gefunden habe)?
Gruß
Andreas
Anzeige
AW: Textbreite mit GetTextExtentPoint bestimmen
28.05.2012 18:54:05
Reinhard
Hallo Andreas,
wie du den Win-Standardfont manuell abändern kannst, auch Einstellungen für Dezimaltrenner, Punkt oder Komma, weiß ich, geht über Systemsteuerung.
Mit Vba kann man das auch, deshalb empfahl ich dir die Archivsuche.
Möglich daß in der Lsg API benutzt wird, kann aber auch gut sein daß da steht:
CreateObject(...)
Dafür hat Excel keinen Menupunkt. Wird wohl in User.dat oder/und system.dat stehen, also den beiden
Dateien die man als Registry bezeichnet/kennt.
Für Registry abänderungen müßte es auch Code im Archiv geben.
Gruß
Reinhard
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Textbreite mit GetTextExtentPoint bestimmen


Schritt-für-Schritt-Anleitung

Um die Breite eines Strings in Excel mit der Funktion GetTextExtentPoint32 zu bestimmen, kannst du den folgenden VBA-Code verwenden:

Private Type SIZE
    cx As Long
    cy As Long
End Type

Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPointA" (ByVal hDC As Long, ByVal lpszStr As String, ByVal cchString As Long, lpSize As SIZE) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long

Public Function GetTxtPxLen(ByVal sTxt As String) As Long
    Dim hWnd As Long
    Dim hDC As Long
    Dim sz As SIZE
    hWnd = GetForegroundWindow()
    If hWnd Then
        hDC = GetDC(hWnd)
        If hDC Then
            GetTextExtentPoint32 hDC, sTxt, Len(sTxt), sz
            ReleaseDC hWnd, hDC
            GetTxtPxLen = sz.cx
        End If
    End If
End Function

Um die von GetTextExtentPoint32 verwendete Schriftart anzuzeigen oder zu ändern, musst du die Windows-Systemsteuerung aufrufen. Der Standardfont ist dort festgelegt und kann je nach Windows-Version unterschiedlich sein.


Häufige Fehler und Lösungen

Fehler 1: Falsche Schriftart wird verwendet

  • Lösung: Stelle sicher, dass die Schriftart in der Systemsteuerung korrekt eingestellt ist. Die Funktion GetTextExtentPoint32 verwendet die aktuell gewählte Schriftart.

Fehler 2: Funktion gibt unerwartete Ergebnisse zurück

  • Lösung: Überprüfe, ob die Fenster, in denen du die Funktion aufrufst, korrekt sind. Verwende GetForegroundWindow, um sicherzustellen, dass du das richtige Fenster ansprichst.

Alternative Methoden

Wenn du nicht mit GetTextExtentPoint32 arbeiten möchtest, gibt es auch andere Methoden, um die Breite eines Textes in Excel zu bestimmen. Eine Möglichkeit ist die Verwendung der LEN-Funktion in Kombination mit der Schriftgröße, die du in der Tabelle eingestellt hast. Allerdings ist dies weniger präzise als die Verwendung der API-Funktion.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du die Breite eines Textes in Excel mit der Funktion GetTxtPxLen nutzen kannst:

Sub Beispiel()
    Dim txt As String
    txt = "Hallo Welt"
    MsgBox "Die Breite des Textes '" & txt & "' beträgt: " & GetTxtPxLen(txt) & " Pixel."
End Sub

Dieses Makro zeigt dir die Breite des Strings "Hallo Welt" in Pixeln an, basierend auf der aktuell eingestellten Schriftart.


Tipps für Profis

  • Schriftarten testen: Experimentiere mit verschiedenen Schriftarten und -größen in der Systemsteuerung, um ein besseres Verständnis für die Auswirkungen auf die Textbreite zu bekommen.

  • API-Dokumentation: Informiere dich über die Windows API zu GetTextExtentPoint32, um weitere nützliche Funktionen zu entdecken, die du in deinen VBA-Projekten verwenden kannst.


FAQ: Häufige Fragen

1. Wie kann ich die aktuell verwendete Schriftart in Excel ermitteln? Um die aktuell verwendete Schriftart zu ermitteln, musst du die Windows-Systemeinstellungen überprüfen. Excel selbst bietet keine direkte Möglichkeit, die Systemschriftart über VBA zu ändern oder anzuzeigen.

2. Gibt es eine Möglichkeit, GetTextExtentPoint32 in einer nicht-englischen Excel-Version zu verwenden? Ja, die Funktion GetTextExtentPoint32 ist unabhängig von der Sprache der Excel-Version. Beachte jedoch, dass der Text, den du übergibst, in der entsprechenden Sprache sein sollte, um die richtige Breite zu ermitteln.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige