I am opening Form3 from Form2. Form3 has a field and a scrollbar.
Here is the my code:
Boolean Form2Handler( EventPtr eventP)
{
Boolean handled = false;
switch (eventP->eType)
{
case ctlSelectEvent:
{
frmP = FrmInitForm (Form3);
FrmSetEventHandler (frmP,
Form3EventHandler);
FrmSetActiveForm(frmP);
FrmDoDialog (frmP);
FrmDeleteForm (frmP);
}
}
return handled;
}
Boolean Form3EventHandler(EventPtr eventP)
{
Boolean handled = false;
switch (eventP->eType)
{
case fldChangedEvent:
{
updateScrollbar();
handled = true;
break;
}
case sclRepeatEvent:
{
scrollLines(eventP->data.sclRepeat.newValue -
eventP->data.sclRepeat.value, false);
break;
}
}
return handled;
}
void updateScrollbar()
{
FormPtr frm = FrmGetActiveForm();
ScrollBarPtr scroll;
FieldPtr field;
UInt16 currentPosition;
UInt16 textHeight;
UInt16 fieldHeight;
UInt16 maxValue;
field = (FieldPtr)FrmGetObjectPtr(frm, FrmGetObjectIndex
(frm, FieldID));
FldGetScrollValues(field, ¤tPosition, &textHeight,
&fieldHeight);
if (textHeight > fieldHeight)
maxValue = textHeight - fieldHeight;
else if (currentPosition)
maxValue=currentPosition;
else
maxValue=0;
scroll = (ScrollBarPtr)FrmGetObjectPtr(frm,
FrmGetObjectIndex (frm, ScrollID));
SclSetScrollBar(scroll, currentPosition, 0, maxValue,
fieldHeight-1);
}
void scrollLines(Int16 numLinesToScroll, Boolean redraw)
{
FormPtr frm = FrmGetActiveForm();
FieldPtr field;
field = (FieldPtr)FrmGetObjectPtr( frm, FrmGetObjectIndex
(frm, FieldID));
if(numLinesToScroll < 0)
FldScrollField(field, -numLinesToScroll, winUp);
else
FldScrollField(field, numLinesToScroll, winDown);
if ((FldGetNumberOfBlankLines(field)&& numLinesToScroll<0)
|| redraw)
updateScrollbar();
}
My problem is that the scrollbar doesn't function properly. I have
isolated the bug to the following code:
scrollLines(eventP->data.sclRepeat.newValue -
eventP->data.sclRepeat.value, false);
eventP->data.sclRepeat.newValue = 0 (always)
and
eventP->data.sclRepeat.value = what newValue should be.
Does anyone know why this behavior might be occuring?
Thanks,
RABMissouri