here is the form code
  the Scrollbar is set to usable
  should work, so I must be missing something
   
  static Boolean frmHistory_fldScroll_OnScrollbarRepeat(EventPtr event)
{
// Insert code for fldScroll
ScrollLines(FrmGetActiveForm(), fldHistory, fldScroll, 
event->data.sclRepeat.newValue - event->data.sclRepeat.value, false); 
return true;
}


static Boolean frmHistory_fldHistory_OnfldChanged(EventPtr event)
{
// Insert code for fldHistory
UpdateScrollbar(FrmGetActiveForm(),fldHistory,fldScroll);
return true;
}


static Boolean frmHistory_cmdDone_OnSelect(EventPtr event)
{
// Insert code for cmdDone
FrmReturnToForm(0);
return true;
}

/***********************************************************************
*
* FUNCTION: frmHistory_HandleEvent
*
* DESCRIPTION: Handles a Form event
*
* PARAMETERS: event pointer to an event structure
* 
* RETURNED: returns handled/not handled
*
* REVISION HISTORY:
* Name Date Description
* ---- ---- -----------
* DOn 9/2/2007 6:06:08 PM Created

* 
***********************************************************************/

Boolean frmHistory_HandleEvent(EventPtr event)
{
FormPtr form;
Boolean handled = false;

switch (event->eType)
{
case fldChangedEvent:
switch (event->data.fldChanged.fieldID)
{
// fldHistory receives an event
case fldHistory:
handled = frmHistory_fldHistory_OnfldChanged(event);
break;
}
break;
case sclRepeatEvent :
switch (event->data.sclRepeat.scrollBarID)
{
// fldScroll receives an event
case fldScroll:
handled = frmHistory_fldScroll_OnScrollbarRepeat(event);
break;
}
break;
case ctlSelectEvent:
switch (event->data.ctlSelect.controlID)
{
// cmdDone receives an event
case cmdDone:
handled = frmHistory_cmdDone_OnSelect(event);
break;
}
break;
case frmOpenEvent:
// Repaint form on open
form = FrmGetActiveForm();
FrmDrawForm(form);
UpdateScrollbar(FrmGetActiveForm(),fldHistory, fldScroll);
handled = true;
break;
default:
break;
}

return handled;
}

void UpdateScrollbar(FormPtr form, UInt16 fieldID, UInt16 scrollbarID)
{
ScrollBarPtr scroll;
FieldPtr field;
UInt16 currentPosition;
UInt16 textHeight;
UInt16 fieldHeight;
UInt16 maxValue;

field = (FieldPtr) FrmGetObjectPtr(form,FrmGetObjectIndex(form, fieldID));
FldGetScrollValues(field, &currentPosition, &textHeight, &fieldHeight);

// if the field is 3 lines, and the text height is 4 lines
// then we can scroll so that the first line is at the top 
// (scroll position 0) or so the second line is at the top
// (scroll postion 1). These two values are enough to see
// the entire text.
if (textHeight > fieldHeight)
maxValue = textHeight - fieldHeight;
else if (currentPosition)
maxValue = currentPosition;
else
maxValue = 0;

scroll = (ScrollBarPtr) FrmGetObjectPtr(form, FrmGetObjectIndex(form, 
scrollbarID));

// on a page scroll, want to overlap by one line (to provide context)
SclSetScrollBar(scroll, (Int16) currentPosition, 0, (Int16) maxValue, (Int16) 
fieldHeight - 1);
}

void ScrollLines(FormPtr form, UInt16 fieldID, UInt16 scrollbarID, Int16 
numLinesToScroll, Boolean redraw)
{
FormPtr frm = FrmGetActiveForm();
FieldPtr field;

field = (FieldPtr) FrmGetObjectPtr(frm, FrmGetObjectIndex(frm, fieldID));
if (numLinesToScroll < 0) FldScrollField(field, (UInt16) -numLinesToScroll, 
winUp);
else
FldScrollField(field, (UInt16) numLinesToScroll, winDown);

// if there are blank lines at the end and we scroll up, FldScrollField
// makes the blank lines disappear. Therefore, we've got to update
// the scrollbar
if ((FldGetNumberOfBlankLines(field) && numLinesToScroll < 0) || redraw) 
UpdateScrollbar(form, fieldID, scrollbarID);
}

void PageScroll(FormPtr form, UInt16 fieldID, UInt16 scrollbarID, 
WinDirectionType direction)
{
FieldPtr field;

field = (FieldPtr) FrmGetObjectPtr(form, FrmGetObjectIndex(form, fieldID));
if (FldScrollable(field, direction))
{
Int16 linesToScroll = (Int16) FldGetVisibleLines(field) - 1;
if (direction == winUp)linesToScroll = -linesToScroll;
ScrollLines(form, fieldID, scrollbarID, linesToScroll, true);
}
}

       
---------------------------------
Building a website is a piece of cake. 
Yahoo! Small Business gives you all the tools to get online.
-- 
For information on using the ACCESS Developer Forums, or to unsubscribe, please 
see http://www.access-company.com/developers/forums/

Reply via email to