How to Implement a Customized Scrolling GET List ControlLast reviewed: April 30, 1996Article ID: Q121437 |
The information in this article applies to:
SUMMARYFoxPro does not provide any built-in means of creating a specialized scrolling control like the one used in the Modify Structure dialog box or the one used in the RQBE tool. It is possible, however, to simulate such a control by using a series of nested windows. The sample code below illustrates this process.
MORE INFORMATIONNOTE: Save this code as SCROLLER.PRG. To execute the code, type "DO scroller.prg" in the Command window.
Sample Code*------------------------------------------------------------------------- * * SCROLLER.PRG - Sample code for implementing a simple specialized list * control ** Various environmental initializations... scrnfont="FoxFont" scrnfontsize=9 num_items=15 CLEAR IF _WINDOWS MODIFY WINDOW SCREEN FONT scrnfont,scrnfontsize ENDIF* Define container window. DEFINE WINDOW container ; FROM 1,1 TO 12,30 ; TITLE "Scrolling Gets" ; HALFHEIGHT FLOAT ; FONT scrnfont,scrnfontsize ACTIVATE WINDOW container* Define the container for the scrolled region. Window B will * limit the visibility of the scrolling chunk of screen, and * window C will actually be relocated on the screen as the * scrolling buttons are pressed. DEFINE WINDOW B ; FROM 1,2 TO 9,12 ; IN WINDOW container ; FONT scrnfont,scrnfontsize DEFINE WINDOW C ; FROM 0,0 TO 100,20 ; IN WINDOW B ; FONT scrnfont,scrnfontsize ; NONE ACTIVATE WINDOW B ACTIVATE WINDOW C* Define the container for the control buttons and other * GET objects on the screen. In order to be able to access * controls in both the container and the scrollable region, * the controls must be at the same level of window-nesting. DEFINE WINDOW a1 ; FROM 1,13 TO 9,30 ; IN WINDOW container ; FONT scrnfont,scrnfontsize ; NONE DEFINE WINDOW a2 ; FROM 0,0 TO 8,17 ; IN WINDOW a1 ; FONT scrnfont,scrnfontsize ; NONE ACTIVATE WINDOW a1 ACTIVATE WINDOW a2* Initialize button variables. scrup=1 scrdn=1 exitbtn=0* Draw the buttons. @0,0 GET scrup ; FUNCTION "* ^" ; VALID scrollit('up') ; SIZE 2,3 @6,0 GET scrdn ; FUNCTION "* v" ; VALID scrollit('dn') ; SIZE 2,3 @6,5 GET exitbtn ; FUNCTION "* \?Quit" ; SIZE 2,5* Define the controls on the scrolling region. * Create <num_items> buttons and GETs. * (This is also an example of a control array.) ACTIVATE WINDOW C DECLARE btn(num_items) DECLARE txt(num_items) FOR i = 1 TO num_items btn(i) = 1 txt(i) = chr(i+48) + chr(i+49) + chr(i+50) @i-1,0 GET btn(i) ; FUNCTION "* " + STR(i) ; SIZE 1,3 ; VALID scrbtn(OBJVAR()) @i-1,4 GET txt(i) ; SIZE 1,5 ; WHEN scrtxt(OBJVAR(),"When") ; VALID scrtxt(OBJVAR(),"Valid") NEXT READ WHEN enablescroll() VALID exitbtn=1 RELEASE WINDOW container return*------------------------------------------------------------------------- PROCEDURE scrollit * Use the Move Window command to position the scroll area PARAMETER direction DO CASE CASE LOWER(direction) = 'dn' MOVE WINDOW C BY -1,0 CASE LOWER(direction) = 'up' MOVE WINDOW C BY 1,0 ENDCASE =enablescroll() RETURN .T.*------------------------------------------------------------------------- PROCEDURE enablescroll * Disable or enable the scroll buttons as appropriate. ACTIVATE WINDOW a2 curpos = ROUND(WLROW('b')-WLROW('c'),0) visible_items = ROUND(WROWS('b'),0) enableup = curpos > 0 enabledn = curpos < num_items-visible_items IF enableup SHOW GET scrup enabled ELSE SHOW GET scrup disabled ENDIF IF enabledn SHOW GET scrdn enabled ELSE SHOW GET scrdn disabled ENDIF RETURN .T.*------------------------------------------------------------------------- PROCEDURE scrbtn PARAMETER btnname bindex=STR(VAL(RIGHT(btnname, LEN(btnname) - AT("(",btnname) ) ) ) WAIT WINDOW "Button " + ALLTRIM(bindex) ; + " Valid." ; NOWAIT TIMEOUT 5 RETURN .T.*------------------------------------------------------------------------- PROCEDURE scrtxt PARAMETER fname,clause findex=VAL(RIGHT(fname,LEN(fname) - AT("(",fname))) WAIT WINDOW "Field " + fname + " " ; + clause + ":" + CHR(13) + txt(findex) ; NOWAIT TIMEOUT 5 RETURN .T.* * * End of program SCROLLER.PRG *-------------------------------------------------------------------------
|
Additional reference words: FoxDos FoxWin 2.00 2.5x 2.50 2.5 2.5a 2.50a
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |