Joao, gracias
Comprobar si es un fichero de imagen válido
Buen aporte, se me había olvidado esa opción
Saludos
Pd.: voy a subir en un rato una nueva versión con esa modificación y además ya leerá ficheros con caracteres utf
cnavarro wrote:Joao, gracias
Comprobar si es un fichero de imagen válido
Buen aporte, se me había olvidado esa opción
Saludos
Pd.: voy a subir en un rato una nueva versión con esa modificación y además ya leerá ficheros con caracteres utf
#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
Static oMessage
Static oAnsi
Static oUtf8
Static oUtf16
Static oUnicode
Static oBig
Static oBom
//----------------------------------------------------------------------------//
function Main()
local aImages
local oWnd
local oFont
local oBrush
local oBrw
local nWBrw := 300
FW_SetUnicode( .t. )
HB_CDPSELECT( "ESWIN" )
HB_SETCODEPAGE( "UTF8" ) // Harbour (not xHarbour) to display unicode filenames
SET CENTURY ON
SET EPOCH TO 1980
SET DATE FORMAT TO "DD/MM/YYYY"
aFilesTxt := { "RTF", "ZIP", "TXT", "PRG", "C", "CPP", "H", "CH", "RC", "INI", "BAT", "MAK", "XML", "LOG", "PPO" }
aFilesImg := { "BMP", "PNG", "JPG", "ICO", "DIB", "PCX", "GIF", "WMF" }
aFilesObj := { "DOC", "XLS", "PPT", "PDF", "DOCX", "XLSX" }
aFilesAll := { "DBF" }
//ReadDir()
nFilter := 0
cDirName := hb_CurDrive() + ":\" + CurDir()
aImages := ReadFolder()
DEFINE FONT oFont NAME "VERDANA" SIZE 0,-14
//DEFINE BRUSH oBrush FILE "..\bitmaps\backgrnd\stone.bmp"
DEFINE WINDOW oWnd TITLE " FWExplorer: Visor de Documentos - [ TRichEdit Control ]"
oWnd:SetFont( oFont )
DEFINE MESSAGE oMessage OF oWnd 2015 //TO ""
DEFINE MSGITEM oAnsi PROMPT "Ansi: " + if( !Empty( oRTF ), if( oRTF:lUtf8, " NO", " SI" ), " SI" ) ;
OF oMessage SIZE 100
DEFINE MSGITEM oUtf8 PROMPT "Utf8: " + if( !Empty( oRTF ), if( oRTF:lUtf8, " SI", " NO" ), " NO" ) ;
OF oMessage SIZE 100
DEFINE MSGITEM oUtf16 PROMPT "Utf16: " + if( !Empty( oRTF ), if( oRTF:lUtf16, " SI", " NO" ), " NO" ) ;
OF oMessage SIZE 100
DEFINE MSGITEM oBom PROMPT "Bom: " + if( !Empty( oRTF ), if( oRTF:lBom, " SI", " NO" ), " NO" ) ;
OF oMessage SIZE 100
DEFINE MSGITEM oBig PROMPT "Big Endian: " + if( !Empty( oRTF ), if( oRTF:lBig, " SI", " NO" ), " NO" ) ;
OF oMessage SIZE 100
DEFINE MSGITEM oUnicode PROMPT "Unicode: " + if( !Empty( oRTF ), if( oRTF:lUtf8, " ", " " ), " NO" ) ;
OF oMessage SIZE 100
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 ) )
DEFINE BUTTON OF oWnd:oBar PROMPT "Print" CENTER ACTION ( ;
PrintRtf( .T., oRTF, , ) ) //PrintRtf( lPreview, oRTF, oPrn, aRTF )
@ oWnd:oBar:nHeight, 0 XBROWSE oBrw SIZE nWBrw, -oWnd:oMsgBar:nHeight ;
PIXEL OF oWnd DATASOURCE aImages COLUMNS 1 CELL LINES NOBORDER AUTOSORT
WITH OBJECT oBrw
:l2007 := .F.
: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:oBar: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.
//local cFile := AnsiToWide( AllTrim( oBrw:aRow[ 2 ] ) )
local cFile := if( Len( oBrw:aArrayData ) > 0, AllTrim( oBrw:aRow[ 2 ] ), "" )
local aFiles := {}
local cText := ""
local oError
if !Empty( cFile )
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 !Empty( Ascan( aFilesAll, Upper( cFileExt( oBrw:aRow[ 2 ] ) ) ) )
nOpc := 4
endif
endif
endif
oRTF:SetClear()
oRTF:SelectAll()
oRTF:Del()
//TRY
Do Case
Case nOpc = 0
lText := .T.
oRTF:SetText( "<File Format not supported>" )
Case nOpc = 1
if Upper( cFileExt( cFile ) ) <> "RTF"
if Upper( cFileExt( cFile ) ) == "ZIP"
aFiles := hb_GetFilesInZip( cFile )
if !Empty( aFiles )
cText += Upper( cFileNoPath( cFile ) ) + "=> " + CRLF
AEVal( aFiles, { | a | cText += Chr( 9 ) + Chr( 9 ) + Chr( 9 ) + a + CRLF } )
lText := .T.
oRTF:SetText( cText )
endif
else
lText := .T.
cText := MemoRead( cFile )
oRTF:DocIsUtf8( cText, )
//? oRTF:lUtf8, oRTF:lUtf16, oRTF:lBom, oRTF:lBig
if IsUtf8( cText )
oRTF:SetText( cText )
//oRTF:SetText( AnsiToWide( Right( cText, Len( cText ) - 3 ) ) )
//oRTF:SetText( Utf16toUtf8( cText ) )
else
oRTF:SetText( cText )
endif
endif
else
oRTF:LoadFromRTFFile( cFile )
endif
Case nOpc = 2
if FITypeFromMemory( MemoRead( cFile ) ) >= 0
oRTF:InsertPictureFile( cFile )
else
oRTF:SetText( "<File Format Image not valid>" )
endif
Case nOpc = 3
oRTF:InsertObject( cFile ) //+ Chr( 0 ) )
Case nOpc = 4
lText := .T.
oRTF:ViewDbf( cFile )
Otherwise
oRTF:LoadRTF( cFile )
EndCase
/*
CATCH oError
MsgInfo( "File Explorer " + ";" + ;
"Error: " + TRANSFORM(oError:GenCode, NIL) + ";" + ;
"SubC: " + TRANSFORM(oError:SubCode, NIL) + ";" + ;
"OSCode: " + TRANSFORM(oError:OsCode, NIL) + ";" + ;
"SubSystem: " + TRANSFORM(oError:SubSystem, NIL) + ";" + ;
"Message: " + oError:Description + " "+ cFile )
END
*/
oAnsi:SetText( "Ansi: " + if( oRTF:lUtf8, " NO", " SI" ) )
oUtf8:SetText( "Utf8: " + if( oRTF:lUtf8, " SI", " NO" ) )
oUtf16:SetText( "Utf16: " + if( oRTF:lUtf16, " SI", " NO" ) )
oBom:SetText( "Bom: " + if( oRTF:lBom, " SI", " NO" ) )
oBig:SetText( "Big Endian: " + if( oRTF:lBig, " SI", " NO" ) )
oUnicode:SetText( "Unicode: " + if( oRTF:lUtf8, " ", " " ) )
oAnsi:Refresh()
oUtf8:Refresh()
oUtf16:Refresh()
oBig:Refresh()
oUnicode:Refresh()
oBom:Refresh()
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
//----------------------------------------------------------------------------//
Function PrintRtf( lPreview, oRTF, oPrn, aRTF )
local lPrn
DEFAULT aRTF := { 100, 1000, 510, 1490, 1990 } // { nFrom, nTop, nLeft, nBottom }
DEFAULT lPreview := .f.
if Empty( oPrn )
lPrn := .F.
if lPreview
PRINT oPrn NAME "FWH RICHEDIT FILE" PREVIEW
else
PRINT oPrn NAME "FWH RICHEDIT FILE"
endif
if Empty( oPrn:hDC )
MsgStop( "Printer not ready!" )
return nil
endif
else
lPrn := .T.
endif
if !lPrn
PAGE
CursorWait()
oPrn:Box( aRTF[ 2 ], 500, aRTF[ 2 ] + 1000, 1500 )
aRTF := REPrintBox5( oRTF:hWnd, If( lPreview, oPrn:hDCOut, oPrn:hDC ), ;
oRTF:IsSelection(), ;
aRTF[ 2 ] + 10, 510, 1490, aRTF[ 2 ] + 990, aRTF[ 1 ] )
CursorArrow()
ENDPAGE
ENDPRINT
else
oPrn:Box( aRTF[ 2 ], aRTF[ 3 ], aRTF[ 4 ], aRTF[ 5 ] )
aRTF := REPrintBox5( oRTF:hWnd, If( lPreview, oPrn:hDCOut, oPrn:hDC ), ;
oRTF:IsSelection(), ;
aRTF[ 2 ], aRTF[ 3 ], aRTF[ 4 ], aRTF[ 5 ], aRTF[ 1 ] )
endif
return aRTF
//----------------------------------------------------------------------------//
#include "Fivewin.ch"
Function Main()
local oWndPdf
local oPdf
DEFINE WINDOW oWndPdf TITLE "Visualizar/Imprimir PDF - Adobe Reader"
// oPdf := ShowPdf1( oWndPdf ) // Tambien funciona
ACTIVATE WINDOW oWndPdf MAXIMIZED ;
ON INIT ( oPdf := ShowPDF1( oWndPdf ) ) ;
VALID ( oPdf:End(), .T. )
Return nil
//----------------------------------------------------------------------------//
FUNCTION ShowPDF1( oWnd )
local oPdf
oPdf := TActiveX():New( oWnd, "AcroPDF.PDF.1" )
oPdf:nTop := 5
oPdf:nLeft := 5
oPdf:nWidth := 500 //
oPdf:nHeight := 700 //¿?
//oWnd:oClient := oPdf
//oWnd:oTop := oPdf
oWnd:oLeft := oPdf
//oWnd:oRight := oPdf
//oWnd:oBottom := oPdf
//oPdf:SetViewRect( 0, 0, 500, 600 )
//oPdf:Do( "SetShowToolbar", .T. )
oPdf:Do( "LoadFile", ".\SCINTILLA DOCUMENTATION.pdf" )
oPdf:Do( "SetCurrentPage", 1 )
oPdf:SetZoom( 80 )
RETURN oPdf
//----------------------------------------------------------------------------//
oWord := CreateObject( "Word.Application" )
DEFINE WINDOW oWnd TITLE x_title
oActiveX = TActiveX():New( oWnd, "AcroPDF.PDF.1" )
oWnd:oClient = oActiveX // To fill the entire window surface
//oActiveX:Do( "SetShowToolbar", .T. ) //esto no me muestra nada diferente
oActiveX:Do( "LoadFile", x_file )
oActiveX:Do( "SetCurrentPage", 1 )
ACTIVATE WINDOW oWnd MAXIMIZED
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: Google [Bot] and 36 guests