How to Create a Mover Dialog BoxID: Q137123 2.50 2.50a 2.50b 2.60 2.60a | 2.50 2.50a 2.50b 2.60 2.60a WINDOWS | MS-DOS The information in this article applies to:
SUMMARYA mover dialog box is an object you can use to move items from one list object to another to make selections from available choices. FoxPro does not have a mover dialog box option to choose when making a screen, but you can use the techniques presented in this article to simulate a mover dialog box in FoxPro. MORE INFORMATIONThis example of a mover dialog box can be created once but used over and over throughout all of your applications. The GENSCRN generated code will be a procedure that accepts three parameters: cTitle, acChoices and acSelected.
When the Mover Dialog Box is run, it will determine if any choices have already been placed in the "selected list" and mark those choices as unavailable in the list of choices. As items are selected from the list of choices, they will become unavailable, unless that item is moved back. Steps to Create Mover Dialog Box1. Create a screen in FoxPro. On the left side of the screen, create a list box for the variable m.nChoice from an array called acChoices. This list box should only take up the left 2/5's of the screen. In the Valid Code Snippet, place this code: IF m.nChoice # 0 IF LEFT(acChoices[m.nChoice],1) # "\" m.nSelected = m.nSelected + 1 m.nSelect = m.nSelected acSelected[m.nSelected] = acChoices[m.nChoice] acChoices[m.nChoice] = "\" + acChoices[m.nChoice] SHOW GETS SHOW GET nAction, 1 ENABLED SHOW GET nAction, 2 ENABLED IF m.nSelected = 0 SHOW GET nAction, 3 DISABLED SHOW GET nAction, 4 DISABLED ELSE SHOW GET nAction, 3 ENABLED SHOW GET nAction, 4 ENABLED ENDIF ENDIF ENDIF 2. On the right side of the screen, create another list box for the variable m.nSelect from an array called acSelected. This list box should only take up the right 2/5's of the screen. In the Valid Code Snippet, place this code: IF m.nSelect # 0 IF ! EMPTY(acSelected[m.nSelect]) m.Value = acSelected[m.nSelect] m.nSelected = m.nSelected - 1 =ADEL(acSelected,m.nSelect) acSelected[ALEN(acSelected)] = "" x = ASCAN(acChoices,"\"+m.Value) acChoices[x] = substr(acChoices[x],2) SHOW GETS SHOW GET nAction, 1 ENABLED SHOW GET nAction, 2 ENABLED IF m.nSelected = 0 SHOW GET nAction, 3 DISABLED SHOW GET nAction, 4 DISABLED ELSE SHOW GET nAction, 3 ENABLED SHOW GET nAction, 4 ENABLED ENDIF ENDIF ENDIF 3. In the middle of the screen, create a vertical, four-button push button set for the variable nAction. The buttons should be labeled: Select, Select All, Deselect, Deselect All. In the Valid Code Snippet, place this code: DO CASE CASE nAction = 1 && Select one IF m.nChoice # 0 IF LEFT(acChoices[m.nChoice],1) # "\" m.nSelected = m.nSelected + 1 m.nSelect = m.nSelected acSelected[m.nSelected] = acChoices[m.nChoice] acChoices[m.nChoice] = "\" + acChoices[m.nChoice] SHOW GETS IF m.nSelected = ALEN(acSelected) SHOW GET nAction, 1 DISABLED SHOW GET nAction, 2 DISABLED ELSE SHOW GET nAction, 1 ENABLED SHOW GET nAction, 2 ENABLED ENDIF SHOW GET nAction, 3 ENABLED SHOW GET nAction, 4 ENABLED ENDIF ENDIF CASE nAction = 2 && Select All =ACOPY(laChoices, acSelected) =ACOPY(laChoices, acChoices) FOR x = 1 to ALEN(acChoices) acChoices[x] = "\" + acChoices[x] ENDFOR m.nSelected = ALEN(acChoices) m.nSelect = 1 m.nChoice = 1 SHOW GETS SHOW GET nAction, 1 DISABLED SHOW GET nAction, 2 DISABLED SHOW GET nAction, 3 ENABLED SHOW GET nAction, 4 ENABLED CASE nAction = 3 && Deselect one IF m.nSelect # 0 IF ! EMPTY(acSelected[m.nSelect]) m.Value = acSelected[m.nSelect] m.nSelected = m.nSelected - 1 =ADEL(acSelected,m.nSelect) acSelected[ALEN(acSelected)] = "" x = ASCAN(acChoices,"\"+m.Value) acChoices[x] = SUBSTR(acChoices[x],2) SHOW GETS SHOW GET nAction, 1 ENABLED SHOW GET nAction, 2 ENABLED IF m.nSelected = 0 SHOW GET nAction, 3 DISABLED SHOW GET nAction, 4 DISABLED ELSE SHOW GET nAction, 3 ENABLED SHOW GET nAction, 4 ENABLED ENDIF ENDIF ENDIF CASE nAction = 4 && Deselect All =ACOPY(laChoices, acChoices) STORE "" TO acSelected m.nSelected = 0 m.nSelect = 0 m.nChoice = 0 SHOW GETS SHOW GET nAction, 1 ENABLED SHOW GET nAction, 2 ENABLED SHOW GET nAction, 3 DISABLED SHOW GET nAction, 4 DISABLED ENDCASE 4. At the bottom of the screen, create a centered, horizontal, two-button push button set for the variable m.nResult. The buttons should be labeled: OK and Cancel. The "Terminate READ On Selection" check box should also be selected. In the Valid Code Snippet, place this code: IF m.nResult = 2 =ACOPY(laChoices, acChoices) =ACOPY(laSelected, acSelected) ENDIF 5. In the Screen Setup Code Snippet, place this code: #SECTION1 Parameters cTitle, acChoices, acSelected Private nChoices, nSelected, nChoice, nSelect, nAction, nResult, x STORE 0 TO nChoices, nSelected, nAction, nResult =ACOPY(acChoices, laChoices) =ACOPY(acSelected, laSelected) FOR x = 1 TO ALEN(acChoices) nChoices = nChoices + IIF(EMPTY(acChoices[x]),0,1) IF ASCAN(acSelected,acChoices[x]) # 0 acChoices[x] = "\" + acChoices[x] ENDIF ENDFOR FOR x = 1 TO ALEN(acSelected) nSelected = nSelected + IIF(EMPTY(acSelected[x]),0,1) ENDFOR 6. In the "On Screen Entry (When)" Code Snippet, place this code: IF m.nSelected = 0 SHOW GET nAction, 3 DISABLED SHOW GET nAction, 4 DISABLED ELSE SHOW GET nAction, 3 ENABLED SHOW GET nAction, 4 ENABLED ENDIF RETURN .t. 7. Under the Screen Layout dialog box, enter the screen title as &cTitle. and enter the screen name as Selector. Select the Position - Center check box so that the dialog box will always be centered on the screen. 8. Save the screen as Mover.Scx and generate the screen program. You may use the following as a test program: CLEAR ? "loading customer names ..." USE c:\fpw26\tutorial\customer SET FILTER TO recno()%10 = 0 COPY TO ARRAY aChoices FIELD company ASORT(aChoices) USE CLEAR DIMENSION aSelected[ ALEN(aChoices,1) ] aSelected = SPACE(0) DO mover.spr WITH "Select Company", aChoices, aSelected CLEAR ? "You chose:" FOR x = 1 TO ALEN(aSelected) IF ! EMPTY(aSelected[x]) ? x, aSelected[x] ENDIF ENDFOR Additional reference words: 2.50 2.50a 2.50b 2.60 2.60a FoxWin FoxDos KBCategory: KBSubcategory: FxprgGeneral Keywords : kbcode FxprgGeneral Version : 2.50 2.50a 2.50b 2.60 2.60a | 2. Platform : MS-DOS WINDOWS |
Last Reviewed: May 22, 1998 |