TextLength(WindowTitel$) ?
TextLength(WindowTitel$) ?
Hallo,
hat jemand ´ne Ahnung, wie ich die aktuelle Länge [Pixel] des
aktuellen Fenster-Textes rauskriege ?
(such ´ne API, nicht PB4.x...)
Gruss Siggi
hat jemand ´ne Ahnung, wie ich die aktuelle Länge [Pixel] des
aktuellen Fenster-Textes rauskriege ?
(such ´ne API, nicht PB4.x...)
Gruss Siggi


Re: TextLength(WindowTitel$) ?
API kann ich nicht anbieten, aber vielleicht funktioniert ja folgendes bei
Deiner antiquierten PB-Version:
Grüße ... Kiffi
Deiner antiquierten PB-Version:
Code: Alles auswählen
#myWindow = 0
If OpenWindow(#myWindow, #PB_Ignore, #PB_Ignore, 100, 100, "123123123")
StartDrawing(WindowOutput(#myWindow))
myWidth = TextWidth(GetWindowTitle(#myWindow))
myHeight = TextHeight(GetWindowTitle(#myWindow))
StopDrawing()
Debug myWidth
Debug myHeight
Repeat
Until Event = #PB_Event_CloseWindow
EndIf
Grüße ... Kiffi
a²+b²=mc²
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
So einfach ist es leider nicht Kiffi. Die Größenangaben die da rauskommen beziehen auf den Standardfont "System". Du musst den verwendeten Systemfont und Schriftgröße erst ermitteln und dann mit DrawingFont() setzen. Ich schraub grad mal was zusammen...
PS: Ein WaitWindowEvent() wäre echt dufte.
PS: Ein WaitWindowEvent() wäre echt dufte.

Windows 10 Pro, 64-Bit / Outtakes | Derek
gab's schonmal was zu (mehr oder weniger ungelöst): http://www.purebasic.fr/german/viewtopic.php?t=14366
der richtige font blieb das problem
der richtige font blieb das problem
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
So gehts:
Code: Alles auswählen
Enumeration
#SF_CAPTION
#SF_ICON
#SF_MENU
#SF_MESSAGE
#SF_SMCAPTION
#SF_STATUS
EndEnumeration
Procedure GetSystemFont(nIndex)
Protected phkResult, lpValueName.s, lpcbData, *lplf.LOGFONT, hLibGDI, Result
Select nIndex
Case #SF_CAPTION : lpValueName = "CaptionFont"
Case #SF_ICON : lpValueName = "IconFont"
Case #SF_MENU : lpValueName = "MenuFont"
Case #SF_MESSAGE : lpValueName = "MessageFont"
Case #SF_SMCAPTION : lpValueName = "SmCaptionFont"
Case #SF_STATUS : lpValueName = "StatusFont"
EndSelect
RegOpenKeyEx_(#HKEY_CURRENT_USER,"Control Panel\Desktop\WindowMetrics",0,#KEY_READ,@phkResult)
RegQueryValueEx_(phkResult,lpValueName,0,0,0,@lpcbData)
*lplf = AllocateMemory(lpcbData)
RegQueryValueEx_(phkResult,lpValueName,0,0,*lplf,@lpcbData)
RegCloseKey_(phkResult)
hLibGDI = OpenLibrary(#PB_Any,"Gdi32.dll")
Result = CallFunction(hLibGDI,"CreateFontIndirectW",*lplf)
CloseLibrary(hLibGDI)
FreeMemory(*lplf)
ProcedureReturn Result
EndProcedure
OpenWindow(0,0,0,320,240,"untitled window",#WS_CAPTION | #WS_SYSMENU | 1)
hFntCaption = GetSystemFont(#SF_CAPTION)
Caption$ = GetWindowTitle(0)
StartDrawing(WindowOutput(0))
DrawingFont(hFntCaption)
Box(10,10,200,100,#Red)
DrawText(20,20,Caption$)
Debug TextWidth(Caption$)
Debug TextHeight(Caption$)
StopDrawing()
DeleteObject_(hFntCaption)
While WaitWindowEvent() ! 16 : Wend
Zuletzt geändert von Fluid Byte am 16.01.2008 19:29, insgesamt 1-mal geändert.
Windows 10 Pro, 64-Bit / Outtakes | Derek
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Kann ich nicht bestätigen. Wie hast du es denn nachgemessen?
[edit]
Unicode war aktiviert beim kompilieren. Das scheint die Ursache zu sein.
[edit2]
Der Font muss immer mit der Unicode-Varinate von CreateFontIndirect_() erstellt werden. Hab den Code entsprechend aktualisiert.
[edit]
Unicode war aktiviert beim kompilieren. Das scheint die Ursache zu sein.
[edit2]
Der Font muss immer mit der Unicode-Varinate von CreateFontIndirect_() erstellt werden. Hab den Code entsprechend aktualisiert.
Windows 10 Pro, 64-Bit / Outtakes | Derek