Page 1 of 1

Wheel Scrolling in Grid Example

Posted: 2 Dec 2018 3:06
by daveplummermd
Can you advise on how to introduced scrolling the GRID by mouse wheel events in the Grid example distributed with v8.+. I have scoured the forum with no luck.

Thanks in advance
Dave Plummer

Re: Wheel Scrolling in Grid Example

Posted: 6 Dec 2018 17:48
by daveplummermd
OK, if interested, I got it.

1) move the declaration of "grid_vmove_cells_area" to

2) Add listener " addVScrollListener(onVScroll)" to the clause " generatedInitialize()" in

3) add the clause "onVScroll" to handle the scroll event

Code: Select all

 onVScroll(Source, ScrollCode, ThumbPosition) -      if ScrollCode = 2 then            vpiGridgrid_vmove_cells_area(activeGrid, 1)       elseif ScrollCode=  1 then            vpiGridgrid_vmove_cells_area(activeGrid, -1)        end if,        !.

Re: Wheel Scrolling in Grid Example

Posted: 7 Dec 2018 14:52
by Harrison Pratt

Should vpiGridgrid_vmove_cells_area be vpiGrid::grid_vmove_cells_area ?

Add listener " addVScrollListener(onVScroll)" confuses me. Do you mean add a VScroll listener (onVScroll) ?

Also, where is activeGrid defined? I can't find it.

Thanks for digging into this. I hope your tweaks get added into the next VP update.

Re: Wheel Scrolling in Grid Example

Posted: 7 Dec 2018 21:22
by Thomas Linder Puls
I don't have any really good information about this, but I have a warning.

Don't make any changes in generatedInitialize it is generated (as the name and the surrounding comments implies).

Whatever you like to do in generatedInitialize do it in the constructor after the call to generatedInitialize instead.

Re: Wheel Scrolling in Grid Example

Posted: 17 Dec 2018 19:40
by daveplummermd
No changes to generatedInitialize .

Let me restate the steps:
1) move the declaration of "grid_vmove_cells_area" to

2) Add listener " addVScrollListener(onVScroll)]" to the constructor new(Parent) in

Code: Select all

 new(Parent) :-         dialog::new(Parent),         generatedInitialize(),         This:addVScrollListener(onVScroll),
the name "onVScroll" is arbitary, and will be the name of predicate called on vscroll event.

3) modify the onShow clause in in order to add the GridWindow to database
first, add the fact section

Code: Select all

facts        activeGrid : vpiDomains::windowHandle := erroneous.
then the modified onShow

Code: Select all

 onShow(Source, _Data) :-         !,         get_init_grid_conf(caller, GridStyle, RowStyle, ColumnStyle),         WinDef = [customctl(wdef(wc_Custom, rct(1, 1, 440, 249), "Custom", u_DlgBase), "grid", 40000, [wsf_Group, wsf_TabStop])],         GridWin = vpi::winCreateDynControl(WinDef, Source:getVpiWindow()),         activeGrid := GridWin,         vpiGrid::init(GridWin, GridStyle, RowStyle, ColumnStyle, grid_callback),         vpiGrid::visitorder(GridWin, 90, c_Alt, vpiGrid::grid_right).
4) and lastly the onVscroll clause

Code: Select all

predicates     onVScroll : window::scrollListener. clauses     onVScroll(_Source, ScrollCode, _ThumbPosition) :-         if ScrollCode = 2 then             vpiGrid::grid_vmove_cells_area(activeGrid, 1)         elseif ScrollCode = 1 then             vpiGrid::grid_vmove_cells_area(activeGrid, -1)         else             succeed         end if,         !.
I hope that explains it better.