Assuming you display the text "classical" above the head:
You could do it by displaying an interface behind the text which itself has for each possible displayed line one several button under another which have darker alpha-channel graphic to visualize your darkened area..
Then when displaying character text you could use a LUA function to hook into the startText / stoptext and run a function to display the interface at characters location.x - 1/2 width of character text ; location.y- character height - additional hight. and maybe also reposition the characters text to the same offset.
Now determning how much text gets displayed so you can trigger which buttons in the interface should be shown to display the darker area. This is difficult because you can't only count the chars in the active text and devide it by the max. amounts of characters in one line. Thats because longer words which overflow the max. line width of the font get automatically pushed in the next line and also some characters are wider than others.
So either you need some override function which adds an additional background line to the "speechbubble" for specific reasons which you have to manually call or your line-count function has to calculate the lines by checking each character in the active text and its FontLetters and FontLetterSpacing,etc from the Font Data Structure field to determine when a new line gets drawn and by that activating a new interface button graphic.
Same procedure goes for normal speach bubbles i guess.
PS: I guess in WildWildPixel they called an action for displaying manually a speechbubble in which the text fits.