Jump to content
Fivewin Brasil

alex2002

Membros
  • Posts

    1,229
  • Joined

  • Last visited

  • Days Won

    24

Everything posted by alex2002

  1. Cara, o pessoal está fazendo na Udemy mesmo.
  2. Estamos usando o flutter aqui na empresa e estamos gostando. Curva de aprendizado bem baixa (DART) e de fato já soltamos aplicativos sem ao menos terminar os cursos.
  3. Olha só, fui no GIT que o João postou, e acabei vendo que o Fast agora é Open Source. Alguém, já baixou o projeto? Quanto ao problema do citado do tópico, sugiro usar alias que funciona muito bem. Um abraço, Alexandre Pereira
  4. Olá Galera. Que o Senhor Jesus possa nos abençoar neste Natal, no ano que está por iniciar e em todos os momentos das nossas vidas. Feliz Natal a todos e um próspero ano novo.
  5. Não tem como colocar a DLL dentro seu sistema. Por isso ela é uma DLL, vc tem que ter ela na pasta da aplicação (ou conforme o ambiente). Eduardo, já terminou a questão do Atualizador? Você não me ligou mais. Um abraço, Alexandre Pereira
  6. Olá Edu. Claro, vc tem o meu telefone. Pode me chamar novamente, já cheguei na cidade onde vou ficar até o dia 15/12 Só no horário comercial que é meio difícil, mas no mais estou a disposição. Um abraço, Alexandre Pereira CAMPEÃO BRASILEIRO
  7. Vou postar aqui o fonte do meu atualizador. Qualquer coisa é só chamar. Um abraço, ///////////////////////////////////////////////////////////// #include "fivewin.ch" STATIC oDlg, oTxt, oRas, oMeter, oRecup, oAtualiza, oSair ////////////////////// Function Main() local oIni parameters cSistema, cPerfil, cPar1, cPar2 public lSair := .f. public lCheck := .f. public lUpLoad := .f. public lQuiet := .f. public cTxt public cLogFile := 'ftplog.txt' public cRecup := '' public cArquivo public cLocal := CurDrive()+':\'+Curdir() public cPasta := '/livecred' public oFtp Set Date Brit Set Century On Set 3DLook On DEFAULT cSistema := 'NomeDoSistema' // Verificando se o Sistema já está aberto if isExeRunning( 'LiveCRED.exe' ) Return .f. endif if cSistema = '/check' lCheck := .t. lQuiet := .t. cSistema := cPerfil cPerfil := cPar1 endif if cSistema = '/quiet' lQuiet := .t. cSistema := cPerfil cPerfil := cPar1 endif if cSistema = '/upload' lUpLoad := .t. cSistema := cPerfil cPerfil := cPar1 endif DEFAULT cPerfil := '1' cArquivo := rtrim( lower(cSistema) )+'.zip' cTxt := 'Início' nAtual := 0 if !lCheck DEFINE ICON oIcon RESOURCE 'LiveCRED' DEFINE DIALOG oDlg RESOURCE "Live_A" Title "LiveCRED Versão 2.3" Icon oIcon redefine Get oTxt Var cTxt Memo id 101 Color nRgb(0,0,220),nRgb(253,252,213) Of oDlg redefine Say oRecup Var cRecup id 102 Color nRgb(150,0,0) of odlg redefine Meter oMeter Var nAtual Total 100 id 103 Of oDlg redefine BUTTON oAtualiza id 501 ACTION (oAtualiza:Disable(), oSair:Disable(), Atualiza(), oAtualiza:enable(), oSair:enable() ) CANCEL redefine BUTTON oSair id 510 ACTION (lSair:= .t., oDlg:end() ) CANCEL ACTIVATE DIALOG oDlg CENTERED valid lSair on init iniciar() else ChecaVersao() endif return .t. ///////////////////////// static function iniciar() oDlg:SetFocus() oDlg:show() oAtualiza:setfocus() oAtualiza:refresh() oDlg:refresh() SysRefresh() if lCheck // Visualiza('Verificando se existe nova versão disponível, aguarde...') // oAtualiza:disable() // oSair:Disable() ChecaVersao() elseif lQuiet oAtualiza:disable() oSair:Disable() Atualiza() lSair := .t. oDlg:end() hb_gcAll() elseif lUpload oAtualiza:disable() oSair:Disable() EnviaVersao() else visualiza('Clique em Executar para que a sua versão do '+upper(cSistema)+' seja automaticamente atualizada') endif return nil Function ChecaVersao() LOCAL lRetorno := .T. local lErro := .f., lAchou := .f., lTemVersaoNova := .f., lAtualiza := .f. local i local dDataRemoto, dDataLocal, cHoraRemoto, cHoraLocal, nTamRemoto, nTamLocal cArqLocal := cLocal+'\'+cSistema+'.zip' cArqRemoto := cArquivo for i = 1 to 2 if Conecta( i ) visualiza( "Conexão estabelecida, Verificando se existe Atualização..." ) oFtp:Cwd(cPasta) aArquivo := oFTP:listfiles( cArqRemoto ) if len( aArquivo ) = 0 lRetorno := .f. // visualiza('Atualização não encontrada! **** ERRO **** ') else // dDataRemoto := aArquivo[1,3] // cHoraRemoto := aArquivo[1,4] nTamRemoto := aArquivo[1,2] endif oFTP:Close() else lRetorno := .f. endif if lRetorno exit endif next if lRetorno if file( cArqLocal ) // dDataLocal := fDate( cArqLocal ) // cHoraLocal := substr( fTime( cArqLocal ),1,5) nTamLocal := fsize( cArqLocal ) else // dDataLocal := ctod( '01/01/2000' ) // cHoraLocal := '00:00' nTamLocal := 0 endif if nTamRemoto <> nTamLocal lTemVersaoNova := .t. endif /* if dDataRemoto > dDataLocal lTemVersaoNova := .t. elseif dDataRemoto = dDataLocal if cHoraLocal < cHoraRemoto cTempo := elaptime( cHoraLocal, cHoraRemoto ) else cTempo := elaptime( cHoraRemoto, cHoraLocal ) endif nTempo := val(substr( cTempo,1,2))*60 + val(substr( cTempo,4,2)) if nTempo > 210 // 3 horas e meia (diferença de horários do servidores ftps) lTemVersaoNova := .t. endif endif */ else lErro := .t. visualiza("Problemas para verificar nova versão! ") if !lQuiet MsgInfo('Problemas para verificar nova versão!','Erro de Atualização') endif endif if !lErro .and. !lTemVersaoNova visualiza("Não Existe nova versão disponibilizada! ") if !lQuiet MsgInfo('Não Existe nova versão disponível!','Sem Atualização') endif endif if !lErro .and. lTemVersaoNova if MsgYesNo('Existe nova versão disponível do NomeDoSistema, deseja atualizar?','Nova Versão') lAtualiza := .t. endif endif if lAtualiza visualiza("Resetando conexões...! ") syswait(2) sysrefresh() killprocess(cSistema+".exe") MyWinExec('livecred '+if(lQuiet,'/quiet ','')+cSistema+' '+cPerfil) endif lSair:= .t. quit hb_gcAll() return nil /////////////////////////////////////////////////////// FUNCTION EnviaVersao() local aFR3, aArqs := {} local lErro := .f. local cArqLocal, cArqEXE, cExtensao, cPastaFR3, cPastaImagem cArqLocal := CurDrive()+':\'+Curdir()+'\'+cArquivo cPastaFR3 := 'p:\desenv\fr\' cArqEXE := CurDrive()+':\'+Curdir()+'\'+cSistema+'.EXE' cExtensao := lower( right( cSistema, 3 ) ) aFR3 := directory( cPastaFR3+'*.fr3' ) for x = 1 to len( aFR3 ) aadd( aArqs, cPastaFR3+aFR3[x,1] ) next if cExtensao <> 'zip' .and. cExtensao <> 'rar' fErase( cArqLocal ) aadd( aArqs, cArqEXE ) // ? hb_zipfile( cArqLocal, {'c:\cardPrinter\crdLandEraseFront.bmp'} ) hb_zipfile( cArqLocal, aArqs ) else cArqLocal := CurDrive()+':\'+Curdir()+'\'+cSistema endif if EnviaFtp( cArqlocal ) if !lQuiet MsgInfo('Ok! versão Enviada para o servidor WEB!','Ok') endif else if !lQuiet MsgStop('ERRO AO ENVIAR VERSÃO!','Erro') endif endif lSair:= .t. oDlg:end() hb_gcAll() RETURN NIL ////////////////////////////////////////////////// FUNCTION Atualiza() local aArquivos := {}, i local cArqLocal := CurDrive()+':\'+Curdir()+'\'+cArquivo local cPastaBak := sonumeros(dtoc(date()))+'_'+sonumeros(time()) local cExtensao local lErro := .f. // Apagando o arquivo existente Ferase( cArquivo ) Ferase( cArqLocal ) if RecebeFtp( cArqlocal, cArquivo ) visualiza("Executando Backup da Versão Atual...") // Criando um backup dos arquivos anteriores lmkdir(cLocal+'\fr') lmkdir(cLocal+'\Live') lmkdir(cLocal+'\Live\'+cPastaBak) aArquivos := ZipRead(cLocal+'\'+cArquivo) for i = 1 to len(aArquivos) cExtensao := lower( right( aArquivos, 3 ) ) if cExtensao <> 'fr3' .and. cExtensao <> 'gif' frename(cLocal+'\'+aArquivos,cLocal+'\Live\'+cPastaBak+'\'+aArquivos) endif next // Backup Criado visualiza("Descompactando a Versão Atual...") // Descompactando for i = 1 to len(aArquivos) // entrando em um loop caso o arquivo a ser descompactado esteja aberto do while .t. cExtensao := lower( right( aArquivos, 3 ) ) if cExtensao <> 'fr3' .and. cExtensao <> 'gif' .and. file(cLocal+'\'+aArquivos) .and. frename(cLocal+'\'+aArquivos, cLocal+'\Live\'+cPastaBak+'\'+aArquivos ) <> 0 if !lQuiet .and. MsgYesNo('Erro ao criar backup do Arquivo '+cLocal+'\'+aArquivos+' !'+CRLF+'Possivelmente ele está sendo utilizado.'+CRLF+'Deseja Retentar?','Arquivo Sendo Usado') loop else lErro := .t. exit endif endif if !hb_unzipfile( cLocal+'\'+cArquivo, {|cArq| qout(cArq) }, .t.,'', cLocal, aArquivos ) if !lQuiet .and. MsgYesNo('Erro ao DESCOMPACTAR o Arquivo '+cLocal+'\'+aArquivos+' !'+CRLF+'Possivelmente ele está sendo utilizado.'+CRLF+'Deseja Retentar?','Arquivo Sendo Usado') loop else lErro := .t. exit endif endif // Tratando os arquivos FR3 if cExtensao = 'fr3' .and. !copyfile(cLocal+'\'+aArquivos, cLocal+'\fr\'+aArquivos ) if !lQuiet .and. MsgYesNo('Erro ao DESCOMPACTAR o Arquivo '+cLocal+'\'+aArquivos+' !'+CRLF+'Possivelmente ele está sendo utilizado.'+CRLF+'Deseja Retentar?','Arquivo Sendo Usado') loop else lErro := .t. exit endif elseif cExtensao = 'gif' .and. !copyfile(cLocal+'\'+aArquivos, cLocal+'\imagem\'+aArquivos ) if !lQuiet .and. MsgYesNo('Erro ao DESCOMPACTAR o Arquivo '+cLocal+'\'+aArquivos+' !'+CRLF+'Possivelmente ele está sendo utilizado.'+CRLF+'Deseja Retentar?','Arquivo Sendo Usado') loop else lErro := .t. exit endif elseif cExtensao = 'fr3' .or. cExtensao = 'gif' ferase( cLocal+'\'+aArquivos ) endif exit enddo if lErro exit endif next if lErro visualiza("ERRO, houve um erro! - VERSÃO NÃO ATUALIZADA") visualiza("Restaurando a versão anterior...") for i = 1 to len(aArquivos) CopyFile(cLocal+'\Live\'+cPastaBak+'\'+aArquivos, cLocal+'\'+aArquivos) next else visualiza("OK! Versão atualizada e pronta para ser usada!") endif else lErro := .t. visualiza("ERRO ao Receber o Arquivo de Atualização! - VERSÃO NÃO ATUALIZADA") if !lQuiet MsgAlert('Falha na recepção do arquivo!','Erro') endif endif if !lerro if !lQuiet MsgInfo('Ok! versão Atualizada e pronta para ser usada!','Ok') else MyWinExec( cSistema ) endif endif RETURN NIL // Visualizar o que está sendo executado ///////////////////////////// Function Visualiza( cTexto ) ///////////////////////////// if !lQuiet if valtype(cTexto) <> 'O' cTxt += CRLF+cTexto endif oTxt:SetText( cTxt ) oTxt:SetPos(Len(cTxt)) oTxt:refresh() oDlg:Refresh() endif sysrefresh() Return Nil // Ler os nomes dos arquivos que estão dentro do ZIP * ----------------------------------------------------------------------------- Function zipread(zip_file) * ----------------------------------------------------------------------------- local _array := {} local zip := fopen(zip_file, 2), tmp :=space(4) local method, orig_date, fn_date, comp_size, uncomp local fn_size, extra, junk, file_name, orig_hora, fn_hora do while .t. tmp := space(4) if fread(zip, @tmp, 4) != 4 // End of file exit endif if tmp = "PK" + chr(1) + chr(2) // Central dir exit elseif tmp != "PK" + chr(3) + chr(4) exit endif tmp := space(26) fread(zip, @tmp, 26) method := bin2i(substr(tmp, 5, 2)) comp_size := bin2l(substr(tmp, 15, 4)) fn_size := bin2i(substr(tmp, 23, 2)) extra := bin2i(substr(tmp, 25, 2)) file_name := freadstr(zip, fn_size) junk := if(extra = 0, "", freadstr(zip, extra)) extract(zip, comp_size, method, file_name) aadd(_array, file_name ) enddo fclose(zip) return _array * ----------------------------------------------------------------------------- Static Function extract(_handle, _size, _method, unzip_file) * ----------------------------------------------------------------------------- local newfile, tmp := space(4096) if _method != 0 fseek(_handle, _size, 1) // Skip file else if newfile = fcreate(unzip_file, 0) do while _size > 0 fread(_handle, @tmp, len(tmp)) _size -= min(_size, 4096) fwrite(newfile, tmp) enddo fclose(newfile) endif endif return nil function SoNumeros( cString, cExcecao ) local cRetorno:='', x DEFAULT cExcecao:='' for x=1 to len( cString ) if substr( cString,x,1 )$'1234567890' .or. substr( cString,x,1 )$cExcecao cRetorno+=substr( cString,x,1 ) endif next return cRetorno ////////////////////////////DADOS DA FUNCAO////////////////////////////////// // NOME : MyWinExec /// // FINALIDADE : adequar WinExec ao windows 2000/nt /// // PARAMETROS : <1> cComando /// // RETORNO : nada /// ///////////////////////////////////////////////////////////////////////////// function MyWinExec( cComando ) local cExecute:='' if IsWinNT() // NT, 2000 e XP cExecute:=GetEnv( 'COMSPEC' )+' /C ' endif return WinExec( cExecute+cComando, 0 ) Function timefromstart return '00:00:00' KillProcess( "calc.exe" ) ///////////////////////////// FUNCTION KillProcess( cExe ) local oWmi, oList, oProc oWmi := WmiService() oList := oWmi:ExecQuery( "select * from Win32_Process where Name = '" + cExe + "'" ) for each oProc in oList oProc:Terminate() next return nil FUNCTION WMIService() // It would be useful to keep this function in the library static oWMI local oLocator if oWMI == nil oLocator := CREATEOBJECT( "wbemScripting.SwbemLocator" ) oWMI := oLocator:ConnectServer() endif return oWMI //////////////////////////////////////////////////////////////////////// FUNCTION RecebeFTP( cArqLocal, cArqRemoto ) //////////////////////////////////////////////////////////////////////// LOCAL lRetorno := .T. local i for i = 1 to 2 IF Conecta( i ) visualiza( "Conexão estabelecida, fazendo o Download..." ) oFtp:Cwd(cPasta) aArquivo := oFTP:listfiles( cArqRemoto ) if len( aArquivo ) = 0 lRetorno := .f. visualiza('Atualização não encontrada! **** ERRO **** ') lRetorno := .f. else lRetorno := Inicia_Progress(cArqLocal, aArquivo[1][2], cArqRemoto, oFtp ) endif oFTP:Close() else lRetorno := .f. endif if lRetorno exit endif next if lRetorno visualiza( "Arquivo Recebido com sucesso!" ) else visualiza( "Falha no Recebimento ***** ERRO *****" ) endif RETURN lRetorno ////////////////////////////////////////////////////// FUNCTION EnviaFtp( cFile ) ////////////////////////////////////////////////////// LOCAL lRetorno := .T. local i for i = 1 to 1 IF Conecta( i ) visualiza( "Conexão estabelecida, fazendo o Upload..." ) oFtp:Cwd(cPasta) if !oFtp:UploadFile( cFile ) lRetorno := .F. endif oFTP:Close() if lRetorno visualiza( "Arquivo enviado com sucesso!" ) else visualiza( "Falha no Envio!" ) endif ELSE lRetorno := .f. ENDIF next RETURN lRetorno ///////////////////////////////////////////////////////////////////// Function Inicia_Progress( cArquivoDestino, nTotal, cArqRemoto, oftp) ///////////////////////////////////////////////////////////////////// local lOk oFtp:exGauge := { | done, size| ShowGauge(done, size, nTotal, cArqRemoto ) } if !oFtp:DownLoadFile(cArquivoDestino) lOk := .f. else lOk := .t. endif return lOk // Mostrar a Barra de Progresso durante upload/download /////////////////////////////////////////////////// STATIC FUNCTION FtpProgress( nSent, nTotal, oFtp ) /////////////////////////////////////////////////// LOCAL cProgress cProgress := Int( 100*nSent/nTotal ) ometer:set(cProgress ) return .t. ///////////////////////////////////////////////////// Procedure ShowGauge( nSent, nSize, wTotal, ftpfile ) ///////////////////////////////////////////////////// if nSent > 0 cProgress := Int( (nSent/wTotal)*100 ) ometer:set(cProgress ) endif return /////////////////////////////// FUNCTION Conecta( nConexao ) /////////////////////////////// local cServer, cUsuario, cSenha, i local cUrl local oUrl local lRetorno := .f. default nConexao := 1 for i = nConexao to 2 if i = 1 cServer := 'ftp.declatecnologia.com.br' cUsuario := 'XXXXXXXXXXXXXXXXXXX' cSenha := 'YYYYYYYYYYY' elseif i = 2 cServer := 'ftp.declatecnologia.com.br' cUsuario := 'XXXXXXXXXXXXXXXXXXX' cSenha := 'YYYYYYYYYYY' endif If !IsDigit( cServer ) //O Servidor é um Nome WSAStartup() cServer := GetHostByName( cServer ) WSACleanUP() Endif cUrl := "ftp://" + cUsuario + ":" + cSenha + "@" + cServer visualiza( "Abrindo conexão com o "+str(i,1)+"o. Servidor..." ) oUrl := tUrl():New( cUrl ) oFTP := tIPClientFtp():New( oUrl ) oFTP:nConnTimeout := 20000 oFTP:bUsePasv := .T. // Forçar UserID se houver @ no usuário IF At( "@", cUsuario ) > 0 oFTP:oUrl:cServer := cServidor oFTP:oUrl:cUserID := cUsuario oFTP:oUrl:cPassword := cSenha ENDIF oFtp:exGauge := ( @FtpProgress() ) if oFTP:Open( cUrl ) lRetorno := .t. exit endif Visualiza('Não conectou ao Servidor!!!') if oFTP:SocketCon == NIL Visualiza('Conexão não inicializada!!!') elseif InetErrorCode( oFTP:SocketCon ) == 0 Visualiza('Resposta do Servidor: '+oFTP:cReply) else Visualiza('Erro na Conexão: '+InetErrorDesc( oFTP:SocketCon )) endif next RETURN lRetorno LiveCRED.res
  8. Eduardo, pelo que entendi, você não conseguirá renomear/apagar o executável ao qual vc está utilizando. A saída é montar um executável paralelo que faz a verificação de nova versão em seu FTP e a partir daí vc roda ele em background (assim que entrar no seu aplicativo). Caso haja nova versão você avisa ao usuário e aí sim, traz a versão, mata a aplicação principal, renomeia o executável e reabre a aplicação. O meu aplicativo é assim e faz anos que não tenho problema. Qualquer coisa, entra em contato comigo que posso te ajudar. Um abraço, Alexandre Pereira
  9. Toya, parece que a sua declaração de cFile está errada: "E:\JOBs/NFSe\xml_teste\S_NS9_000000001-nfSe.xml" Não teria que ser: "E:/JOBs/NFSe/xml_teste/S_NS9_000000001-nfSe.xml" ou "E:\JOBs\NFSe\xml_teste\S_NS9_000000001-nfSe.xml" ?
  10. Pela altura estou com 16, mas pela idade verdeira 47 rsrsrsrsrs
  11. KKKKKK, continuo jovem meu amigo. Só um pouco mais experiente rsrsrsrsrs
  12. Pode ser Jorge. Me envia então meu email: alexandre@declatecnologia.com.br
  13. Na verdade é pra Cooperativa de Táxi. Mas que tenha um controle integrado de voucher, financeiro....
  14. Olá PessoALL, Alguém do grupo tem sistema integrado para controle de Cooperativa de Transporte? Um abraço, Alexandre Pereira
  15. Vixe, arrumou guerra com o João. rsrsrsrsrs
  16. Eu tenho o arquivo .DB Será que tem como saber? Um abraço, Alexandre Pereira
  17. Meu Deus, o trem é pior do que imaginei. rsrsrsrsrsrs Mas valeu, vou ver como conseguir subir essa bagaça.
  18. Olá PessoALL, Algum amigo aqui do fórum já subiu este tipo de Banco? Estou com o arquivo .DB e o proprietário me disse que é SyBASE, daí gostaria de saber se alguém tem expertise nisso. Obrigado. Alexandre Pereira
  19. O Vilian é do grupo. Tenta contato com ele
  20. Acho que vc terá que criar as imagens compondo cada situação. Não tenho certeza, mas é uma alternativa.
  21. Olá Márcio. É possível. oLbx:aCols[9]:AddResource("BRANCO16") oLbx:aCols[9]:AddResource("AMARELO16") oLbx:aCols[9]:AddResource("VERDE16") oLbx:aCols[9]:AddResource("PRETO16") oLbx:aCols[9]:lBmpTransparent := .f. oLbx:aCols[9]:nDataBmpAlign := AL_LEFT oLbx:aCols[9]:cHeader := "Análise" oLbx:aCols[9]:nHeadStrAlign := AL_CENTER oLbx:aCols[9]:nDataStrAlign := AL_RIGHT oLbx:aCols[9]:nWidth := 80 oLbx:aCols[9]:bBmpData := {|| nStat := aLbx[oLbx:nArrayAt,12], if( nStat = 1, 1, if( nStat = 2, 2, if( nStat = 0, 4, 3 )))} No seu caso, vc tem que montar uma imagem com as duas opções. Um abraço, Alexandre Pereira
  22. Olá Dorneles. Segue. Os prints de como fica o .FR3 Primeira barra: Segunda: Muito fácil Um abraço, Alexandre Pereira
  23. Olá Pessoal, Tenho um relatório em FAST REPORT que uso o método DBLCLICK em uma linha/coluna para chamar uma função xHarbour. Esta função está funcionando legal. Agora preciso de passar mais de uma coluna da linha para a função xHarbour. Já tentei um monte de coisa e não tive êxito, alguém tem uma solução? No exemplo abaixo ele retorna o valor apenas da linha/coluna clicada. Mas eu preciso de mais colunas da mesma linha. Se alguém puder ajudar. Um abraço, Alexandre Pereira
×
×
  • Create New...