problem with scrolling fields
Wouter
wouter.abraham at pi.be
Sun Nov 30 09:45:40 EST 2003
Hi all,
Rereading the "iTunes-type alternate colored lines in scrolling list
field" thread form early march 2003 and by experimenting
with it, I had to conclude the following (please correct me if I am
wrong):
The problem is caused by scroll increments which are not equal to the
value of the lineInc of the scrollbar due to:
- use of the mouse scrollwheel
- dragging the scrollThumb
- clicking in the area between the thumb and the arrows
- the last increment when using the arrows on the scrollbar.
All this is accentuated when the height of a scrolling field is not
conform to the following ratio:
effective textheight * the number of lines visible in the field +
margin
To see increments at work, try the following handler in the script of a
height adjusted and a not height adjusted scrolling field:
on scrollbardrag x
put (the number of lines in me - (the height of me div the effective
textheight of me)) * (the effective textheight of me) into maxscroll
put x && x mod (the effective textheight of me) && maxscroll
end scrollbardrag
When the font of a scrolling field is set, its lineInc value is
automatically set to the effective textheight of the field.
But its pageInc value is not always set to an adjusted value. (If the
possibility of changing the properties of a scrollbar of a scrolling
field is implemented and someone knows how to set these then please
share the knowledge.)
A workaround for me in the meantime are the following handlers,
sometimes combined with the use of a separate scrollbar (in which all
the properties can be reached) :
on scrollBarDrag x
set the scroll of fld <fieldname> to x - (x mod the effective
textheight of fld <fieldname>)
end scrollBarDrag
on rawKeyDown x
if x = 65308 or x = 65309 then
lock screen
get the scroll of fld <fieldname>
switch x
case 65308
add the effective textheight of field <fieldname>to it
break
case 65309
subtract the effective textheight of field <fieldname> from it
break
end switch
set the scroll of fld <fieldname> to it - (it mod the effective
textheight of fld <fieldname>)
unlock screen
else pass rawKeyDown
end rawKeyDown
For the purists:
on scrollBarDrag x
put (the number of lines in fld <fieldname> - (the height of fld
<fieldname> div effective textheight of fld <fieldname>)) * (effective
textheight of fld <fieldname>) into maxscroll
if x >= maxscroll then set the scroll of fld <fieldname> to maxscroll
else set the scroll of fld <fieldname> to x - (x mod the effective
textheight of fld <fieldname>)
end scrollBarDrag
on rawKeyDown x
if x = 65308 or x = 65309 then
lock screen
get the scroll of fld <fieldname>
switch x
case 65308
add the effective textheight of field <fieldname> to it
break
case 65309
subtract the effective textheight of field <fieldname> from it
break
end switch
put (the number of lines in fld <fieldname> - (the height of fld
<fieldname> div effective textheight of fld <fieldname>)) * (effective
textheight of fld <fieldname>) into maxscroll
if x >= maxscroll then set the scroll of fld <fieldname> to maxscroll
else set the scroll of fld <fieldname> to it - (it mod the
effective textheight of fld <fieldname>)
unlock screen
else pass rawKeyDown
end rawKeyDown
If the height of the scrolling field is not adjusted and the lowest
visible line in the field is only showing its upper part then one has
to add a trailing <cr> to the text in the field to be able to see the
last line completely.
So another way to make an "iTunes-type alternate colored lines in
scrolling list field" :
Make a scrollable list field.
Set its script to the scrollBarDrag handler.
Cover the text part with a transparent locked field to trap the
mouseclicks.
Set its script to the rawKeyDown handler.
And colorize the alternate lines of the list field by:
on mouseUp
put 0 into x
put x into a
repeat (the number of lines of fld <fieldname> div 2)
add 2 to x
put "," & x after a
end repeat
set the hilitedline of fld <fieldname> to a
end mouseUp
All this is working on Mac OS X but is not tested on other platforms by
lack of them.
Sorry for the lengthy mail.
Greetings,
WA
More information about the use-livecode
mailing list