He desarrollado un peque帽o programa como ejemplo del uso del control TRichEdit5, para visualizar el contenido de los ficheros
// FWExplorer
// Cnl - 10/06/2016
#include "fivewin.ch"
#include "RichEdi5.ch"
//----------------------------------------------------------------------------//
REQUEST HB_CODEPAGE_ESWIN
Static oRTF
Static cRTF
Static nFilter
Static cDirName
Static aFilesTxt
Static aFilesImg
Static aFilesObj
Static aFilesAll
//----------------------------------------------------------------------------//
function Main()
聽 聽local aImages
聽 聽local oWnd
聽 聽local oFont
聽 聽local oBrush
聽 聽local oBrw
聽 聽local nWBrw 聽 := 300
聽 聽aFilesTxt := { "RTF", "TXT", "PRG", "C", "CPP", "H", "CH", "RC", "INI", "BAT", "MAK", "XML", "LOG" }
聽 聽aFilesImg := { "BMP", "PNG", "JPG", "ICO", "DIB", "PCX", "GIF", "WMF" }
聽 聽aFilesObj := { "DOC", "XLS", "PPT", "PDF", "DOCX", "XLSX" }
聽 聽aFilesAll := { "DBF" }
聽 聽FW_SetUnicode( .t. )
聽 聽HB_CDPSELECT( "ESWIN" )
聽 聽HB_SETCODEPAGE( "UTF8" ) // Harbour (not xHarbour) to display unicode filenames
聽 聽
聽 聽nFilter 聽:= 0
聽 聽cDirName := hb_CurDrive() + ":\" + CurDir()
聽 聽aImages 聽:= ReadFolder()
聽 聽DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
聽 聽//DEFINE BRUSH oBrush FILE "..\bitmaps\backgrnd\stone.bmp"
聽 聽
聽 聽DEFINE WINDOW oWnd TITLE " FWExplorer: Visor de Documentos - [ TRichEdit Control ]"
聽 聽oWnd:SetFont( oFont )
聽 聽
聽 聽SET MESSAGE OF oWnd TO "" 2015
聽 聽DEFINE BUTTONBAR oWnd:oBar SIZE 70, 32 2015
聽 聽DEFINE BUTTON OF oWnd:oBar PROMPT "Exit" 聽 CENTER ACTION ( oWnd:End() ) 聽
聽 聽DEFINE BUTTON OF oWnd:oBar PROMPT "Rtf" 聽 聽CENTER ACTION ( nFilter := 1, ;
聽 聽 聽 聽 聽 oBrw:aArrayData := ReadFolder(), oBrw:Refresh( .t. ), VerDoc( oBrw ) )
聽 聽DEFINE BUTTON OF oWnd:oBar PROMPT "Text" 聽 CENTER ACTION ( nFilter := 11, ;
聽 聽 聽 聽 聽 oBrw:aArrayData := ReadFolder(), oBrw:Refresh( .t. ), VerDoc( oBrw ) )
聽 聽DEFINE BUTTON OF oWnd:oBar PROMPT "Images" CENTER ACTION ( nFilter := 2 , ;
聽 聽 聽 聽 聽 oBrw:aArrayData := ReadFolder(), oBrw:Refresh( .t. ), VerDoc( oBrw ) )
聽 聽DEFINE BUTTON OF oWnd:oBar PROMPT "Object" CENTER ACTION ( nFilter := 3 , ;
聽 聽 聽 聽 聽 oBrw:aArrayData := ReadFolder(), oBrw:Refresh( .t. ), VerDoc( oBrw ) )
聽 聽DEFINE BUTTON OF oWnd:oBar PROMPT "Dbf" 聽 聽CENTER ACTION ( nFilter := 4 , ;
聽 聽 聽 聽 聽 oBrw:aArrayData := ReadFolder(), oBrw:Refresh( .t. ), VerDoc( oBrw ) )
聽 聽DEFINE BUTTON OF oWnd:oBar PROMPT "All" 聽 聽CENTER ACTION ( nFilter := 0 , ;
聽 聽 聽 聽 聽 oBrw:aArrayData := ReadFolder(), oBrw:Refresh( .t. ), VerDoc( oBrw ) )
聽 聽DEFINE BUTTON OF oWnd:oBar PROMPT "Folder" CENTER ;
聽 聽 聽 ACTION ( cDirName := cGetDir( "Select Folder", GetCurDir() + "\" ), ;
聽 聽 聽 聽 聽 聽 聽 聽SetCurDir( cDirName ), ;
聽 聽 聽 聽 聽 聽 聽 聽oBrw:aArrayData := ReadFolder(), oBrw:Refresh( .t. ), VerDoc( oBrw ) )
聽 聽@ oWnd:nHeight,0 XBROWSE oBrw SIZE nWBrw,-oWnd:nHeight ;
聽 聽 聽 PIXEL OF oWnd DATASOURCE aImages COLUMNS 1 CELL LINES NOBORDER
聽 聽WITH OBJECT oBrw
聽 聽 聽 :aCols[ 1 ]:cHeader := "Files"
聽 聽 聽 :nStretchCol 聽 := 1
聽 聽 聽 :bChange 聽 聽 聽 := { | o | VerDoc( o ) }
聽 聽 聽 :bLDblClick 聽 聽:= { | o | LookOthers( oBrw ) }
聽 聽 聽 :bClrStd 聽 聽 聽 := { || { If( oBrw:aRow[ 3 ] == 1, CLR_BLUE, CLR_HRED ), CLR_WHITE } }聽
:bKeyDown := { |n,f| if( n = VK_RETURN, Eval( oBrw:bLDblClick ), ) }
聽 聽 聽 :CreateFromCode()
聽 聽END
聽 聽WITH OBJECT oWnd
聽 聽 聽 :nWidth 聽 聽 := ScreenWidth() 聽* 0.6
聽 聽 聽 :nHeight 聽 聽:= ScreenHeight() * 0.6
聽 聽END
聽 聽@ oWnd:nHeight, nWBrw RICHEDIT5 oRTF VAR cRTF OF oWnd ;
聽 聽 聽SIZE oWnd:nWidth - (nWBrw+18), oBrw:nHeight*1.82 PIXEL NOBORDER HSCROLL
聽 聽ACTIVATE WINDOW oWnd CENTERED ON INIT VerDoc( oBrw ) ;
聽 聽ON PAINT ( oRTF:SetSize( oWnd:nWidth - (nWBrw+18), oBrw:nHeight-2 ) ) //ON INIT oWnd:SetControl( oRTF )
聽 聽
聽 聽RELEASE FONT oFont
聽 聽//RELEASE BRUSH oBrush
return nil
//----------------------------------------------------------------------------//
Function VerDoc( oBrw )
聽 聽local nOpc 聽 聽 聽:= 0
聽 聽local lText 聽 聽 := .F.
聽 聽
聽 聽if !Empty( Ascan( aFilesTxt, Upper( cFileExt( oBrw:aRow[ 2 ] ) ) ) )
聽 聽 聽 nOpc 聽:= 1
聽 聽endif
聽 聽if Empty( nOpc )
聽 聽 聽 if !Empty( Ascan( aFilesImg, Upper( cFileExt( oBrw:aRow[ 2 ] ) ) ) )
聽 聽 聽 聽 聽nOpc 聽:= 2
聽 聽 聽 endif
聽 聽endif
聽 聽if Empty( nOpc )
聽 聽 聽 if !Empty( Ascan( aFilesObj, Upper( cFileExt( oBrw:aRow[ 2 ] ) ) ) )
聽 聽 聽 聽 聽nOpc 聽:= 3
聽 聽 聽 endif
聽 聽endif
聽 聽
聽 聽oRTF:SetClear()
聽 聽oRTF:SelectAll()
聽 聽oRTF:Del()
聽 聽Do Case
聽 聽 聽 Case nOpc = 1
聽 聽 聽 聽 聽if Upper( cFileExt( oBrw:aRow[ 2 ] ) ) <> "RTF"
聽 聽 聽 聽 聽 聽 lText 聽:= .T.
聽 聽 聽 聽 聽 聽 oRTF:SetText( MemoRead( AllTrim( oBrw:aRow[ 2 ] ) ) )
聽 聽 聽 聽 聽else
聽 聽 聽 聽 聽 聽 oRTF:LoadFromRTFFile( AllTrim( oBrw:aRow[ 2 ] ) ) 聽 聽 聽 聽
聽 聽 聽 聽 聽endif
聽 聽 聽
聽 聽 聽 Case nOpc = 2
聽 聽 聽
聽 聽 聽 聽 聽oRTF:InsertPictureFile( AllTrim( oBrw:aRow[ 2 ] ) )
聽 聽 聽 Case nOpc = 3
聽 聽 聽 聽 聽
聽 聽 聽 聽 聽oRTF:InsertObject( AllTrim( oBrw:aRow[ 2 ] ) + Chr(0) ) 聽 聽 聽
聽 聽 聽 聽 聽
聽 聽 聽 Otherwise
聽 聽 聽
聽 聽 聽 聽 聽oRTF:LoadRTF( AllTrim( oBrw:aRow[ 2 ] ) ) 聽 聽 聽
聽 聽EndCase
Return nil
//----------------------------------------------------------------------------//
Static Function LookOthers( oBrw )
聽 聽local nOpc 聽 聽 聽:= 0
聽 聽
聽 聽if !Empty( Ascan( aFilesTxt, Upper( cFileExt( oBrw:aRow[ 2 ] ) ) ) )
聽 聽 聽 nOpc 聽:= 1
聽 聽endif
聽 聽if Empty( nOpc )
聽 聽 聽 if !Empty( Ascan( aFilesImg, Upper( cFileExt( oBrw:aRow[ 2 ] ) ) ) )
聽 聽 聽 聽 聽nOpc 聽:= 2
聽 聽 聽 endif
聽 聽endif
聽 聽if Empty( nOpc )
聽 聽 聽 if !Empty( Ascan( aFilesObj, Upper( cFileExt( oBrw:aRow[ 2 ] ) ) ) )
聽 聽 聽 聽 聽nOpc 聽:= 3
聽 聽 聽 endif
聽 聽endif
聽 聽if Empty( nOpc )
聽 聽 聽 if Upper( cFileExt( oBrw:aRow[ 2 ] ) ) = "DBF"
聽 聽 聽 聽 聽XBrowse( oBrw:aRow[ 2 ] )
聽 聽 聽 else
聽 聽 聽 聽 聽MsgInfo( "Format not supported", oBrw:aRow[ 2 ] )
聽 聽 聽 endif
聽 聽endif
Return nil
//----------------------------------------------------------------------------//
static function ReadFolder()
聽 聽local aImages 聽:= {}
聽 聽local aSub 聽 聽 := { "*" }
聽 聽local c
聽 聽local x
聽 聽local cPath 聽 聽:= cDirName
聽 聽local aDir
聽 聽local aAlls 聽 聽:= {}
聽 聽AEVal( aFilesTxt, { | a | AAdd( aAlls, a ) } )
聽 聽AEVal( aFilesImg, { | a | AAdd( aAlls, a ) } )
聽 聽AEVal( aFilesObj, { | a | AAdd( aAlls, a ) } )
聽 聽AEVal( aFilesAll, { | a | AAdd( aAlls, a ) } )
聽 聽Do Case
聽 聽 聽 Case nFilter = 0
聽 聽 聽 聽 聽 聽aSub 聽 聽:= { "*" }
聽 聽 聽 Case nFilter = 1
聽 聽 聽 聽 聽 聽aSub 聽 聽:= { "rtf" }
聽 聽 聽 Case nFilter = 11
聽 聽 聽 聽 聽 聽aSub 聽 聽:= aClone( aFilesTxt )
聽 聽 聽 聽 聽 聽aSub 聽 聽:= ADel( aSub, 1 )
聽 聽 聽 聽 聽 聽ASize( aSub, Len( aSub ) - 1 )
聽 聽 聽 Case nFilter = 2
聽 聽 聽 聽 聽 聽aSub 聽 聽:= aClone( aFilesImg )
聽 聽 聽 Case nFilter = 3
聽 聽 聽 聽 聽 聽aSub 聽 聽:= aClone( aFilesObj )
聽 聽 聽 Case nFilter = 4
聽 聽 聽 聽 聽 聽aSub 聽 聽:= { "dbf" }
聽 聽EndCase
聽 聽
聽 聽for each c in aSub
聽 聽 聽 aDir 聽 聽 := Directory( cPath + "\*." + c )
聽 聽 聽 AEval( aDir, { | a | AAdd( aImages, { Lower( a[ 1 ] ), ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽Lower( TrueName( cPath + "\" + a[ 1 ] ) ), 0 } ) } )
聽 聽next
聽 聽For x = 1 to Len( aImages )
聽 聽 聽 if !Empty( Ascan( aAlls, Upper( cFileExt( aImages[ x ][ 2 ] ) ) ) )
聽 聽 聽 聽 聽aImages[ x ][ 3 ] := 1
聽 聽 聽 endif
聽 聽Next x
聽 聽
聽 聽ASort( aImages,,,{ | x, y | Lower( x[ 1 ] ) < Lower( y[ 1 ] ) } )
return aImages
//----------------------------------------------------------------------------//