Seite 1 von 1
TextLength(WindowTitel$) ?
Verfasst: 16.01.2008 14:10
von sibru
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
Re: TextLength(WindowTitel$) ?
Verfasst: 16.01.2008 14:44
von Kiffi
API kann ich nicht anbieten, aber vielleicht funktioniert ja folgendes bei
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
Verfasst: 16.01.2008 15:31
von Fluid Byte
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.

Verfasst: 16.01.2008 15:37
von Kiffi
Fluid Byte hat geschrieben:PS: Ein WaitWindowEvent() wäre echt dufte.

und das mir!
Grüße ... Kiffi
Verfasst: 16.01.2008 16:10
von #NULL
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
Verfasst: 16.01.2008 17:44
von Fluid Byte
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
Verfasst: 16.01.2008 17:55
von #NULL
saubär

Verfasst: 16.01.2008 18:05
von Kiffi
#NULL hat geschrieben:saubär

njaa, nicht so ganz... Schon mal unter
Start -> Einstellungen ->
Systemsteuerung -> Anzeige -> Darstellung den Schriftgrad auf 'Extragroß'
gestellt? Da weicht die ermittelte Breite ziemlich von der tatsächlichen ab.
Grüße ... Kiffi
Verfasst: 16.01.2008 18:42
von Fluid Byte
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.
Verfasst: 17.01.2008 14:03
von sibru
wouw...
sieht ja toll aus!
Und so nebenbei steckt da auch noch das Handling anderer
SystemElemente-Font´s mit drin !!!
Danke...