 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 05.08.2009, 20:18 Titel: Breite von Zeichen [erledigt] |
|
|
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 |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 06.08.2009, 18:52 Titel: |
|
|
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.
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 |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 06.08.2009, 21:30 Titel: |
|
|
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. |
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 |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 07.08.2009, 08:53 Titel: |
|
|
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 |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 07.08.2009, 14:53 Titel: |
|
|
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 |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 08.08.2009, 22:56 Titel: |
|
|
Hab den Fehler gefunden : Ich hatte veressen, für die Abfrage der Textmaße einen DC anzufordern.
Trotzdem danke für alle Antworten.  _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
|
|
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.
|
|