How to scroll to a specific line number
Moderators: FourthWorld, heatherlaine, Klaus, kevinmiller
How to scroll to a specific line number
I have a scrolling field with 100+ lines of text in it. I would like to enter a line number into a separate field and have the scroll set to that particular line of the field containing. If I were looking for specific text I could use search, but since the line number I need to scroll to will vary, well here I am again.
Re: How to scroll to a specific line number
Please check this post: viewtopic.php?t=6054
Re: How to scroll to a specific line number
Make a field with many lines of text. In a button somewhere, put:
Craig
Code: Select all
on mouseUp
set the fixedLineheight of fld 1 to "true"
ask "What Line?"
set the scroll of fld 1 to it * the textheight of fld 1 - the textHeight of fld 1
end mouseUp
Re: How to scroll to a specific line number
There's a more general way to do this which works with lines without fixed height...
You can use the formattedRect property to get the rect of a line of a field in card co-ordinates as it would be if the field didn't clip the content, which you can then adjust by the top of the field and current vScroll to get a new scroll value which puts the line at the top of field:
This should work with field regardless of the height of each line, whether due to wrapping or due to styling of the text in the line.
You can use the formattedRect property to get the rect of a line of a field in card co-ordinates as it would be if the field didn't clip the content, which you can then adjust by the top of the field and current vScroll to get a new scroll value which puts the line at the top of field:
Code: Select all
/* Get the rect (in card co-ords) of the line of text. */
local tLineRect
put the formattedRect of line tLineNumber of field 1 into tLineRect
/* Get the top of the target field relative to the current scroll
* (the adjustment is necessary as the scroll affects the formatted
* rect of the lines in the obvious way). */
local tFieldTop
put the top of field 1 - the vScroll of field 1 into tFieldTop
/* The scroll is the difference between the top of the field
* and the top of the line (item 2 of the rect). */
set the vScroll of field 1 to item 2 of tLineRect - tFieldTop
Re: How to scroll to a specific line number
Make a button and a field that holds the line number you want to scroll to.
This does not need a fixed lineHeight for it to work.
Kind regards
Bernd
Code: Select all
on mouseUp
## a field that holds the line number you want to scroll to
put field "fLineNum" into tLineNum
## the field that holds your text
put the height of field "fText" into tFieldHeight
put the top of field "fText" into tFieldTop
put the topMargin of field "fText" into tTopMargin
put the vScroll of field "fText" into tvScroll
put the formattedTop of line tLineNum of field "fText" into tFormatTop
put tFormatTop - tFieldTop into tAbsDiff
put tAbsDiff + tvScroll - tTopMargin into tNewScroll
set the vScroll of field "fText" to tNewScroll
## check the correct line
select line tLineNum of field "fText"
end mouseUp
Kind regards
Bernd
Re: How to scroll to a specific line number
Heh @bn's is better - I forgot about adjusting for the top margin