Vertically aligning text in a field

Eric Corbett eric at canelasoftware.com
Fri Dec 19 14:38:59 EST 2014


This is great!

Just change text to formattedText for this line:

> put the number of lines of the text of myFld into tNoOfLines

See below

- Eric

On Dec 19, 2014, at 9:32 AM, BNig <bernd.niggemann at uni-wh.de> wrote:

> here is a definitive (as opposed to infinitive) calculation that correctly
> sets the positon of text vertically in a field
> 
> for testing purposes it is ready to be put into a slider
> 
> optionally make three graphics to get visual feedback, see below
> 
> watch out for line breaks
> -------------------------------------------------------------------------------------------------------
> -- optionally have visual feedback
> -- make 3 horizontal line graphics, "gTop", "gBot", "gCenter"
> -- place them near the field
> 
> on scrollbarDrag pValue -- tested with values 9 to 36
>   lock screen
>   put the long id of fld "fTest" into myFld -- change to name of your field
> 
>   set the textSize of myFld to pValue
> 
>   CenterTextVertically myFld
> 
>   if there is a grc "gTop" AND there is a grc "gBot" AND there is a grc
> "gCenter" then
>      getFeedBack myFld
>   end if
> 
> end scrollbarDrag
> 
> on CenterTextVertically myFld
>   put the effective textHeight of myFld into tTextHeight
>   put item 2 of the loc of myFld into tfieldY
> 
>   put the formattedRect of line 1 to - 1 of myFld into tFormatRect
>   put item 2 of tFormatRect into tCurrFormatTop
>   put tfieldY - tCurrFormatTop into tCenterField_To_TopTextDiff
> 
>   put the number of lines of the text of myFld into tNoOfLines

put the number of lines of the formattedText of myFld into tNoOfLines

>   put (((tNoOfLInes div 2)) * tTextHeight) + (tNoOfLInes mod 2) *
> (tTextHeight div 2) into tOffset
> 
>   set the topMargin of myFld to the topMargin of myFld +
> tCenterField_To_TopTextDiff - tOffset
> end CenterTextVertically
> 
> on getFeedBack myFld
>   put the formattedRect of char 1 to - 1 of myFld into tFormatRect
>   put item 2 of the loc of myFld into tfieldY
>   set the top of grc "gTop" to item 2 of tFormatRect - 1
>   set the top of grc "gBot" to item 4 of tFormatRect - 1
>   set the top of grc "gCenter" to tFieldY - 1
> end getFeedBack
> -------------------------------------------------------------------------------------------------------
> 
> Did the code "you came across" not do what you wanted?
> 
> Kind regards
> Bernd
> 
> 
> 
> Terence Heaford wrote
>> Is there a definitive calculation that correctly sets the position of text
>> vertically in a field?
>> 
>> I am using LC 6.7.
>> 
>> I have come across a few ideas like the one below that all appear to use
>> an arbitrary offset to the margins, is there a method to calculate this
>> accurately?
>> 
>>   put the effective textSize of fld id tID into tTextSize
>>   --   put round (((tTextSize - 22) * 1/3)) into tOffset
>>   put round (((tTextSize - 24) * 1/3)) into tOffset
>>   put the formattedheight of char 1 to - 1 of fld id tID into
>> tFormattedHeight
>>   put round((the height of fld id tID - tFormattedHeight) / 2) into
>> tVerticalMargins
>>   put tVerticalMargins - tOffset into tTopMargin
>>   put tVerticalMargins + tOffset into tBottomMargin
>>   set the margins of fld id tID to 8,tTopMargin,8,tBottomMargin
>> 
>> All the best
>> Terry
> 
> 
> 
> 
> 
> --
> View this message in context: http://runtime-revolution.278305.n4.nabble.com/Vertically-aligning-text-in-a-field-tp4686824p4686954.html
> Sent from the Revolution - User mailing list archive at Nabble.com.
> 
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode




More information about the use-livecode mailing list