TextLength(WindowTitel$) ?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
sibru
Beiträge: 265
Registriert: 15.09.2004 18:11
Wohnort: hamburg

TextLength(WindowTitel$) ?

Beitrag 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
Bild Bild
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: TextLength(WindowTitel$) ?

Beitrag 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
a²+b²=mc²
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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. Bild
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Fluid Byte hat geschrieben:PS: Ein WaitWindowEvent() wäre echt dufte. Bild
und das mir! :oops: :lol:

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag 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
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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
Zuletzt geändert von Fluid Byte am 16.01.2008 19:29, insgesamt 1-mal geändert.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

saubär :)
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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.
Windows 10 Pro, 64-Bit / Outtakes | Derek
sibru
Beiträge: 265
Registriert: 15.09.2004 18:11
Wohnort: hamburg

Beitrag von sibru »

wouw...
sieht ja toll aus!
Und so nebenbei steckt da auch noch das Handling anderer
SystemElemente-Font´s mit drin !!! :allright:

Danke...
Bild Bild
Antworten