Announcement

Collapse

Forum Guidelines

This forum is for finished source code that is working properly. If you have questions about this or any other source code, please post it in one of the Discussion Forums, not here.
See more
See less

PB/WIN: Wrrite your own ENUM

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • PB/WIN: Wrrite your own ENUM

    Code:
    ' SIMPLE 'WRITE YOUR OWN' ENUM FUNCTION FOR PB/Win 7.0
    ' Author: Michael Mattias Racine WI
    ' September 2002
    ' Compiler: PB/Win v 7.0
    ' ========================================================================
    ' This demo shows how to write a simple enumeration function to process
    ' each element of a string array one at a time with an option to quit
    ' partway through.
    ' ========================================================================
    ' The parameters for the callback function 'EnumElementsCallBackFunction'
    ' were designed specifically to allow the callback function to do 'what it
    ' has to do' and no more.
    
    #COMPILE EXE
    #INCLUDE "Win32API.INC"
    
    %USER_ABORT  = 999
    %ID_LABEL    = 101
    %ID_BUTTON   = 102
    %N_ELEMENTS  = 6    ' number of elements in array
    
    
    ' Optional DECLARE for CALL DWORD: not needed in this demo because
    ' the function appears in the source code PRIOR to its use
    ' DECLARE FUNCTION EnumElementsCallBackFunction(BYVAL hDlg AS LONG, BYVAL hCtrl AS LONG, s AS  STRING) AS LONG
    
    ' The function which is called for each array element when the enumeration occurs.
    ' Parameters needed: hDlg, control ID and text so we can CONTROL SET TEXT
    FUNCTION EnumElementsCallBackFunction(BYVAL hDlg AS LONG, BYVAL hCtrl AS LONG, s AS  STRING) AS LONG
    
      LOCAL J AS LONG
    
      ' set the text of the label control fo this element
      CONTROL SET TEXT hDlg, hCtrl, S
      ' does user want to continue?
      J = MSGBOX ("Continue Enumeration?", %MB_YESNO OR %MB_TASKMODAL OR %MB_ICONQUESTION, "Yo! Response Required!")
      IF J = %IDYES THEN
        FUNCTION = %TRUE   ' yes, continue the enumeration
      ELSE
        FUNCTION = %FALSE  ' no, terminate now
      END IF
    
    END FUNCTION
    
    FUNCTION EnumArrayElements (BYVAL hDlg AS LONG, BYVAL hCtrl AS LONG, S() AS STRING, BYVAL dwCallbackAddress AS DWORD) AS LONG
    
        LOCAL I AS LONG, lContinue AS LONG
        ' for each element of the passed array, call the callback function
        ' with the defined parameters exactly once.
        FOR I = LBOUND(S,1) TO UBOUND (s,1)
          CALL DWORD dwCallBackAddress USING EnumElementsCallBackFunction (hDlg, hCtrl, S(I)) TO lContinue
          IF ISFALSE lContinue THEN
              FUNCTION = %USER_ABORT :  EXIT FUNCTION
          END IF
        NEXT
        ' If we get this far, the user allowed the enumeration to continue
        ' until there was nothing left to do.
        FUNCTION = 0
    END FUNCTION
    
    
    CALLBACK FUNCTION DialogProc
     LOCAL X() AS STRING, I AS LONG, umsg AS STRING
    
     IF CBMSG = %WM_COMMAND  THEN
        IF CBCTL = %ID_BUTTON THEN
           REDIM X(%N_ELEMENTS)
           FOR I = 0 TO %N_ELEMENTS
              X(I) = "Array Element # " & STR$(I)
           NEXT
           I = EnumArrayElements(CBHNDL, %ID_LABEL, X(), CODEPTR(EnumElementsCallbackFunction))
           IF I = %USER_ABORT THEN
              uMsg ="User terminated enumeration before completion"
           ELSE
              uMsg = "User Allowed enumeration to complete"
           END IF
           MSGBOX uMsg, %MB_OK OR %MB_ICONINFORMATION, "Enumeration Results"
       ELSEIF CBCTL = %IDCANCEL THEN
           DIALOG END CBHNDL, 0
       END IF
    
     END IF
    END FUNCTION
    
    FUNCTION PBMAIN() AS LONG
        LOCAL hDlg AS LONG
    
        DIALOG  NEW 0&, "Enum & Callback Demo", 10, 10, 120,100 TO hDlg
        CONTROL ADD LABEL  ,hDlg, %ID_LABEL, "<null>", 10, 10, 60, 12
        CONTROL ADD BUTTON ,hDlg, %ID_BUTTON, "Do it", 10, 30, 40,14
        CONTROL ADD BUTTON, hDlg, %IDCANCEL, "Quit",   10, 50, 40,14
        DIALOG SHOW MODAL hDlg, CALL DialogProc
    
    END FUNCTION
    
    ' ** END OF FILE **

    ------------------
    Michael Mattias
    Tal Systems Inc.
    Racine WI USA
    [email protected]
    www.talsystems.com
    Michael Mattias
    Tal Systems (retired)
    Port Washington WI USA
    [email protected]
    http://www.talsystems.com
Working...
X