Code: Select all | Expand
/*-----------------------------------------------------------------------------
Fichero : xBLite.prg
Proyecto : XBackupLite (utilidad de compresion para datos de aplicaicones)
Objetivo : Prueba del poder del compilador xHarbour - 0.99.61
Fecha : 2004.03.06
Autor : Carlos Vargas - Nicaragua
Modificado : Por JoÆo Santos em: 15/09/2006 - SÆo Paulo - Brazil
Emails : kapiabafwh@gmail.com
Derechos : Todos los derechos reservados
Gracias : Kleyber Derick - Valdir Brando y Carlos Vargas. Saludos.
Cambios : Ahora Usando TSBROWSE.PRG Directamente Sin la LIB. Bien Mejor.
-----------------------------------------------------------------------------*/
#Include "xBlite.Ch" //-> Cont‚m os Arquivos de Cabe‡alho Necess rios
//-> Para los Folders - Abas(orelhas) dos Folders - P ginas
#DEFINE PAGE1 oFolder:aDialogs[ 1 ]
#DEFINE PAGE2 oFolder:aDialogs[ 2 ]
#DEFINE PAGE3 oFolder:aDialogs[ 3 ]
#Define CLR_AMARELO nRGB( 255, 255, 230 ) //--> Amarelo Para o Fundo
#Define CLR_VERMELHO nRGB( 255, 000, 000 ) //--> Vermelho Para a Letra
#Define CLR_BOMBOM nRGB( 165, 42, 42 ) //--> Marrom BomBom
#Define CLR_MARROM nRGB( 235, 202, 171 ) //--> Marrom Normal
STATIC nOpcaoRadio := 2 //-> Op‡Æo do Radio da Pesquisa
/*Procedimiento principal*/
FUNCTION XBLITE() //->MAIN()
MEMVAR cPRGPATH, cFILEPATH
SndPlaySound( "Init.Wav" )
cPRGPATH := cFILEPATH(GETMODULEFILENAME(GETINSTANCE()))
cPRGPATH := cShortName(cPRGPATH) //-> Modified / Modificado al final
XBACKUPLITE()
lCHDIR(cPRGPATH)
RETURN NIL
/* Backupeador */
FUNCTION XBackupLite()
LOCAL oIcon
LOCAL oFont, oFnt, oSayBtn01, oSayBtn02
LOCAL oFontT
LOCAL oDlg
LOCAL oFolder
LOCAL oBrowseZip
LOCAL oBrowseUnZip
LOCAL IDCor
LOCAL oBrush
LOCAL oDbfVendedor
LOCAL NOME_ARQ, NREGISTRO
LOCAL oRadMenu
LOCAL cTitle := OemToAnsi( "Sistema de Backup - Professional Edition - " )
LOCAL dDataDia := DTOC( DATE() )
MEMVAR PANY
/*variables de seccion zip*/
PRIVATE oFolderSourceZip, cFolderSourceZip
PRIVATE oGetFolderSourceZip
PRIVATE oIncludeSubFolder, lIncludeSubFolder
PRIVATE oZipToFloppy, lZipToFloppy
PRIVATE oFolderTargetZip, cFolderTargetZip
PRIVATE oGetFolderTargetZip
PRIVATE oFilesCountZip, nFilesZipped, nTotalFilesToZip
PRIVATE nSizeFilesToZip
PRIVATE oDoCompress
PRIVATE acFilesToZip := { { "", 0, ctod(""), "" } }
/*variables de seccion unzip*/
PRIVATE oSourceUnZip, cSourceUnZip
PRIVATE oGetSourceUnZip
PRIVATE oUnZipWithPath, lUnZipWithPath
PRIVATE oGetFolderTargetUnZip
PRIVATE oFolderTargetUnZip, cFolderTargetUnZip
PRIVATE oFilesCountUnZip, nFilesUnZipped, nTotalFilesToUnZip
PRIVATE nSizeFilesToUnZip,nSizeFilesToUnZipC
PRIVATE oDoUnCompress
PRIVATE acFilesToUnZip := { { "", 0, 0, ctod(""), "" } }
PUBLIC XFANTASIA, XVERSAO, XNOMEEMP
/*valores inciaiales de seccion zip*/
cFolderSourceZip := ""
cFolderTargetZip := ""
lIncludeSubFolder := FALSE
lZipToFloppy := FALSE
nTotalFilesToZip := 0
nSizeFilesToZip := 0
/*valores inciaiales de seccion unzip*/
cSourceUnZip := ""
cFolderTargetUnZip := ""
lUnZipWhitPath := TRUE
nTotalFilesToUnZip := 0
nSizeFilesToUnZip := 0
nSizeFilesToUnZipC := 0
/*definiciones de objetos icon y font*/
DEFINE FONT oFont NAME GetSysFont() SIZE 0, -11 BOLD
DEFINE FONT oFnt NAME GetSysFont() SIZE 0, -12 BOLD
DEFINE FONT oFontT NAME GetSysFont() SIZE 0, -16 BOLD
DEFINE ICON oIcon NAME "XBACKUPLITE"
DEFINE BRUSH oBrush FILE "COMPAR.BMP"
/*definicion de dialogo*/
DEFINE DIALOG oDlg NAME "XBACKUPLITE" ;
TITLE cTitle + ALLTRIM( XFANTASIA ) + " - " + "Data: " + dDataDia;
FONT oFont ICON oIcon ;
BRUSH oBrush TRANSPARENT
oDlg:lHelpIcon := .F.
/*logotipo del programa*/
REDEFINE BITMAP ;
ID 101 OF oDlg ;
NAME "xbl_logo" ;
ADJUST
/*redefinicion de folder con 2 paginas*/
REDEFINE FOLDER oFolder ID 102 OF oDlg ;
PROMPT "Arqui&var","Res&taurar","A&juda" ;
DIALOGS "PageBackup","PageRestore","PageAbout" ;
BITMAPS "BUSCAR", "RESTAURAR", "BTN_AJUDA" ;
TABCOLOR CLR_BLACK ;
FOCUSCOLOR CLR_VERMELHO ;
COLORS nRGB( 127, 127, 127 ), nRGB( 255, 215, 000 ) ;
ADJUST
//-> CheckBox e Radios Assume a Cor do Dialogo - CONTROL.PRG METODO COLORS()
//-> METHOD Colors( hDC ) CLASS TControl - Mesma cor do Fundo do 1§ Folder
oFolder:SetOption(1)
oFolder:aEnable := { .T., .T., .T. } //-> Inibe as Orelhas(Abas)
oFolder:Show()
oFolder:lWin95Look := .F. //-> Modifica o Estilo da Orelha.
//-> Cores no Folder - Colores en los Folders
oFolder:aDialogs[1]:bPainted := { || FillWnd ( oFolder:aDialogs[1], ;
nRGB( 255, 215, 0 ) ) }
oFolder:aDialogs[2]:bPainted := { || FillWnd ( oFolder:aDialogs[2], ;
nRGB( 255, 130, 170 ) ) }
oFolder:aDialogs[3]:bPainted := { || FillWnd ( oFolder:aDialogs[3], ;
nRGB( 255, 255, 200 ) ) }
//--- Melhoria visual nos say's
For IDCor=401 TO 401
REDEFINE SENSITIVE SAY ID iDcor ;
COLOR CLR_HRED ;
OF oFolder:aDialogs[ 1 ] ;
UPDATE
Next IDCor // By Ednaldo Rolim - Yes!
//--- Melhoria visual nos say's
For IDCor=402 TO 402
REDEFINE SENSITIVE SAY ID iDcor ;
COLOR CLR_HCYAN ;
OF oFolder:aDialogs[ 1 ] ;
UPDATE
Next IDCor // By Ednaldo Rolim - Yes!
For IDCor=401 TO 401
REDEFINE SENSITIVE SAY ID iDcor ;
COLOR CLR_WHITE ;
OF oFolder:aDialogs[ 2 ] ;
UPDATE
Next IDCor // By Ednaldo Rolim - Yes!
For IDCor=402 TO 402
REDEFINE SENSITIVE SAY ID iDcor ;
COLOR CLR_HCYAN ;
OF oFolder:aDialogs[ 2 ] ;
UPDATE
Next IDCor // By Ednaldo Rolim - Yes!
For IDCor=401 TO 413
REDEFINE SENSITIVE SAY ID iDcor ;
COLOR CLR_BLACK ;
OF oFolder:aDialogs[ 3 ] ;
UPDATE
Next IDCor // By Ednaldo Rolim - Yes!
REDEFINE DYNAMIC SAY oSayBtn01 ID 801 OF oFolder:aDialogs[ 1 ] ;
PROMPT ( OemToAnsi( " Click no BotÆo Abaixo" +;
"(Cƒmera) Para Escolher a Pasta(Diret¢rio)"+;
" de Origem Onde EstÆo as Informa‡äes " +;
"Para Arquivar em Disqute, PenDrive, Etc. "));
CENTERED HORIZONTAL SCROLL SPEED 53 WRAP ;
COLORS nRGB( 000, 000, 000 ), nRGB( 255, 215, 000 ) ;
FONT oFnt
REDEFINE DYNAMIC SAY oSayBtn01 ID 802 OF oFolder:aDialogs[ 1 ] ;
PROMPT ( OemToAnsi( " Click no BotÆo Abaixo"+ ;
"(Cƒmera) Para Escolher a Pasta(Diret¢rio)"+;
" de Destino Onde FicarÆo as Informa‡äes " +;
"Arquivadas no Perif‚rico Escolhido. " +;
"CDRW->(NERO), Disquetes, PenDrive. " ) ) ;
CENTERED HORIZONTAL SCROLL SPEED 53 WRAP ;
COLORS nRGB( 000, 000, 000 ), nRGB( 255, 215, 000 ) ;
FONT oFnt
/*redefinicion de controles de pagina #1*/
REDEFINE GET oFolderSourceZip ;
VAR cFolderSourceZip ;
ID 101 OF PAGE1 ;
READONLY ;
COLORS CLR_VERMELHO, CLR_AMARELO
//-> BotÆo da Busca do Diret¢rio de Origem
/* //-> GERANDO DE BCLRGRAD - TROQUEI BTNBMP POR BUTTONBMP
// REDEFINE BTNBMP oGetFolderSourceZip ID 102 ;
// RESOURCE "BUSCAR" OF PAGE1 UPDATE ;
// ACTION ( GetDirToZip( oBrowseZip ) )
*/
REDEFINE BUTTONBMP oGetFolderSourceZip ID 102 OF PAGE1 UPDATE ;
BITMAP "BUSCAR" ;
ACTION ( GetDirToZip( oBrowseZip ) )
oGetFolderSourceZip:cToolTip := OemToAnsi( "Selecionar a Origem " + ;
"(Diret¢rio) da C¢pia" )
REDEFINE BUTTON oRadMenu VAR nOpcaoRadio ID 201 ;
OF oFolder:aDialogs[ 1 ] ;
ACTION ( MOSTRA_HELP( oFolder ) )
oRadMenu:cToolTip := OemToAnsi( "Pequeno Help Para o Usu rio" )
REDEFINE CHECKBOX oIncludeSubFolder VAR lIncludeSubFolder ;
COLORS nRgb( 250, 0 , 0 ), ;
nRgb( 72, 180, 215 ) ;
ID 103 OF PAGE1 ;
ON CHANGE GetFilesToZip( cFolderSourceZip, oBrowseZip )
oIncludeSubFolder:cToolTip := OemToAnsi( "InclusÆo das Sub Pastas " + ;
"do Diret¢rio da C¢pia " )
REDEFINE BROWSE oBrowseZip ;
ID 104 OF PAGE1 FONT oFont ;
COLOR CLR_BLACK, CLR_YELLOW01
oBrowseZip:SetArray( acFilesToZip )
ADD COLUMN TO oBrowseZip ARRAY ELEMENT 1 ;
TITLE "Nome do Arquivo" SIZE 140 ;
FOOTER { || TRANSFORM( nTotalFilesToZip, "99,999 Arquivos" ) }
ADD COLUMN TO oBrowseZip ARRAY ELEMENT 2 ;
TITLE "Tamanho" ;
SIZE 100 ;
PICTURE "9,999,999.99 Kb" ;
FOOTER { || transform( nSizeFilesToZip, "9,999,999.99 Kb" ) } ;
ALIGN DT_RIGHT
ADD COLUMN TO oBrowseZip ARRAY ELEMENT 3 ;
TITLE "Data" SIZE 70 ;
ALIGN DT_CENTER
ADD COLUMN TO oBrowseZip ARRAY ELEMENT 4 ;
TITLE "Path(Caminho)" SIZE 180
/*propiedades de objeto browse*/
WITH OBJECT oBrowseZip
:nFreeze := 1
:lNoVScroll := .F.
:nHeightHead := 18
:nHeightCell := 18
:nHeightFoot := 18
:SetColor( { CLR_HEADF, CLR_FOOTF }, { {|| CLR_BLUE }, {|| CLR_RED } } )
END WITH
REDEFINE CHECKBOX oZipToFloppy ;
VAR lZipToFloppy ;
COLORS nRgb( 250, 0 , 0 ), ;
nRgb( 72, 180, 215 ) ;
ID 105 OF PAGE1 ;
ON CHANGE ( cFolderTargetZip := "", oFolderTargetZip:Refresh() )
oZipToFloppy:cToolTip := OemToAnsi( "Escolha se Quer a C¢pia em Disquetes" )
REDEFINE GET oFolderTargetZip ;
VAR cFolderTargetZip ;
ID 106 OF PAGE1 ;
READONLY ;
COLORS CLR_VERMELHO, CLR_AMARELO
/*
//-> Botao Para Selecior a Pasta de Origem, Onde Estao os Arquivos
REDEFINE BTNBMP oGetFolderTargetZip ID 107 ;
RESOURCE "BUSCAR" OF PAGE1 UPDATE ;
ACTION ( SetFileZip() )
*/
//-> PROBLEMAS COM BCLRGRAD
REDEFINE BUTTONBMP oGetFolderTargetZip ID 107 OF PAGE1 UPDATE ;
BITMAP "BUSCAR" ;
ACTION ( SetFileZip() )
oGetFolderTargetZip:cToolTip := OemToAnsi( "Selecionar o Destino " + ;
"(Diret¢rio) dos " + ;
"Arquivos Para Copiar" )
oFilesCountZip := TProgress():Redefine( 108, PAGE1 )
REDEFINE BUTTON oDoCompress ;
ID 109 OF PAGE1 ;
ACTION ( DOMAKEZIP( oFolder, oBrowseZip ) )
oDoCompress:cToolTip := ( OemToAnsi( "Gravar os Arquivos no " + ;
"Diret¢rio(Pasta) de Destino" ) )
/*redefinicion de controles de pagina #2*/
REDEFINE GET oSourceUnZip ;
VAR cSourceUnZip ;
ID 101 OF PAGE2 ;
READONLY ;
COLORS CLR_VERMELHO, CLR_AMARELO
/*
//-> Botao da Pasta de Destino Para Onde Vai o BACKUP - Copia
REDEFINE BTNBMP oGetSourceUnZip ID 102 ;
RESOURCE "BUSCAR" OF PAGE2 UPDATE ;
ACTION ( GetFileToUnZip( oBrowseUnZip ) )
*/
REDEFINE BUTTONBMP oGetSourceUnZip ID 102 OF PAGE2 UPDATE ;
BITMAP "BUSCAR" ;
ACTION ( GetFileToUnZip( oBrowseUnZip ) )
oGetSourceUnZip:cToolTip := OemToAnsi( "Selecionar a Origem(Diret¢rio) "+;
"Para Onde Vai o BACKUP(Destino)" )
REDEFINE BROWSE oBrowseUnZip ;
ID 103 OF PAGE2 FONT oFont ;
COLOR CLR_BLACK, CLR_YELLOW01
oBrowseUnZip:SetArray( acFilesToUnZip )
ADD COLUMN TO oBrowseUnZip ARRAY ELEMENT 1 ;
TITLE "Nome" SIZE 140 ;
FOOTER { || transform( nTotalFilesToUnZip, "99,999 Arquivos" ) }
ADD COLUMN TO oBrowseUnZip ARRAY ELEMENT 2 ;
TITLE "Tamanho Normal" ;
SIZE 100 ;
PICTURE "9,999,999.99 Kb" ;
FOOTER { || transform( nSizeFilesToUnZip, "9,999,999.99 Kb" ) } ;
ALIGN DT_RIGHT
ADD COLUMN TO oBrowseUnZip ARRAY ELEMENT 3 ;
TITLE "Tamanho Comp." ;
SIZE 100 ;
PICTURE "9,999,999.99 Kb" ;
FOOTER { || transform( nSizeFilesToUnZipC, "9,999,999.99 Kb" ) } ;
ALIGN DT_RIGHT
ADD COLUMN TO oBrowseUnZip ARRAY ELEMENT 4 ;
TITLE "Data" SIZE 70 ;
ALIGN DT_CENTER
ADD COLUMN TO oBrowseUnZip ARRAY ELEMENT 5 ;
TITLE "Path" SIZE 180
/*propiedades de objeto browse*/
WITH OBJECT oBrowseUnZip
:nFreeze := 1
:lNoVScroll := .F.
:nHeightHead := 18
:nHeightCell := 18
:nHeightFoot := 18
:SetColor( { CLR_HEADF, CLR_FOOTF }, { {|| CLR_BLUE }, {|| CLR_RED } } )
END WITH
REDEFINE CHECKBOX oUnZipWithPath ;
VAR lUnZipWithPath ;
COLORS nRgb( 250, 0 , 0 ), ;
nRgb( 72, 180, 215 ) ;
ID 104 OF PAGE2
oUnZipWithPath:cToolTip := OemToAnsi( "Escolha se Quer Restaurar a "+ ;
"C¢pia nos Diret¢rios de Origem "+ ;
"Informe o Diret¢rio de Origem. " )
REDEFINE GET oFolderTargetUnZip ;
VAR cFolderTargetUnZip ;
ID 105 OF PAGE2 ;
READONLY ;
COLORS CLR_VERMELHO, CLR_AMARELO
/* //-> PROBELMAS COM BCLRGRAD
//-> Botao Para Selecionar o Destino da Pasta do RESTORE
REDEFINE BTNBMP oGetFolderTargetUnZip ID 106 ;
RESOURCE "BUSCAR" OF PAGE2 UPDATE ;
ACTION ( SetFolderUnZip() )
*/
REDEFINE BUTTONBMP oGetFolderTargetUnZip ID 106 OF PAGE2 UPDATE ;
BITMAP "BUSCAR" ;
ACTION ( SetFolderUnZip() )
oGetFolderTargetUnZip:cToolTip := "Selecionar o Destino(Pasta) Onde " + ;
"Vai Ser Restaurado o BACKUP"
oFilesCountUnZip := TProgress():Redefine( 107, PAGE2 )
REDEFINE BUTTON oDoUnCompress ;
ID 108 OF PAGE2 ;
ACTION ( DOMAKEUNZIP( oFolder, oBrowseZip ) )
oDoUnCompress:cToolTip := ( OemToAnsi( "Restaura‡Æo dos Arquivos " + ;
"de Seguran‡a no " + ;
"Diret¢rio(Pasta) de Destino" ) )
/*redefinicion de controles de pagina #3*/
//REDEFINE SAY ID 101 OF PAGE3 FONT oFontT COLOR CLR_BLUE
REDEFINE SAY ID 101 OF PAGE3 FONT oFontT COLOR CLR_BLUE ;
PROMPT OemToAnsi( "Sistema - " + ( XVERSAO ) ) + ;
" * " + ALLTRIM( STR( PANY ) ) + " * " + ;
" - Backup "
REDEFINE SAY ID 102 OF PAGE3 FONT oFontT COLOR CLR_BLUE
REDEFINE SAY ID 103 OF PAGE3 FONT oFontT COLOR CLR_BLUE
REDEFINE SAY ID 104 OF PAGE3 FONT oFontT COLOR CLR_HGREEN ;
PROMPT ALLTRIM( XNOMEEMP )
REDEFINE SAY ID 105 OF PAGE3 FONT oFontT COLOR CLR_BLUE
REDEFINE SAY ID 106 OF PAGE3 FONT oFontT COLOR CLR_HRED
/*boton de cierre de dialogo*/
REDEFINE BUTTON oClose ID 103 OF oDlg ;
ACTION ( oDlg:End() ) CANCEL
oClose:cToolTip := ( OemToAnsi( "Saida - Exit - Cancelar" ) )
SET FONT OF oClose TO oFnt
SET FONT OF oDoCompress TO oFnt
SET FONT OF oDoUnCompress TO oFnt
SET FONT OF oRadMenu TO oFnt
/*activacion de dialogo*/
ACTIVATE DIALOG oDlg CENTERED
/*eilminacion de font usadas*/
oBrowseZip:Close()
oBrowseUnZip:Close()
oFont:End()
oFnt:End()
oFontT:End()
oBrush:End()
Release All
RETURN NIL //-> Fin - The End - Fim - Finaliza Backup
STATIC FUNCTION MOSTRA_HELP( oFolder )
LOCAL oDlg, oSay, oSaida, IDCor, oFont, oBrush
//-> Dialogo
DEFINE BRUSH oBrush FILE "COMPAR.BMP"
DEFINE FONT oFont NAME "Times New Roman" SIZE 0, -14 BOLD
DEFINE DIALOG oDlg RESOURCE "DLG_XBLITE_HELP" ;
BRUSH oBrush TRANSPARENT
oDlg:lHelpIcon := .F.
For IDCor=401 TO 405
REDEFINE SAY oSay ID iDcor ;
COLOR CLR_BLACK, CLR_AMARELO ;
OF oDlg ;
UPDATE BOX SHADED ;
FONT oFont
Next IDCor // By Ednaldo Rolim - Yes!
REDEFINE BUTTON oSaida ID 301 OF oDlg ;
ACTION( oDlg:End() ) CANCEL
oSaida:cToolTip := ( OemToAnsi( "Saida - Exit - Cancelar" ) )
SET FONT OF oDlg TO oFont
ACTIVATE DIALOG oDlg CENTERED
oFont:End()
oBrush:End()
oFolder:SetOption(3)
oFolder:SetFocus()
RETURN NIL
FUNCTION GetDirToZip( oBrowseZip )
LOCAL cDir := ""
LOCAL cFiles
/*solicita directorio origen de ficheros a respaldas*/
cDir := cGetDir( "Selecione a Pasta a Ser Arquivada" )
SndPlaySound( "Init.Wav" )
/*si se selecciono un directorio*/
IF !EMPTY( cDir )
/*obtiene los ficheros a respaldar*/
GetFilesToZip( cDir, oBrowseZip )
/*actualiza nombre de directorio fuente*/
cFolderSourceZip := cDir
oFolderSourceZip:Refresh()
ELSE
SndPlaySound( "Erro.Wav" )
ENDIF
//-> Modified
IF !EMPTY( cDir )
SndPlaySound( "Pronto.Wav" )
ENDIF
RETURN NIL
FUNCTION GetFilesToZip( cDir, oBrowseZip )
LOCAL aFile
LOCAL aFiles
LOCAL nFiles
/*verifica si se paso el nombre de directorio fuente*/
IF EMPTY( cDir )
SndPlaySound( "Erro.Wav" )
RETURN NIL
ENDIF
SndPlaySound( "Init.Wav" )
//-> verifica si se procesaran los subdirectorios, y se obtiene un
//-> arreglo on los ficheros a respaldar
IF !lIncludeSubFolder
aFiles := Directory( cDir + "\*.*",,, XBL_FILEWITHPATH )
ELSE
aFiles := Directoryrecurse( cDir + "\*.*",, XBL_FILEWITHPATH )
ENDIF
/*si se obtivo algun fichero a respaldar*/
nFiles := len( aFiles )
IF nFiles > 0
/*asigna el numero de ficheros a respaldar a la var del control meter*/
nTotalFilesToZip := nFiles
nFilesZipped := 0
//-> inicializa arreglo de ficheros y procesa cada uno, acumulando
//-> su tamaño(Tamanho)
acFilesToZip := {}
FOR EACH aFile IN aFiles
AADD( acFilesToZip, { cFileName( aFile[ F_NAME ] ) , ;
aFile[ F_SIZE ] / 1024 , ;
aFile[ F_DATE ] , ;
cFilePath( aFile[ F_NAME ] ) })
/*acumula total de tamaños de archivos*/
nSizeFilesToZip += aFile[ F_SIZE ]
NEXT
/*se obtiene la suma de los tamaños de ficheros a respaldar en KB*/
nSizeFilesToZip /= 1024
ELSE
//-> por defecto un elemento en el arreglo para que no de problemas
//-> el browse
acFilesToZip := { {"", 0, CTOD(""), "" } }
nSizeFilesToZip := 0
nTotalFilesToZip := 0
ENDIF
/*pasa el arreglo al browse*/
oBrowseZip:SetArray( acFilesToZip )
oBrowseZip:Refresh( TRUE )
oBrowseZip:SetFocus()
/*limpia arreglo y llama al colecor de basura de xharbour*/
aFiles := Nil
hb_gcAll()
SndPlaySound( "Pronto.Wav" )
RETURN NIL
FUNCTION SetFileZip()
LOCAL cFile := ""
SndPlaySound( "Init.Wav" )
/*si fichero de respaldo estara en disco duro y no en floppy*/
IF !lZipToFloppy
/*solicita el nombre con la unidad destino incluido*/
cFile := cGetFile( "ZipFile | *.zip", "Nome do Arquivo na Unidade de Disco Fixo ", 1, "c:\", XBL_SAVEFILE, XBL_WITHLONGNAME )
cFile := rtrim( cFile )
/*agrega la extencion ZIP de ser necesario*/
IF EMPTY( cFileExt( cFile ) )
cFile += ".zip"
ENDIF
ELSE
/*solo pide nombre de archivo*/
cFile := space(25)
lOk := BoxGet( OemToAnsi("Informa‡Æo"), ;
"Nome do Arquivo na Unidade de Disquete <A>", @cFile )
/*agrega al nombre de fichero de respaldo la unidad*/
IF lOk
/*TODO: establecer posible malas entradas por parte del usuario*/
/*agrega unidad de diskette A al nombre de fichero dado, y de ser necesario*/
cFile := "A:\" + rtrim( cFile )
/*agrega la extencion ZIP de ser necesario*/
IF EMPTY( cFileExt( cFile ) )
cFile += ".zip"
ENDIF
ENDIF
ENDIF
/*actualiza nombre de directorio fuente*/
cFolderTargetZip := cFile
oFolderTargetZip:Refresh()
RETURN NIL
//-> Gera‡Æo(Geraci¢n) da(de la) C¢pia de Seguran‡a(seguridad)
FUNCTION DoMakeZip( oFolder, oBrowseZip )
LOCAL lOkZip := FALSE
LOCAL acFiles := {}
LOCAL bOnZipFile := { |cFile, nFile| UpdateMeterZip( nFile) }
LOCAL bOnSetDiskZip := { |nDisk| MsgInfo( "Por Favor Insira o Disco # " + ;
STR( nDisk,,, XBL_TRIM ) ) }
SndPlaySound( "Init.Wav" )
//-> verifica que existan ficheros a respaldar y el nombre del fichero
//-> de respaldo se haya definido
IF EMPTY( cFolderSourceZip ) .OR. ;
EMPTY( cFolderTargetZip ) .OR. ;
( Len( acFilesToZip ) = 1 .AND. ;
acFilesToZip[1,1] = "" )
SndPlaySound(".\Erro.wav" )
BEEP(4)
MsgStop( OemToAnsi( "Vocˆ Deve Definir um Nome Para o Arquivo " + ;
"de Seguran‡a..." ), OemToAnsi( "Aten‡Æo!!" ) )
RETURN NIL
ENDIF
/*se extra solo el nombre de los ficheros a respaldar incuyendo su path*/
AEVAL( acFilesToZip, { | aFile | AADD( acFiles, aFile[ XBL_FILEPATH ] + ;
aFile[ XBL_FILENAME ] ) } )
/*establece limites de valores de control meter*/
oFilesCountZip:SetRange( 0, nTotalFilesToZip )
oFilesCountZip:SetPos( 0 )
/*desactiva botones*/
oGetFolderSourceZip:Disable()
oGetFolderTargetZip:Disable()
oDoCompress:Disable()
oClose:Disable()
oFolder:aEnable := { .F., .F., .F. } //-> Inibe as Orelhas(Abas) Modified
SndPlaySound(".\Init.Wav", 0 )
/*realiza la compresion de los ficheros*/
IF lZipToFloppy
hb_SetDiskZip( bOnSetDiskZip )
lOkZip := hb_ZipFileByPKSpan( cFolderTargetZip , ;
acFiles , ;
HBL_ZIPLEVEL , ;
bOnZipFile , ;
XBL_ZIPOVERWRITE , ;
NIL , ;
XBL_ZIPWITHPATH )
ELSE
hb_SetDiskZip( {|| NIL } )
lOkZip := hb_ZipFile( cFolderTargetZip , ;
acFiles , ;
HBL_ZIPLEVEL , ;
bOnZipFile , ;
XBL_ZIPOVERWRITE , ;
NIL , ;
XBL_ZIPWITHPATH )
ENDIF
/*verifica proceso e informa al usuario*/
IF lOkZip
SndPlaySound(".\Pronto.Wav" )
BEEP(4)
MsgInfo( OemToAnsi( "A Grava‡Æo do Arquivo de Seguran‡a Foi " + ;
"Realizado Com Sucesso..." ), ;
OemToAnsi( "Grava‡Æo do Arquivo" ) )
ELSE
SndPlaySound(".\Erro.wav" )
BEEP(4)
MsgStop( OemToAnsi( "NÆo Foi Poss¡vel Gravar o Arquivo de " + ;
"Seguran‡a..." ), ;
OemToAnsi( "Grava‡Æo dos Arquivos" ) )
ENDIF
/*activa botones*/
oGetFolderSourceZip:Enable()
oGetFolderTargetZip:Enable()
oDoCompress:Enable()
oClose:Enable()
oFolder:aEnable := { .T., .T., .T. } //-> Inibe as Orelhas(Abas)
oBrowseZip:Refresh()
oBrowseZip:SetFocus()
/*reinicia contador de meter*/
oFilesCountZip:SetPos( 0 )
oFilesCountZip:Refresh()
/*limpia arreglo y llama al colecor de basura de xharbour*/
acFiles := NIL
hb_gcAll()
RETURN NIL
FUNCTION UpdateMeterZip( nFile )
/*refresca sistema cada 10 ficheros procesados*/
IF nFile % 10 = 0
SysRefresh()
ENDIF
oFilesCountZip:SetPos( nFile )
CursorWait() //-> Modified
RETURN NIL
FUNCTION GetFileToUnZip( oBrowseUnZip )
LOCAL cFile
/*pide al usuario que seleccione el fichero de respaldo*/
cFile := cGetFile( "ZipFile | *.zip", OemToAnsi("Nome do arquivo de Seguran‡a a ser Arquivado..."), 1, "c:\", XBL_OPENFILE, XBL_WITHLONGNAME )
SndPlaySound( "Init.Wav" )
/*verifica si realmente se paso el fichero*/
IF !EMPTY( cFile )
/*muestra el nombre del fichero en el dialogo*/
cSourceUnZip := cFile
oSourceUnZip:Refresh()
/*extrae informacion del fuchero de respaldo*/
GetFilesFromZip( cFile, oBrowseUnZip )
ENDIF
RETURN NIL
FUNCTION GetFilesFromZip( cFile, oBrowseUnZip )
LOCAL aFiles := hb_GetFilesInZip( cFile, XBL_GETFULL_INFOZIP )
LOCAL aFile
SndPlaySound( "Init.Wav" )
//-> vereficia el valor retornado por la funcion, si es arreglo
//-> y si tiene elementos
IF ValType( aFiles ) = "A" .AND. Len( aFiles ) > 0
/*inicializa arreglo en cero*/
acFilesToUnZip := {}
nTotalFilesToUnZip := len( aFiles )
/*procesa cada fichero extrayendo la informacion que interesa*/
FOR EACH aFile IN aFiles
AADD( acFilesToUnZip, { cFileName( aFile[ XBL_IZNAME ] ) , ;
aFile[ XBL_IZSIZEN ] / 1024 , ;
aFile[ XBL_IZSIZEC ] / 1024 , ;
aFile[ XBL_IZDATE ] , ;
cFilePath( aFile[ XBL_IZNAME ] ) } )
/*acumula totales de tamaños de archivos - normal y comprimido*/
nSizeFilesToUnZip += aFile[ XBL_IZSIZEN ]
nSizeFilesToUnZipC += aFile[ XBL_IZSIZEC ]
NEXT
/*obtiene los totales en Kb*/
nSizeFilesToUnZip /= 1024
nSizeFilesToUnZipC /= 1024
ENDIF
/*pasa el arreglo al browse*/
oBrowseUnZip:SetArray( acFilesToUnZip )
oBrowseUnZip:Refresh( TRUE )
oBrowseUnZip:SetFocus()
/*limpia arreglo y llama al colecor de basura de xharbour*/
aFiles := nil
hb_gcAll()
RETURN NIL
FUNCTION SetFolderUnZip()
LOCAL cDir := ""
/*pide al usuario de el directorio destino de los datos*/
cDir := cGetDir( OemToAnsi("Selecione a Pasta de Origem dos Arquivos " + ;
"de Seguran‡a") )
SndPlaySound( "Init.Wav" )
/*verifica si se selecciono un directorio*/
IF EMPTY( cDir )
SndPlaySound(".\Erro.wav" )
BEEP(4)
MsgStop( OemToAnsi( "Vocˆ Deve Definir o Local de Destino das " + ;
"Informa‡äes..."), OemToAnsi( "Aten‡Æo!!" ) )
RETURN NIL
ELSE
/*muestra el nombre del directorio seleccionado*/
cFolderTargetUnZip := cDir
oFolderTargetUnZip:Refresh()
ENDIF
RETURN NIL
FUNCTION DoMakeUnZip( oFolder )
LOCAL lOkUnZip := FALSE
LOCAL acFiles := {}
LOCAL bOnUnZipFile := { |cFile, nPos| UpdateMeterUnZip( cFile, nPos ) }
LOCAL bOnSetDiskZip := { |nDisk| MsgInfo( "Por Favor Insira o Disco # " + ;
STR( nDisk,,, XBL_TRIM ) ) }
SndPlaySound( "Init.Wav" )
//-> verifica que existan ficheros a respaldar y el nombre del fichero
//-> de respaldo se haya definido
IF EMPTY( cSourceUnZip ) .OR. ;
EMPTY( cFolderTargetUnZip ) .OR. ;
( Len( acFilesToUnZip ) = 1 .AND. ;
acFilesToUnZip[1,1] = "" )
SndPlaySound(".\Erro.wav" )
BEEP(4)
MsgStop( OemToAnsi( "Vocˆ Deve Definir o Local de Destino das " + ;
"Informa‡äes..."), OemToAnsi( "Aten‡Æo!!" ) )
RETURN NIL
ENDIF
/*se extra solo el nombre de los ficheros a respaldar incuyendo su path*/
AEVAL( acFilesToUnZip, { | aFile | AADD( acFiles, aFile[ XBL_UZFILEPATH ] + aFile[ XBL_UZFILENAME ] ) } )
/*establece limites de valores de control meter*/
oFilesCountUnZip:SetRange( 0, nTotalFilesToUnZip )
oFilesCountUnZip:SetPos( 0 )
/*desactiva botones*/
oGetSourceUnZip:Disable()
oGetFolderTargetUnZip:Disable()
oDoUnCompress:Disable()
oClose:Disable()
oFolder:aEnable := { .F., .F., .F. } //-> Inibe as Orelhas(Abas) Modified
/*realiza la compresion de los ficheros*/
hb_SetDiskZip( bOnSetDiskZip )
lOkUnZip := hb_UnZipFile( cSourceUnZip , ;
bOnUnZipFile , ;
lUnZipWithPath , ;
NIL , ;
cFolderTargetUnZip + "\" )
/*verifica proceso e informa al usuario*/
IF lOkUnZip
SndPlaySound(".\Pronto.Wav" )
BEEP(4)
MsgInfo( OemToAnsi( "A Restaura‡Æo do Arquivo de Seguran‡a Foi " + ;
"Realizada com Sucesso..." ), ;
OemToAnsi("Restaura‡Æo dos Arquivos" ) )
ELSE
SndPlaySound(".\Erro.wav" )
BEEP(4)
MsgStop( OemToAnsi( "Erro... NÆo Foi Poss¡vel Recriar o Arquivo de " +;
"Seguran‡a..." ), ;
OemToAnsi( "Restaura‡Æo dos Arquivos" ) )
ENDIF
/*activa botones*/
oGetSourceUnZip:Enable()
oGetFolderTargetUnZip:Enable()
oDoUnCompress:Enable()
oClose:Enable()
oFolder:aEnable := { .T., .T., .T. } //-> Inibe as Orelhas(Abas)
/*reinicia contador de meter*/
oFilesCountUnZip:SetPos( 0 )
oFilesCountUnZip:Refresh()
/*limpia arreglo y llama al colecor de basura de xharbour*/
acFiles := NIL
hb_gcAll()
RETURN NIL
FUNCTION UpdateMeterUnZip( cFile, nPos )
#ifdef BUG_IN_HBZIP
STATIC n := 0
IF n > nTotalFilesToUnZip
n := 0
ENDIF
++n
IF n % 10 = 0
SysRefresh()
ENDIF
oFilesCountUnZip:SetPos( n )
#Else
oFilesCountUnZip:SetPos( nPos )
#Endif
CursorWait()
RETURN NIL
STATIC Function FillWnd( oWnd, nColor, oBmp, nSaltos )
Local hWnd := oWnd:hWnd
Local aRect := GetClientRect( hWnd )
Local oBrush, n
Local nTop := aRect[ 1 ]
Local nBottom := aRect[ 3 ]
Local nSteps
Local nBlue, nRed, nGreen
Local lPuro := .F. // LoadIniPure() // Si es puro no hay degradado
// Color de degradado
DEFAULT nColor := 123123128 // LoadIni("MADRE","DegraDialog")
IF !EMPTY( oBmp )
IF UPPER(oWnd:ClassName()) == 'TDIALOG' // Si es un Dialogo
oWnd:GetDC()
PalBmpDraw( oWnd:hDC, 0, 0, oBmp:hBitmap )
oWnd:ReleaseDC()
ENDIF
WndCenter( oBmp:hWnd, oWnd:hWnd )
ENDIF
If lPuro == .T.
oWnd:SetColor( 0, nColor )
oWnd:Refresh()
Else
lPuro := .F.
Endif
If !lPuro // El color no es puro, entonces degradado
nBlue := nRGBBlue( nColor )
nRed := nRGBRed( nColor )
nGreen := nRGBGreen( nColor)
DEFAULT nSaltos := 3
nSteps := ( aRect[ 3 ] - aRect[ 1 ] ) / nSaltos
oWnd:GetDC()
aRect[ 3 ] = 0
For N = 1 to nSteps
aRect[ 3 ] += nSaltos
DEFINE BRUSH oBrush COLOR RGB( nRed, nGreen, nBlue )
FillRect( oWnd:hDC, aRect, oBrush:hBrush )
RELEASE BRUSH oBrush
aRect[ 1 ] += nSaltos
nBlue -= 1
nRed -= 1
nGreen -= 1
If nBlue < 0 ; nBlue += 1 ; Endif
If nRed < 0 ; nRed += 1 ; Endif
If nGreen < 0 ; nGreen += 1 ; Endif
Next N
oWnd:ReleaseDC()
Endif
Return Nil
STATIC FUNCTION Beep(SOM)
SET CONSOLE ON
IF SOM=1 &&Sinal de Abandono
TONE(87.3,2)
TONE(40,7)
ELSEIF SOM=2 &&Abertura
TONE(1300,8)
TONE(1800,5)
ELSEIF SOM=3 &&Erro
TONE(3000,1) ; TONE(2000,1) ; TONE(1000,1)
ELSEIF SOM=4 &&Alerta
TONE(2500,9)
ELSEIF SOM=5 &&Confirma‡ao-I
TONE(5000.1)
TONE(5000.1)
ENDIF
SET CONSOLE OFF
Return Nil
/*
* SPN.PRG
*
* cShortName() - FilePath Long to Short (GetShortPathNameA())
*
* Soporte a Funciones del Api de Windows
*
* Andrade A. Daniel - 2002
* Rosario, Argentina
*
* Libre Distribución
*/
/*
* cShortName()
*/
FUNCTION cShortName( cLong )
Local cShort := Space(164) + Chr(0)
Local nBuffer := 164
Local nLen
nLen := GetSPName( cLong, @cShort, nBuffer )
cShort := Left( cShort, nLen )
RETURN( cShort )
// Windows Api
DLL32 STATIC FUNCTION GetSPName( lpszLongPath AS STRING, lpszShortPath AS STRING, lBuffer AS LONG ) ;
AS LONG PASCAL FROM "GetShortPathNameA" LIB "kernel32"
//-> END OF PROGRAM - FIM DO PROGRAMA