Hi,
Has somebody been able to use the function cGetFile() ?
Regards.
#include "FWCE.ch"
function Main()
MsgInfo( cGetFile( "*.*", "\" ) )
return nil
static function cGetFile( cMask, cPath )
local oDlg, oBrw, oBtn, aItems, cFileName := ""
DEFAULT cMask := "*.*", cPath := "\"
aItems = GetItems( cMask, @cPath )
DEFINE DIALOG oDlg TITLE "Please select a file" ;
SIZE 220, 210
@ 0.4, 0.7 LISTBOX oBrw ;
FIELDS aItems[ oBrw:nAt, 1 ], aItems[ oBrw:nAt, 2 ], aItems[ oBrw:nAt, 3 ],;
aItems[ oBrw:nAt, 4 ] ;
HEADERS "Name", "T", "Size", "Date" ;
COLSIZES 100, 15, 70, 40 ;
SIZE 100, 82 ;
ON DBLCLICK SelFile( oBrw, cMask, @cPath, @cFileName, oDlg )
oBrw:SetArray( aItems )
oBrw:aJustify = { .f., .f., .t., .f. }
oBrw:bKeyChar = { | nKey | If( nKey == 13,;
( SelFile( oBrw, cMask, @cPath, @cFileName, oDlg ), oBrw:SetFocus() ),) }
@ 5, 3 BUTTON oBtn PROMPT "Ok" ACTION SelFile( oBrw, cMask, @cPath, @cFileName, oDlg )
@ 5, 10 BUTTON "Cancel" ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTERED
return cFileName
static function CheckItem( oBrw, cMask, cPath )
local cItem := Eval( oBrw:bLine )[ 1 ]
local cType := Eval( oBrw:bLine )[ 2 ]
local aItems
if cType == "D"
if cItem == ".."
cPath = SubStr( cPath, 1, RAt( "\", cPath ) - 1 )
cPath = SubStr( cPath, 1, RAt( "\", cPath ) - 1 )
aItems = GetItems( cMask, cPath += "\" )
else
aItems = GetItems( cMask, cPath += cItem + "\" )
endif
oBrw:SetArray( aItems )
oBrw:nAt = 1
oBrw:bLine = { || { aItems[ oBrw:nAt, 1 ], aItems[ oBrw:nAt, 2 ],;
aItems[ oBrw:nAt, 3 ], aItems[ oBrw:nAt, 4 ] } }
oBrw:GoTop()
oBrw:Refresh()
endif
return nil
static function GetItems( cMask, cPath )
local aInfo := Directory( cPath + cMask, "D" )
local aItems := {}, n
if Len( cPath ) > 1
AAdd( aItems, { "..", "D", "", "" } )
endif
for n = 1 to Len( aInfo )
if "D" $ aInfo[ n ][ 5 ]
AAdd( aItems, { aInfo[ n ][ 1 ], "D", aInfo[ n ][ 2 ],;
DToC( aInfo[ n ][ 3 ] ) } )
endif
next
for n = 1 to Len( aInfo )
if ! "D" $ aInfo[ n ][ 5 ]
AAdd( aItems, { aInfo[ n ][ 1 ], "F", Str( aInfo[ n ][ 2 ] ),;
DToC( aInfo[ n ][ 3 ] ) } )
endif
next
return aItems
static function SelFile( oBrw, cMask, cPath, cFileName, oDlg )
if Eval( oBrw:bLine )[ 2 ] == "F"
cFileName = cPath + Eval( oBrw:bLine )[ 1 ]
oDlg:End()
else
CheckItem( oBrw, cMask, @cPath )
endif
return nil
// FWPPC own function cGetFile() implementation
#include "FWCE.ch"
function Main()
MsgInfo( cGetFile( "*.*", "\" ) )
return nil
static function cGetFile( cMask, cPath )
local oGetFile := TGetFile():New( cMask, cPath )
return oGetFile:cFileName
CLASS TGetFile
DATA oDlg
DATA oBrw
DATA cMask
DATA cPath
DATA cFileName
DATA aItems
METHOD New( cMask, cPath )
METHOD CheckItem()
METHOD GetItems()
METHOD SelItem()
ENDCLASS
METHOD New( cMask, cPath ) CLASS TGetFile
DEFAULT cMask := "*.*", cPath := "\"
::cMask = cMask
::cPath = cPath
::cFileName = ""
::GetItems()
DEFINE DIALOG ::oDlg TITLE "Please select a file" ;
SIZE 220, 210
@ 0.4, 0.7 LISTBOX ::oBrw ;
FIELDS ::aItems[ ::oBrw:nAt, 1 ], ::aItems[ ::oBrw:nAt, 2 ],;
::aItems[ ::oBrw:nAt, 3 ], ::aItems[ ::oBrw:nAt, 4 ] ;
HEADERS "Name", "T", "Size", "Date" ;
COLSIZES 100, 15, 70, 40 ;
SIZE 100, 82 ;
ON DBLCLICK ::SelItem()
::oBrw:SetArray( ::aItems )
::oBrw:aJustify = { .f., .f., .t., .f. }
::oBrw:bKeyChar = { | nKey | If( nKey == 13, ( ::SelItem(), oBrw:SetFocus() ),) }
@ 5, 3 BUTTON oBtn PROMPT "Ok" ACTION ::SelItem()
@ 5, 10 BUTTON "Cancel" ACTION ::oDlg:End()
ACTIVATE DIALOG ::oDlg CENTERED
return Self
METHOD CheckItem() CLASS TGetFile
local cItem := Eval( ::oBrw:bLine )[ 1 ]
local cType := Eval( ::oBrw:bLine )[ 2 ]
if cType == "D"
if cItem == ".."
::cPath = SubStr( ::cPath, 1, RAt( "\", ::cPath ) - 1 )
::cPath = SubStr( ::cPath, 1, RAt( "\", ::cPath ) )
::GetItems()
else
::cPath += cItem + "\"
::GetItems()
endif
::oBrw:SetArray( ::aItems )
::oBrw:nAt = 1
::oBrw:bLine = { || { ::aItems[ ::oBrw:nAt, 1 ], ::aItems[ ::oBrw:nAt, 2 ],;
::aItems[ ::oBrw:nAt, 3 ], ::aItems[ ::oBrw:nAt, 4 ] } }
::oBrw:GoTop()
::oBrw:Refresh()
endif
return nil
METHOD GetItems() CLASS TGetFile
local aInfo := Directory( ::cPath + ::cMask, "D" ), n
::aItems = {}
if Len( ::cPath ) > 1
AAdd( ::aItems, { "..", "D", "", "" } )
endif
for n = 1 to Len( aInfo )
if "D" $ aInfo[ n ][ 5 ]
AAdd( ::aItems, { aInfo[ n ][ 1 ], "D", aInfo[ n ][ 2 ],;
DToC( aInfo[ n ][ 3 ] ) } )
endif
next
for n = 1 to Len( aInfo )
if ! "D" $ aInfo[ n ][ 5 ]
AAdd( ::aItems, { aInfo[ n ][ 1 ], "F", Str( aInfo[ n ][ 2 ] ),;
DToC( aInfo[ n ][ 3 ] ) } )
endif
next
return nil
METHOD SelItem() CLASS TGetFile
if Eval( ::oBrw:bLine )[ 2 ] == "F"
::cFileName = ::cPath + Eval( ::oBrw:bLine )[ 1 ]
::oDlg:End()
else
::CheckItem()
endif
return nil
Return to FiveWin for Pocket PC
Users browsing this forum: No registered users and 10 guests