Wheel Scrolling in Grid Example

Discussions related to Visual Prolog
Post Reply
daveplummermd
Active Member
Posts: 80
Joined: 18 Jul 2006 17:18

Wheel Scrolling in Grid Example

Unread post by daveplummermd » 2 Dec 2018 3:06

Guys
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
Dave Plummer

daveplummermd
Active Member
Posts: 80
Joined: 18 Jul 2006 17:18

Re: Wheel Scrolling in Grid Example

Unread post by daveplummermd » 6 Dec 2018 17:48

OK, if interested, I got it.

1) move the declaration of "grid_vmove_cells_area" to vpiGrid.cl

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

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,        !.
Dave Plummer

Harrison Pratt
VIP Member
Posts: 279
Joined: 5 Nov 2000 0:01

Re: Wheel Scrolling in Grid Example

Unread post by Harrison Pratt » 7 Dec 2018 14:52

Dave,

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.

User avatar
Thomas Linder Puls
VIP Member
Posts: 2361
Joined: 28 Feb 2000 0:01

Re: Wheel Scrolling in Grid Example

Unread post by Thomas Linder Puls » 7 Dec 2018 21:22

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.
Regards Thomas Linder Puls
PDC

daveplummermd
Active Member
Posts: 80
Joined: 18 Jul 2006 17:18

Re: Wheel Scrolling in Grid Example

Unread post by daveplummermd » 17 Dec 2018 19:40

Guys
No changes to generatedInitialize .

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

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

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 childDialog.pro 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.

Dave
Dave Plummer

Post Reply