Home
Page
About
ToolBook
ToolBook
Tips
ToolBook
Projects
ToolBook
Links
Guest
Book


How to get size of text in pixels
-- Function GetTextWidth returns size of text in pixels.
-- You can specify font face, size and style and get size of text.

to handle buttonClick
	myText = "Text to be justified in this test."
	myFace = "Arial"
	mySize = 10
	myBold = 1
	myItalic = 0
	myWidth = GetTextWidth(myText, myFace, mySize, myBold, myItalic)
	request myWidth
end


to get GetTextWidth myText, myFace, mySize, myBold, myItalic
	-- myText - Text
	-- myFace - Font Face
	-- (If such font doesn't exists function uses device-dependent typeface and returns some unexpectable value).
	-- mySize - Font Size
	-- myBold - Bold if nonzero
	-- myItalic - Italic if nonzero
	local hdc
	local myFont
	linkDLL "GDI"
        word createFont(int,int,int,int,int,byte,byte,byte,byte,byte,byte,byte,byte,pointer)
        word SelectObject(word, word)
        dword GetTextExtent(word, pointer, int)
		int SetMapMode(word, int)
		int GetMapMode(word)
		int GetDeviceCaps(word, int)
	end
	linkDLL "KERNEL"
		WORD 	GlobalAlloc(WORD,DWORD)
		WORD 	GlobalFree(WORD)
		WORD 	GlobalHandle(WORD)
		POINTER GlobalLock(WORD)	
		WORD 	GlobalUnlock(WORD)
		WORD    GetWindowsDirectory(POINTER,INT)
	    DWORD 	getWinFlags()
	end
	
	linkDLL "USER"
		word getDC(word)
	end

	LOGPIXELSX = 88
	MM_TEXT = 1	
	
	myFont = getWinPointer(128)
	get pointerString(0,myFont,myFace)
	
	hdc = getDC(0)
	MapModePrevious = GetMapMode(hdc);
	MapModeNew = SetMapMode(hdc, MM_TEXT);
	if myBold <> 0
		myStyle = 700
	else
		myStyle = 400
	end if
    
	myHeight = round(mySize * GetDeviceCaps(hdc, LOGPIXELSX) div 72)
    
	hfont = CreateFont(-myHeight, 0, 0, 0, myStyle, myItalic, 0, 0, 0, 0, 0, 0, 0, myFont)
	hfontOld = SelectObject(hdc, hfont)
	myTextPTR = getWinPointer(128)
	get pointerString(0, myTextPTR, myText)
	dwExtent = GetTextExtent(hdc, myTextPTR, charCount(myText))
	wTextWidth = dwExtent bitShiftLeft 16 bitShiftRight 16
	MapModeNew = SetMapMode(hdc, MapModePrevious);

	get freeWinPointer(myFont)
	get freeWinPointer(myTextPTR)

	return wTextWidth
end

to get getWinPointer nSize	
	local word hMem
	local retValue
	hMem = GlobalAlloc(66,nSize)
	return GlobalLock(hMem)
end

to get freeWinPointer pMem
	local word hMem, retValue
	sysSuspend = false
	hMem = GlobalHandle(item 1 of pMem)
	retValue = GlobalUnlock(hMem)
	sysSuspend = true
	return GlobalFree(hMem)
end

Back to Tips Menu