Announcement

Collapse
No announcement yet.

BFF question

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

  • BFF question

    Hi all,
    I use Edwin's BFF to browse for a certain folder.
    When opening the listview, I want to be able to specify a certain folder that is shown.
    I can do it with following line:
    Code:
        '// Populate the treeview with the specified rootfolder.
        BFF_Path hWndc, "c:\", 0, 1
    Trouble is that this way, I can't go to another (network)drive. Only c:\ is accessible.
    With the next line:
    Code:
        BFF_Path hWndc, "", %CSIDL_DESKTOP, 0
    all drives are accessible, but I can't specify a certain folder that is shown..
    I would like a combination of the two, something like:
    Code:
    BFF_Path hWndc, "c:\Program Files\", %CSIDL_DESKTOP, 0
    but this doesn't work... It is the same as the second line.
    Does anybody know how to do this?
    Kind regards
    Eddy

    Code:
    #COMPILE EXE
    '%DEBUGMODE = 1
    '#INCLUDE "DEBUGDLL.INC"
    
    %NOANIMATE       = 1
    %NOBUTTON        = 1
    %NOCOMBO         = 1
    %NODATETIMEPICK  = 1
    %NODRAGLIST      = 1
    %NOHEADER        = 1
    %NOHOTKEY        = 1
    %NOIMAGELIST     = 1
    %NOPIADDRESS     = 1
    %NOLIST          = 1
    %NOLISTVIEW      = 1
    %NOMONTHCAL      = 1
    %NONATIVEFONTCTL = 1
    %NOPAGESCROLLER  = 1
    %NOPAGESCROLLER  = 1
    %NOPROGRESS      = 1
    %NOREBAR         = 1
    %NOSTATUSBAR     = 1
    %NOTABCONTROL    = 1
    %NOTOOLBAR       = 1
    %NOTOOLTIPS      = 1
    %NOTRACKBAR      = 1
    '%NOTREEVIEW      = 1
    %NOUPDOWN        = 1
    
    DECLARE FUNCTION CoTaskMemAlloc LIB "ole32.dll" ALIAS "CoTaskMemAlloc"( BYVAL cb AS DWORD ) AS DWORD
    DECLARE SUB CoTaskMemFree LIB "ole32.dll" ALIAS "CoTaskMemFree"( BYVAL pv AS DWORD PTR )
    'DECLARE FUNCTION CoInitialize LIB "ole32.dll" ALIAS "CoInitialize"( BYVAL pvReserved AS DWORD ) AS DWORD
    'DECLARE SUB CoUninitialize LIB "ole32.dll" ALIAS "CoUninitialize"
    DECLARE FUNCTION SHGetDesktopFolder LIB "Shell32.Dll" ALIAS "SHGetDesktopFolder"( ppshf AS ANY ) AS LONG
    DECLARE FUNCTION SelectDir AS STRING
    
    #INCLUDE "win32api.inc"
    #INCLUDE "Commctrl.inc"
    #INCLUDE "BFF.INC"
    
    %ID_BFF1    = 100
    %BFF_OK     = 10
    %BFF_Cancel = 11
    
    GLOBAL SelDir_hDlg      AS LONG
    GLOBAL SelDir_DirName   AS STRING
    
    FUNCTION PBMAIN AS LONG
    'debug_print SelectDir
    SLEEP 6000
    END FUNCTION
    
    '------------------------------------------
    'Callback routine for the directory selection dialog
    '------------------------------------------
    CALLBACK FUNCTION DlgProc() AS LONG
        DIM lResult     AS LONG
        DIM xx AS LONG, yy AS LONG
        DIM cwidth      AS LONG
        DIM cheight     AS LONG
        SELECT CASE CBMSG
        CASE %WM_DESTROY
             
        CASE %WM_NOTIFY
            '// A few messages need to be maintained for the BFF treeview.
            lResult = BFF_WM_NOTIFY( CBHNDL, CBWPARAM, BYVAL CBLPARAM )
            IF lResult THEN FUNCTION = lResult: EXIT FUNCTION
    
            '// If you like, you can retrieve the user's interaction using this procedure.
            lResult = BFF_SelChanged( GetDlgItem( CBHNDL, %ID_BFF1 ), CBLPARAM )
            IF lResult THEN
                '// Your code...
                SetWindowText CBHNDL, BFF_GetPath( GetDlgItem( CBHNDL, %ID_BFF1 ) )
                SelDir_DirName = BFF_GetPath( GetDlgItem( CBHNDL, %ID_BFF1 ) )
            END IF
        CASE %WM_SIZE
            DIALOG GET CLIENT SelDir_hDlg TO cwidth, cheight
            DIALOG UNITS SelDir_hDlg, cwidth, cheight TO PIXELS xx, yy
            MoveWindow GetDlgItem( CBHNDL, %ID_BFF1 ), 5, 5, xx-10, yy-40, -1
            CONTROL SET LOC CBHNDL, %BFF_OK, 5, cheight-18
            CONTROL SET LOC CBHNDL, %BFF_Cancel, 70, cheight-18
        CASE %WM_GETMINMAXINFO
                RV&=DefWindowProc(CBHNDL, CBMSG, CBWPARAM, CBLPARAM)
                DIM MM AS MINMAXINFO PTR
                MM=CBLPARAM
                @MM.ptMinTrackSize.x=210
                @MM.ptMinTrackSize.y=200
        END SELECT
    END FUNCTION
    
    '------------------------------------------
    'SelectDir opens a dialog to select a directory and returns it as a string
    '------------------------------------------
    FUNCTION SelectDir AS STRING
        DIM hWndc       AS LONG
        DIM ExpandItem  AS LONG
        DIM cwidth      AS LONG
        DIM cheight     AS LONG
        DIALOG NEW 0, "Select a directory",,, 200, 220, %WS_SYSMENU OR %WS_THICKFRAME TO SelDir_hDlg
        IF SelDir_hDlg = 0 THEN EXIT FUNCTION
    
        '// Create the BFF control.
        DIALOG GET SIZE SelDir_hDlg TO cwidth, cheight
        DIALOG UNITS SelDir_hDlg, cwidth-10, cheight-45 TO PIXELS xx&, yy&
        ExpandItem = 1
        hWndc = BFF_CreateTreeview( _
              SelDir_hDlg _
            , %ID_BFF1 _
            , %WS_VISIBLE OR %WS_TABSTOP _
            , %WS_EX_CLIENTEDGE _
            , 5, 5, xx&, yy& _
            , ExpandItem )
    
        '// Discard (default) current selection and set a new one.
        '// Populate the treeview with drives only.
       ' BFF_Path hWndc, "", %CSIDL_NOID, 0
    
        '// Populate the treeview with the specified rootfolder.
        'BFF_Path hWndc, "g:\", 0, 1
        
        BFF_Path hWndc, "c:\", %CSIDL_DESKTOP, 0
    
        CONTROL ADD BUTTON, SelDir_hDlg, %BFF_OK, "OK", 5, cheight-35, 60, 15, _
             %WS_CHILD OR %WS_VISIBLE OR %BS_PUSHBUTTON OR %WS_TABSTOP
        CONTROL ADD BUTTON, SelDir_hDlg, %BFF_Cancel, "Cancel", 70, cheight-35, 60, 15, _
             %WS_CHILD OR %WS_VISIBLE OR %BS_PUSHBUTTON OR %WS_TABSTOP
        DIALOG SHOW MODAL SelDir_hDlg CALL DlgProc
        'debug_print SelDir_DirName
        FUNCTION = SelDir_DirName
    END FUNCTION
    ------------------
    [email protected]

    [This message has been edited by Eddy Van Esch (edited August 28, 2001).]
    Eddy

  • #2
    You need ...JumpToPath
    See example, On %BFF_READY ( i believe) you should jump to C:\ whatever..


    ------------------
    hellobasic

    Comment


    • #3
      Originally posted by Edwin Knoppert:
      You need ...JumpToPath
      See example, On %BFF_READY ( i believe) you should jump to C:\ whatever..


      Edwin,
      Which of the includes do I need:
      #INCLUDE "BFF.INC"
      #INCLUDE "PBSCTRL.INC"
      "BFF.INC" doesn't have the BFF_JumpToPath and
      "PBSCTRL.INC" doesn't work with the code above....
      BFF_WM_NOTIFY etc aren't recognised...

      Eddy




      ------------------
      [email protected]
      Eddy

      Comment


      • #4
        I just downloaded the BFF project.
        The example already shows the jump to "C:\Windows"

        Maybe i don't understand what you are asking.
        You can not have a top dir of "C:\" + netwerk dirs


        ------------------
        hellobasic

        Comment


        • #5
          Edwin,
          In the above program I used "BFF.INC" which doesn't support "BFF_JumpToPath"
          if I'm not mistaking.
          In the program below I use "PBSCTRL.INC", which DOES support "BFF_JumpToPath",
          so now everything works fine.
          Was BFF.INC a predecessor of PBSCTRL.INC or a subset or something?
          Eddy
          Code:
          #COMPILE EXE
          #REGISTER NONE
          #DIM ALL
          '%DEBUGMODE = 1
          '#INCLUDE "DEBUGDLL.INC"
          
              %NOANIMATE       = 1
              %NOBUTTON        = 1
              %NOCOMBO         = 1
              %NODATETIMEPICK  = 1
              %NODRAGLIST      = 1
              %NOHEADER        = 1
              %NOHOTKEY        = 1
              %NOIMAGELIST     = 1
              %NOPIADDRESS     = 1
              %NOLIST          = 1
          '    %NOLISTVIEW      = 1
              %NOMONTHCAL      = 1
              %NONATIVEFONTCTL = 1
              %NOPAGESCROLLER  = 1
              %NOPROGRESS      = 1
              %NOREBAR         = 1
              %NOSTATUSBAR     = 1
              %NOTABCONTROL    = 1
              %NOTOOLBAR       = 1
              %NOTOOLTIPS      = 1
              %NOTRACKBAR      = 1
              %NOTREEVIEW      = 1
              %NOUPDOWN        = 1
          #INCLUDE "win32api.inc"
          #INCLUDE "COMMCTRL.INC"
          #INCLUDE "PBSCTRL.INC"
          
          %ID_BFF         = 100
          %BFF_OK         = 101
          %BFF_Cancel     = 102
          %BFF_Title      = 103
          
          GLOBAL SelDir_hDlg          AS LONG
          GLOBAL SelDir_DirName       AS STRING
          GLOBAL SelDir_DefaultDir    AS STRING
          GLOBAL SelDir_Title         AS STRING
          
          DECLARE FUNCTION SelectDir(Title AS STRING, DefaultDir AS STRING)  AS STRING
          DECLARE CALLBACK FUNCTION CBF_DirSel_OK
          DECLARE CALLBACK FUNCTION CBF_DirSel_Cancel
          
          FUNCTION PBMAIN AS LONG
              DIM a AS STRING
              a = SelectDir("Select a directory","c:\Program Files\")
              'debug_print a
              SLEEP 6000
          END FUNCTION
          
          CALLBACK FUNCTION DlgProc() AS LONG
              DIM RV&, R AS Rect, T AS STRING, x AS LONG, y AS LONG, hCtl AS LONG
          
              SELECT CASE CBMSG
              CASE %WM_INITDIALOG
                  CONTROL ADD "" & $BROWSEFORFOLDER, CBHNDL, %ID_BFF, "" _
                      , 0, 0, 0, 0 _
                      , %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP _
                      , %WS_EX_CLIENTEDGE
                      BFF_JumpToPath GetDlgItem( CBHNDL, %ID_BFF ), SelDir_DefaultDir
              CASE %WM_COMMAND
                  SELECT CASE CBCTL
                  CASE %ID_BFF
                      '// When the BFF control is ready or new path is selected:
                      SELECT CASE CBCTLMSG
                      CASE %BFF_READY, %BFF_SELCHANGE
                          T = BFF_GetPath( GetDlgItem( CBHNDL, CBCTL ) )
                          SetWindowText CBHNDL, BYVAL STRPTR(SelDir_Title)
                          CONTROL SET TEXT SelDir_hDlg,  %BFF_Title, T
                          SelDir_DirName = T
                      END SELECT
                  END SELECT
              CASE %WM_SIZE
                  DIALOG GET CLIENT SelDir_hDlg TO x,y
                  CONTROL SET SIZE SelDir_hDlg, %ID_BFF, x, y-35
          
                  CONTROL SET LOC CBHNDL, %BFF_OK, 5, y-16
                  CONTROL HANDLE CBHNDL,  %BFF_OK TO hCtl
                  InvalidateRect hCtl, BYVAL %NULL, %True
          
                  CONTROL SET LOC CBHNDL, %BFF_Cancel, 70, y-16
                  CONTROL HANDLE CBHNDL,  %BFF_Cancel TO hCtl
                  InvalidateRect hCtl, BYVAL %NULL, %True
          
                  CONTROL SET LOC CBHNDL, %BFF_Title, 5, y-30
                  CONTROL HANDLE CBHNDL,  %BFF_Title TO hCtl
                  InvalidateRect hCtl, BYVAL %NULL, %True 'Invalidate control to make sure it is repainted by Windows
          
              CASE %WM_GETMINMAXINFO
                  RV&=DefWindowProc(CBHNDL, CBMSG, CBWPARAM, CBLPARAM)
                  DIM MM AS MINMAXINFO PTR
                  MM=CBLPARAM
                  @MM.ptMinTrackSize.x=210
                  @MM.ptMinTrackSize.y=200
              END SELECT
          END FUNCTION
          
          '------------------------------------------
          'SelectDir opens a dialog to select a directory and returns it as a string
          '------------------------------------------
          FUNCTION SelectDir(Title AS STRING, DefaultDir AS STRING) AS STRING
              DIM SelDir_hDlg AS LONG
              DIM Result      AS LONG
          
              IF InitPBSoftCtrls() = 0 THEN
                  MSGBOX "No PBSoft controls!"
                  EXIT FUNCTION
              END IF
              SelDir_DefaultDir   = DefaultDir
              SelDir_Title        = Title
          
              DIALOG NEW 0, "Folderview",,, 320, 230 _
                  ,  %WS_OVERLAPPED _
                  OR %WS_SYSMENU _
                  OR %WS_MINIMIZEBOX _
                  OR %WS_MAXIMIZEBOX _
                  OR %WS_THICKFRAME _
                  OR %WS_CLIPSIBLINGS _
                  OR %WS_CLIPCHILDREN _
                  TO SelDir_hDlg
              IF SelDir_hDlg = 0 THEN EXIT FUNCTION
              CONTROL ADD BUTTON, SelDir_hDlg, %BFF_OK, "OK", 5, 40, 60, 15, _
                   %WS_CHILD OR %WS_VISIBLE OR %BS_PUSHBUTTON OR %WS_TABSTOP CALL CBF_DirSel_OK
              CONTROL ADD BUTTON, SelDir_hDlg, %BFF_Cancel, "Cancel", 70, 40, 60, 15, _
                   %WS_CHILD OR %WS_VISIBLE OR %BS_PUSHBUTTON OR %WS_TABSTOP CALL CBF_DirSel_Cancel
              CONTROL ADD LABEL, SelDir_hDlg,  %BFF_Title, Title, 5, 5, 200, 10, _
                  %WS_CHILD OR %WS_VISIBLE OR %SS_LEFT 'OR %WS_BORDER
              PostMessage SelDir_hDlg, %WM_SIZE, 0, 0
              DIALOG SHOW MODAL SelDir_hDlg CALL DlgProc TO Result
              IF SelDir_DirName = "" THEN SelDir_DirName = DefaultDir
              FUNCTION = SelDir_DirName
          END FUNCTION
          '--------------------------------
          
          '--------------------------------
          CALLBACK FUNCTION CBF_DirSel_OK
              IF CBCTLMSG=%BN_CLICKED THEN
                  DIALOG END SelDir_hDlg
              END IF
          END FUNCTION
          '--------------------------------
          
          '--------------------------------
          CALLBACK FUNCTION CBF_DirSel_Cancel
              IF CBCTLMSG=%BN_CLICKED THEN
                  SelDir_DirName = ""
                  DIALOG END SelDir_hDlg
              END IF
          END FUNCTION
          '--------------------------------
          ------------------
          [email protected]

          [This message has been edited by Eddy Van Esch (edited August 29, 2001).]
          Eddy

          Comment


          • #6
            The BFF code itself does have the jump too.
            Maybe you had an older version?

            The BFF code does not rely on the PBSctrl stuff.
            Sure it's used in PBSctrl but newer.
            Some things are cleaned up, nothing to worrie about.

            Question:
            Does the BFF crash sometimes when you not used the default dir. tree but a custom drve/folder set.

            BFF_Path "C:\WINDOWS" etc.

            ??

            I do have that problem.


            ------------------
            hellobasic

            Comment


            • #7
              I probably had an older BFF version, Edwin. If you say that should work too,
              I think I am going to use the BFF.INC. This way I don't need the PBSCTRL.DLL and
              have a single file executable.
              Do you think the above code will work unmodified when using BFF.INC?
              (yes, I simply should try it.. )
              I haven't used BFF_Path so I can't tell about crashes. Haven't had crashes so far.
              Kind regards
              Eddy



              ------------------
              [email protected]
              Eddy

              Comment


              • #8
                There should be no difference.
                Get rid of the DLL

                The default usage seems to work fine.
                No weird root paths, only jump.. is ok..


                ------------------
                hellobasic

                Comment

                Working...
                X