Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Breite von Zeichen [erledigt]

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 05.08.2009, 20:18    Titel: Breite von Zeichen [erledigt] Antworten mit Zitat

Wie bekomme ich unter Windows die Breite eines String-Zeichens?
Je nachdem die Breite eines Zeichens an einer bestimmten Position (dieses Zeichen müßte also auch erstmal nach Position ermittelt werden) oder die Breite des letzten eingegebenen Zeichens.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.


Zuletzt bearbeitet von Elektronix am 08.08.2009, 22:54, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 05.08.2009, 21:46    Titel: Antworten mit Zitat

Die Breite eines Zeichen in Pixeln erfährst du (glaub ich) mit der Funktion "GetCharWidth32" (noch nie selbst verwendet), mit "GetTextExtentPoint32" kannst du die Breite eines Strings ermitteln.

Weiteres dazu:
http://msdn.microsoft.com/en-us/library/dd144862(VS.85).aspx
http://msdn.microsoft.com/en-us/library/dd144938(VS.85).aspx
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 06.08.2009, 18:52    Titel: Antworten mit Zitat

GetTextExtentPoint32 habe ich versucht. Da bekomme ich für Size.cx (Breite) immer nur 1 heraus. Für die Höhe immer nur 0, obwohl nachweislich ein String übergeben wurde. geschockt verwundert

Andere Frage: Gibt es eine Möglichkeit, ein Zeichen an einer beliebigen Position im Fenster herauszufinden, oder muß man das immer über den Textpuffer machen? In Windows gibt es ja keinen Bildschirmspeicher.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 06.08.2009, 21:30    Titel: Antworten mit Zitat

Elektronix hat Folgendes geschrieben:
GetTextExtentPoint32 habe ich versucht. Da bekomme ich für Size.cx (Breite) immer nur 1 heraus. Für die Höhe immer nur 0, obwohl nachweislich ein String übergeben wurde. geschockt verwundert


Vielleicht hilft dir ein kleines Beispiel zur Verwendung der Funktion:
Code:
#include "windows.bi"

dim DC as HDC
dim cDC as HDC
dim hfTmp as HFONT
dim Text as String
dim sz as SIZE

Text = "Hallo QB&FB-Forum!"

DC = GetDC(0)
cDC = CreateCompatibleDC(DC)
ReleaseDC(0, DC)
hfTmp = SelectObject(cDC, GetStockObject(DEFAULT_GUI_FONT))
GetTextExtentPoint32(cDC, StrPtr(Text), len(Text), @sz)
SelectObject(cDC, hfTmp)
DeleteDC(cDC)

Text = !"Der Text \"" + Text + !"\" hat folgende Abmaße:\nX-Abmaß: "+str(sz.cx)+!"\nY-Abmaß: "+str(sz.cy)
MessageBox(0, Text, "Textabmaße", MB_OK)


Elektronix hat Folgendes geschrieben:
Andere Frage: Gibt es eine Möglichkeit, ein Zeichen an einer beliebigen Position im Fenster herauszufinden, oder muß man das immer über den Textpuffer machen? In Windows gibt es ja keinen Bildschirmspeicher.


Ich glaube nicht, dass das möglich ist - die Zeichen werden ja auf den Bildschirm "gemalt" und nicht wie unter SCREEN 0 in DOS 8x16-Pixel-Blöcke mit der dem im Bildschirmspeicher abgelegten ASCII Code entsprechenden Grafik dargestellt werden.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 07.08.2009, 08:53    Titel: Antworten mit Zitat

Ok, soweit klar. Ich bekomme vernünftige Werte, wenn ich mit GetTextExtentPoint eine String-Zeile abfrage.
Ich habe versucht, nur einen einzelnen Buchstaben abzufragen, da kommt immer nur 1 heraus. Wieso das?
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 07.08.2009, 14:53    Titel: Antworten mit Zitat

Code:
#INCLUDE "windows.bi"

DIM DC AS HDC
DIM cDC AS HDC
DIM hfTmp AS HFONT
DIM Text AS STRING
DIM Zeichen as String*1
DIM ZBreite as Integer
DIM sz AS SIZE

Text = "A"       '"Hallo QB&FB-Forum!"
Zeichen = "A"

DC = GetDC(0)
cDC = CreateCompatibleDC(DC)
ReleaseDC(0, DC)
hfTmp = SelectObject(cDC, GetStockObject(DEFAULT_GUI_FONT))
GetTextExtentPoint32(cDC, STRPTR(Text), LEN(Text), @sz)
GetCharWidth32(cDC, asc(Zeichen), asc(Zeichen), @ZBreite)
SelectObject(cDC, hfTmp)
DeleteDC(cDC)

Text = !"Der Text \"" + Text + !"\" hat folgende Abmaße:\nX-Abmaß: "+STR(sz.cx)+!"\nY-Abmaß: "+STR(sz.cy)+!"\n\nDas Zeichen \"" + Zeichen + !"\" hat folgende Breite: " + str(ZBreite) + " Pixel"
MessageBox(0, Text, "Textabmaße", MB_OK)


Also bei mir funktioniert die Berechnung der Breite eines einzelnen Zeichens sowohl mit GetCharWidth32 als auch mit GetTextExtentPoint32.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 08.08.2009, 22:56    Titel: Antworten mit Zitat

Hab den Fehler gefunden Yahooo!!!! : Ich hatte veressen, für die Abfrage der Textmaße einen DC anzufordern. verlegen mit dem Kopf durch die Mauer wollen

Trotzdem danke für alle Antworten. happy
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz