[comp.sys.mac.hypercard] FIX FOR DUELING SCROLL FIELDS

mitch@well.UUCP (Mitchell Waite) (03/13/88)

In message <220100007@uxe.cso.uiuc.edu> Leonard Rosenthol writes"


>
***  BUG IN DUEL SCROLLING STACK **

Here at the University of Illinois we have a group that meets once a 
week to discuss Hypercard and the Mac in general.  At todays meeting we were
looking at the Dueling Scroll Stack (mentioned in the previous message) and
we discovered A MAJOR FLAW in the stack.  If the only way the user moves about
the text in the scrolling fields is by the scroll bar then there is no problem
HOWEVER if you use the FIND Command, the field containing the found text will
automatically scrolled by Hypercard BUT the other field won't!  I don't know 
if there are fix for this problem but thought I would pass it on for
anyone else who may be doing something similar.
>

Thanks to the University of Illinois for finding the find bug in Dueling
Scroll Fields. We researhed this and came up with a nifty fix, that 
completely eliminates the problem. Insert the following script into the
card layer:

-- Dueling Scroll Field  "Find" Fix
-- 3/12/88
-- Mitch Waite and Ted Jones
-- From: Tricks of the HyperTalk Masters

-- This script is a fix to the dueling scroll fields bug. If you did a
-- find "theString" on the stack it would not properly scroll both fields. 
-- The problem was we did not expect the user to use 'find'. Now it works.
-- If you do a find "do" for example, from the message box, it will find
-- the occurences first in the left field, and scroll the right to align,
-- then find those in the right field and scroll the left to align. 
-- Note that the next repeated finds don't appear in the scroll field
-- They are taking place in the hidden "show notes" field! Eventually 
-- find will return to the left field.
-- This is normal for HyperCard's find so we leave it alone. 
-- lineCound and inc are two variables that already exist in the card
-- script.

on idle -- put this in the card script
  global lineCount, inc 
  if scroll of card field "left" = scroll of card field "right" then
    exit idle
  end if
  if trunc( scroll of card field "left" / inc) is lineCount then
    set scroll of card field "left" to scroll of card field "right"
  else
    set scroll of card field "right" to scroll of card field "left"
  end if
  put trunc( scroll of card field "left" / inc) into lineCount
end idle

Mitchell Waite