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