Jump to content
Fivewin Brasil

Eduardo Bilato

Membros
  • Posts

    188
  • Joined

  • Last visited

  • Days Won

    2

Everything posted by Eduardo Bilato

  1. Eu sou eu, o eco é o eco hauhauhau Trabalhamos juntos na mesma empresa e na mesma equipe
  2. Win 10 64 bits - original Compilei e "subiu" instantaneamente
  3. Não Aqui, independe da função chamada, vai levar 40 segundos pra aparecer... Imagine que o sistema não faça nada além de exibir uma msginfo('Teste') na função principal, sem vínculo nenhum com as funções do sistema. Ao chamar o sistema, a mensagem 'Teste' vai levar 40 segundos pra ser exibida. Por essa razão digo que não tem relação com o que estou fazendo na inicialização do sistema, mas sim com o tamanho do executável ou com número de funções que existem no sistema ou qualquer outra coisa.. não sei... O interessante é que no gerenciador de tarefas o sistema é carregado imediatamente, mas demora para exibir a primeira tela Em máquinas diferentes.
  4. Caros, bom dia Tenho um sistema que atingiu o tamanho de 32mb. Ao chamar esse sistema, leva cerca de 40 segundos para exibir a tela de login. Cheguei a retirar todas as funções chamadas antes da tela de login pra verificar se era uma delas que interferia na inicialização, mas mesmo chamando somente a tela de login levou 40 segundos. Utilizei o UPX.exe pra compactar o executável e o tempo de aparição da tela de login continuou os mesmos 40 segundos. Alguém já passou por esse problema? Sabem alguma forma de diminuir esse tempo de inicialização?
  5. Compilo meu executável com um arquivo.RC pra ficar com um visual de Win XP. Se eu não faço isso, meu executável fica com um visual do Win 98. O que eu quero é compilar com um arquivo.RC que o deixe com um visual do Win 10. Na verdade, o que gostaria que ficasse com a cara do win10 são os menus e as MDI.
  6. Não tentei Rochinha Abri os os fontes e vi que usavam algumas funções não suportadas pelo meu FW/xHarbour Uso a versão 08.01 do FW por conta da libMySql.dll
  7. Minha versão do FiveWin é a 08.01... existe alguma versão dessa FiveUI para essa versão do FiveWin?
  8. Segue imagem: https://photos.app.goo.gl/jcnDggcFPvMcVtFw9
  9. Me refiro à cor dos menus "Consultas" e "Cadastros" dessa imagem
  10. mas que bósnia... e quanto ao foco do menu ficar na cor Amarelo/Alaranjado? Isso também não tem solução?
  11. Não deu certo... continua com a mesma aparência ainda
  12. O arquivo .RC que me refiro tem o mesmo conteúdo citado neste post:
  13. Caros, boa tarde Eu uso um arquivo .RC, compilado junto ao sistema, para dar um visual de Windows XP às janelas, menus, etc. Alguém saberia como ou onde obter um arquivo RC para que o sistema fique com um visual do Windows 10? Desde já, muito obrigado
  14. Olá a todos. Gostaria de saber se alguém ainda consegue, hoje em 2018, utilizar o CobreBem para envio de boleto POR EMAIL. Vi vários exemplos na internet, converti, testei, etc, mas não gera erro e nem envia e-mail. Tentei com contas do Google, Microsoft e e-mail interno, mas nada funcionou. Vi várias postagens mais antigas, coisa de 2010, que funcionava muito bem essa funcionalidade, mas estou tentando pôr no sistema isso hoje, mas não tive sucesso. Detalhe: Tenho um programa específico para envio de e-mail, e utilizo minha conta Google com a porta 465, mas se utilizo essa mesma conta no CobreBem com a porta 465, gera erro no método EnviaBoletosPorEmail(). Se eu uso a porta 587, não gera erro, mas também não envia o e-mail. Segue abaixo o código que estou usando: * * * ECO 04/04/2018 * FUNCTION Teste(nNRBC,cCART) LOCAL cSQL LOCAL cDll := '\DLL\CobreBemX.dll' LOCAL cCNPJ LOCAL cArqLicenca LOCAL aSQL LOCAL hOldDll LOCAL hDll LOCAL oCbx LOCAL oBoleto LOCAL oEmailSacado LOCAL lErro:=.F. IF EMPTY(nNRBC) .OR. EMPTY(cCART) RETURN ENDIF IF !FILE(cDll) MSGSTOP('A DLL '+cDll+' não foi encontrada. Não é possível gerar preview do boleto...','ATENÇÃO') RETURN ENDIF hOldDll:=GetResources() hDll :=LoadLib32(cDll) ************** BEGIN SEQUENCE ************** IF hDll <= 32 MSGSTOP('Não foi possível inicializar a DLL '+cDll+'. Não é possível gerar preview do boleto...','ATENÇÃO') BREAK ENDIF cSQL:='SELECT CNPJ DO CLIENTE' aSQL:=sqlArray(cSQL) IF EMPTY(aSQL) MSGALERT('Erro ao obter dados da empresa logada, verifique !','ATENÇÃO') BREAK ENDIF cCNPJ:=STRZERO(VAL(aSQL[01,01]),14) cArqLicenca:='\Licenca\' + cCNPJ + '-' + STRZERO(nNRBC,3) + '-' + ALLTRIM(cCART)+'.conf' IF !FILE(cArqLicenca) MSGALERT("Arquivo de Licença para a carteira '"+ALLTRIM(cCART)+"' do banco '"+STRZERO(nNRBC,3)+"' não foi encontrado!","ATENÇÃO") BREAK ENDIF oCbx:=TOleAuto():New('CobreBemX.ContaCorrente') IF VALTYPE(oCbx) != 'O' MSGINFO('Erro ao tentar inicializar componente.','ATENÇÃO') BREAK ENDIF oCbx:ArquivoLicenca:=cArqLicenca oCbx:PadroesBoleto:PadroesBoletoImpresso:CaminhoImagensCodigoBarras := '\VSIS\'+SIGLC+'\COBREBEM\Imagens\' oCbx:PadroesBoleto:PadroesBoletoImpresso:LayoutBoleto:='Padrao' oCbx:PadroesBoleto:Demonstrativo := "DEMONSTRATIVO TESTE" oCbx:LocalPagamento := 'LOCAL DE PAGAMENTO' oBoleto:=oCbx:DocumentosCobranca:Add() oBoleto:DataDocumento := DTOC(DATE_SYS()) oBoleto:DataVencimento := DTOC(DATE_SYS()+30) oBoleto:NumeroDocumento := '12345' oBoleto:ValorDocumento := 19.00 oBoleto:TipoDocumentoCobranca := 'DMI' oBoleto:NossoNumero := '10000000' oBoleto:CNPJSacado := ALLTRIM(DSP(99999999999999,"C","J")) oBoleto:NomeSacado := "NOME DO SACADO" oBoleto:EnderecoSacado := "ENDERECO DO SACADO" oBoleto:BairroSacado := "BAIRRO DO SACADO" oBoleto:CidadeSacado := "CIDADE DO SACADO" oBoleto:EstadoSacado := "UF" oBoleto:CepSacado := 99999999 oBoleto:SacadorAvalista := "SACADOR/AVALISTA" oBoleto:PadroesBoleto:InstrucoesCaixa = "<br><br>Não cobrar juros e multa após o vencimento" oCbx:PadroesBoleto:PadroesBoletoEmail:LayoutBoletoEmail:='PadraoImpressao' oCbx:PadroesBoleto:PadroesBoletoEmail:URLLogotipo:='http://www.cobrebem.com/imagenscbe/341.jpg' oCbx:PadroesBoleto:PadroesBoletoEmail:URLImagensCodigoBarras:='http://www.cobrebem.com/imagenscbe/' oCbx:PadroesBoleto:PadroesBoletoEmail:PadroesEmail:CopiaFrom:=.T. oCbx:PadroesBoleto:PadroesBoletoEmail:PadroesEmail:CopiaReply:=.F. oCbx:PadroesBoleto:PadroesBoletoEmail:PadroesEmail:FormaEnvio:=1//feeSMTPBoletoHTML $00000000 oCbx:PadroesBoleto:PadroesBoletoEmail:PadroesEmail:Mensagem:='Corpo do e-mail' oCbx:PadroesBoleto:PadroesBoletoEmail:PadroesEmail:Assunto:='Assunto' oCbx:PadroesBoleto:PadroesBoletoEmail:PadroesEmail:EmailFrom:Endereco:='email@email.com' oCbx:PadroesBoleto:PadroesBoletoEmail:SMTP:Servidor:='smtp.gmail.com' oCbx:PadroesBoleto:PadroesBoletoEmail:SMTP:Porta:=465//465 oCbx:PadroesBoleto:PadroesBoletoEmail:SMTP:Usuario:='email@email.com' oCbx:PadroesBoleto:PadroesBoletoEmail:SMTP:Senha:='senha' oEmailSacado:=oBoleto:EnderecosEmailSacado:Add() oEmailSacado:Nome:='Zé' oEmailSacado:Endereco:='destino@gmail.com' lErro:=.F. *** TRY *** oCbx:EnviaBoletosPorEmail() ********** CATCH oErr ********** //F_ERRO(oErr,.T.) lErro:=.T. ********** END ********** IF lErro ?'Erro' ELSE ?'Sucesso' ENDIF ************ END SEQUENCE ************ FreeLib32(hDll) SetResources(hOldDll) RETURN
  15. Theotokos, boa tarde Chegou a verificar se o cliente está usando o tema clássico do windows ? Tive problema com isso recentemente em que uma tela transparente ficava perfeita no Win 10 e no XP ficava um retângulo preto... ao verificar, constatei que o tema clássico desabilita algumas propriedades gráficas e interfere no bPaint da tela
  16. Dá pra usar API do Google também Basta passar: https://chart.googleapis.com/chart?chs=255x255&cht=qr&chl=<data>&choe=<output_encoding>&chld=<error_correction_level>|<margin> onde: chs= tamanho chl= texto para codificação choe= encoder( UTF-8,Shift_JIS ou ISO-8859-1 ) chld= nível de correção de erros margin= Tamanho da borda branca ao redor do QRCode gerado ------------------------------------------------------------------------------------------------------------ Fonte: https://google-developers.appspot.com/chart/infographics/docs/qr_codes
  17. Bom dia Kapi Eles mudaram o mecanismo de busca do webservice... talvez seja algo relacionado ao que o Rochinha disse Inclusive não tem mais aquela opção de "lista de Ceps", só busca cep com 8 dígitos... Uma pena isso pois era um serviço gratuito e oficial, então os dados eram confiáveis
  18. Bom dia Kapi Na verdade não é um loop eterno, é o número dos ceps retornados para determinada faixa de cep pesquisado, num cep específico a mensagem só é exibida uma única vez. Como algumas faixas de cep tem mais de 100 resultados, a mensagem vai aparecer para os mais de 100 ceps listados... aí estressa mesmo huahuaha Essa rotina foi um teste que fiz pra saber como funcionava esse webservice, mas o retorno da rotina não precisa ser necessariamente uma mensagem para cada cep, pode ser um array de cep, uma listagem. É só ajustar pra retornar "o que ocê querê", o esqueleto já tá aí
  19. Essa é mais simples e busca cep, endereço, ou faixa de cep exemplo de faixa de cep: 13614 //----------------------------------------------------------------------------// // // Autor: Eduardo de Camargo Bilato(EBL) // Objetivo: Utilizar webservice dos correios para buscar cep/endereço // //----------------------------------------------------------------------------// #Include "FiveWin.Ch" #DEFINE ILF CHR(13)+CHR(10) Function Cep( cCep ) local oCep local xCep := padr( if( cCep <> nil,cCep,'' ),60 ) while .t. msgget( 'Busca CEP','Informe o CEP/Endereço desejado:',@xCep ) if empty( xCep ) exit endif oCep := TBusca_Cep():New( xCep ) oCep:End() xCep := space(60) enddo Return Nil //----------------------------------------------------------------------------// *------------------------------------------------------------------------------------------------ * Classe TBusca_Cep * Data 10/03/2014 * Autor EBL * Objetivo Utiliza WebService para obter Cep *------------------------------------------------------------------------------------------------- CLASS TBusca_Cep DATA cCep DATA cTitulo DATA cEndereco DATA cBairro DATA cCidade DATA cUF DATA oXmlHttp DATA nCont DATA aResp DATA cTag1 AS CHARACTER INIT '<span class="resposta' DATA cTag2 AS CHARACTER INIT '</span>' DATA cTag3 AS CHARACTER INIT 'destaque">' DATA cBuffer AS CHARACTER INIT '' METHOD New( xCep ) CONSTRUCTOR METHOD Load() METHOD Quebra_String( cBuff ) METHOD End() ENDCLASS //----------------------------------------------------------------------------// METHOD New( xCep ) CLASS TBusca_Cep ::cCep := xCep ::cTitulo := space(20) ::cEndereco := space(60) ::cBairro := space(40) ::cCidade := space(60) ::cUF := space(02) ::nCont := 0 ::aResp := {} if ::cCep <> NIL Self:Load() endif return Self //----------------------------------------------------------------------------// METHOD Load() CLASS TBusca_Cep local nCnt := 0 local nCn1 := 0 local nSeq := 1 local nAux := 0 local nPag := 0 local aBuff := {} local cLink := '' local cLin0 := 'http://m.correios.com.br/movel/buscaCepConfirma.do?cepEntrada='+::cCep+'&metodo=buscarCep' local cLin1 := 'http://m.correios.com.br/movel/buscaCepConfirma.do?cepEntrada='+::cCep+'&metodo=proximo&numPagina=' local nMaxPag := 1 for n1 := 1 to int( nMaxPag ) step 10 SysRefresh() nPag++ if nPag == 1 cLink := cLin0 else cLink := cLin1+alltrim(str(nPag-1)) endif ::oXmlHttp := CreateObject( "Microsoft.XMLHTTP" ) if ::oXmlHttp <> nil ::oXmlHttp:Open( 'GET',cLink,.f. ) ::oXmlHttp:Send() ::cBuffer := strtran( ::oXmlHttp:ResponseBody,CHR(13),'' ) aBuff := hb_aTokens( ::cBuffer,CHR(10) ) else exit endif SysWait(1) ::nCont := 0 ::aResp := {} for wx:=1 to len( aBuff ) if empty( aBuff[wx] ) loop endif //são 10 registros por página if nPag == 1 nAux := Busca_Limit( aBuff[wx] ) if nAux > 0 nMaxPag := nAux endif endif ::Quebra_String( aBuff[wx] ) next for xx:=1 to len( ::aResp ) nCn1++ if nCn1%2 == 0 if nCnt == 0 ::cEndereco := ::aResp[xx] nCnt++ elseif nCnt == 1 ::cBairro := ::aResp[xx] nCnt++ elseif nCnt == 2 ::cCidade := ::aResp[xx] nCnt++ elseif nCnt == 4 ::cCep := ::aResp[xx] nCnt++ endif nCn1 := 0 elseif nCnt == 3 ::cUF := ::aResp[xx] nCnt++ nCn1 := 0 endif if nCnt == 5 nAux := at( ' ',::cEndereco ) if nAux > 0 ::cTitulo := left( ::cEndereco,nAux-1 ) ::cEndereco := substr( ::cEndereco,nAux+1 ) endif ? 'Sequência: ' + alltrim(str(nSeq)) ; , ; , 'Cep: ' + ::cCep ; , 'Titulo: ' + ::cTitulo ; , 'Endereço: ' + ::cEndereco ; , 'Bairro: ' + ::cBairro ; , 'Cidade: ' + ::cCidade ; , 'UF: ' + ::cUF nCnt := 0 nSeq++ endif next ::oXmlHttp:Abort() next if nSeq == 1 msginfo( 'CEP não encontrado','Busca' ) endif return //----------------------------------------------------------------------------// METHOD Quebra_String( cBuff ) CLASS TBusca_Cep local nIni := 0 local nFim := 0 local uDado := '' local xString := '' for xx:=1 to len( cBuff ) uDado += substr( cBuff,xx,1 ) //evitar que o programa se perca na separação dos resultados if 'Cliente:' $ uDado .or.; 'Unidade:' $ uDado nIni := 0 nFim := 0 ::nCont := 0 loop endif if ( ::cTag1 $ uDado ) .or. ( ::cTag3 $ uDado ) uDado := '' nIni := xx ::nCont := 1 elseif ( ::cTag2 $ uDado ) uDado := '' nFim := xx-len(::cTag2) ::nCont := 2 endif if nIni > 0 .and. nFim > 0 xString := Limpa_Leitura( substr( cBuff,nIni,nFim ) ) aadd( ::aResp,xString ) nIni := 0 nFim := 0 ::nCont := 0 endif next uDado := alltrim(uDado) if ::nCont == 1 .and. !empty(uDado) if !('Cliente:' $ uDado) uDado := Limpa_Leitura( uDado ) aadd( ::aResp,uDado ) endif endif return //----------------------------------------------------------------------------// METHOD End() CLASS TBusca_Cep Self := nil return //----------------------------------------------------------------------------// static Function Busca_Limit( cBuff ) local nRegistros := 0 local nAt := at( '<input type="hidden" name="regTotal" value="',cBuff ) local cStr := cBuff if nAt > 0 cStr := substr( cStr,nAt+44 ) nAt := at( '">',cStr ) - 1 nRegistros := val( left( cStr,nAt ) ) endif Return nRegistros //----------------------------------------------------------------------------// static Function Limpa_Leitura( cText ) local oCep := TBusca_Cep():new() local cNewText := alltrim( cText ) cNewText := strtran( cNewText,oCep:cTag1,'' ) cNewText := strtran( cNewText,oCep:cTag2,'' ) cNewText := strtran( cNewText,oCep:cTag3,'' ) cNewText := strtran( cNewText,'/' ,'' ) cNewText := strtran( cNewText,'<br>' ,'' ) cNewText := strtran( cNewText,'>' ,'' ) Return cNewText //----------------------------------------------------------------------------// static Function LerBuffer( cTexto,cStri1 ) local nPos1 := 0 local nPos2 := 0 local cRetor := "" local cStri2 := Stuff( cStri1,2,0,'/' ) if Upper( cStri1 ) $ Upper( cTexto ) nPos1 := At( Upper( cStri1 ),Upper( cTexto ) ) + Len( cStri1 ) nPos2 := At( Upper( cStri2 ),Upper( cTexto ) ) if nPos1 == 0 cRetor := '' elseif nPos2 == 0 cRetor := SubStr( cTexto,nPos1 ) else cRetor := SubStr( cTexto,nPos1,nPos2-nPos1 ) endif endif Return( cRetor ) //----------------------------------------------------------------------------//
  20. Boa tarde GIBAF Creio que o Samir quis dizer pra você dar uma olhada na pasta SOURCE, lá estão os PRGs das classes do FW Não conheço a vGet então não posso ajudá-lo =/
  21. Bom dia Gibaf Então basta fazer o seguinte: @ 01,01 GET oGet var WGET OF oDLG oGet:bKeyDown := {|nKey| if( nKey == K_ENTER, Valida_Get(),.t. ) } //------------ Function Valida_Get() local lRet := .t. if validação ok lRet := .t. else lRet := .f. endif Return lRet
  22. eita zica... me parece que todos os links que apareceram na minha "googleada" estão quebrados( pelo menos os 6 primeiros ) poxa, o jeito vai ser pedir a um contador( ou algo parecido ) pra te passar a regra pra calcular esse dígito validador do suframa
  23. Ou também você pode testar num WHILE Ex: while .t. //declaração da tela DEFINE DIALOG oDLG bla bla bla //declaração do get @ 01,01 GET oGet var WGET OF oDLG valid( if( oGet:LimitText(),oDLG:End(),.t. ) ) ACTIVATE DIALOG oDLG CENTER //testar aqui suas validações if correto exit endif enddo
  24. Olá GIbaf Não sei para o que você está usando essa tela com um get somente, mas você também pode testar o tamanho da sua string no bKeyDown ou bChange caso ela tenha um tamanho determinado que você possa usar. PS: nunca usei o método LimitText(), encontrei ele agora olhando a classe tget, só usei como exemplo pra ilustrar o que quero dizer Seria algo parecido com isso: @ 01,01 GET oGet var WGET OF oDLG oGet:bChange := {|| Valida_Get( ::LimitText() ) } //------------ Function Valida_Get( xTam ) local lRet := .t. if xTam lRet := ( validação == verdadeiro ) endif Return lRet
  25. Bom dia Valdir Talvez esse link te dê algum auxílio https://groups.google.com/forum/#!topic/sped-nfe/y-f__A_YRhU
×
×
  • Create New...