Jump to content
Fivewin Brasil

sambomb

Membros
  • Posts

    1,951
  • Joined

  • Last visited

  • Days Won

    10

Reputation Activity

  1. Like
    sambomb got a reaction from kapiaba in Disponível para trabalho home office   
    Já consegui uma vaga, obrigado a todos que enviaram mensagens 
  2. Like
    sambomb got a reaction from kapiaba in LinkedIn   
    No perfil do LinkedIn tem uma área referente as competências, que devem ser indicadas por terceiros.
  3. Like
    sambomb got a reaction from Theotokos in Conteudo de uma Matriz   
    aArray := {"002", "SAMIR", "TESTE"}
    ? aScan(aArray,"001") //-- 0
    ? aScan(aArray,"002") //-- 1
    ? aScan(aArray,"003") //-- 0
    ? aScan(aArray,"SAMIR") //-- 2
    ? aScan(aArray,"TESTE") //-- 3

    aArray := {{"001", "SAMIR", "TESTE"},{"002", "JOAO", "TESTA"}}
    ? aScan(aArray,{|X| X[1] = "001"}) //-- 1
    ? aScan(aArray,{|X| X[1] = "002"}) //-- 2
    ? aScan(aArray,{|X| X[2] = "SAMIR"}) //-- 2
    ? aScan(aArray,{|X| X[2] = "JOAO"}) //-- 2
    ? aScan(aArray,{|X| X[3] = "TESTE"}) //-- 1
    ? aScan(aArray,{|X| X[3] = "TESTA"}) //-- 2
  4. Like
    sambomb got a reaction from kapiaba in Como descobrir senha Wi-fi do vizinho   
    Perguntar costuma ser mais rápido
  5. Like
    sambomb got a reaction from kapiaba in Como remover o ícone Baixe o Windows 10 da bandeja do sistema   
    Tem outro modo: Instale o windows 10
  6. Like
    sambomb reacted to toya in Recarga de celular cellcard   
    Samir := Mestre Help 1...
  7. Like
    sambomb got a reaction from kapiaba in Recarga de celular cellcard   
    Serve eu?
  8. Like
    sambomb got a reaction from kapiaba in Verificar Memória do Computador   
    Obrigado, vou testar aqui.
  9. Like
    sambomb reacted to kapiaba in Verificar Memória do Computador   
    Para samir - Sambomb.
    #include "FiveWin.ch" function Main() LOCAL cMemoria, nBytes, nKBytes, nMBytes, nGBytes nBytes := nExtMem() nKBytes := nBytes / 1014 nMBytes := nKBytes / 1024 nGBytes := nMBytes / 1014 // Com erro - With Error // aAdd( ::aTexto,"Memória: " + cValToChar( Int( nExtMem() / ( 1024 * 1024 ) ) + 1 ) + " MBs" ) ? ( "Memóry Error: " + cValToChar( Int( nExtMem() / ( 1024 * 1024 ) ) + 1 ) + " MBs" ) ? cMemoria := Trans( nExtMem(), "@E 9,999,999,999 Bytes free" ) ? cMemoria := Trans( ( nExtMem() / ( 1024 * 1024 * 1014 ) ), "@E 999.99 GB Free" ) // or .97 = 4 Gbs. ? cMemoria := Trans( ( nExtMem() / ( 1024 * 1024 * 1014 ) + 1 ), "@E 999.99 GB Total" ) RETURN NIL // END OF PROGRAM
  10. Like
    sambomb got a reaction from kapiaba in Reiniciar um programa após o fechamento   
    CmdRun({"taskkill /f /im programa.exe", DirExe()+"programa.exe"})
    ****************************************************************************
    function CmdRun(xLinhaComando, bEval, lExibe)
    ****************************************************************************
    *
    * Rodar uma linha de comando no prompt do DOS
    * Parametros: xLinhaComando
    * Retorno: Nenhum
    *
    * Autor: Samir
    * 06/12/2011 - 09:33:25
    *
    ****************************************************************************
    local cFileBat := "", cTextoBat := "", i := 0, lResult := .F.
    Default lExibe := .F.
    //-- Verifica se é uma única linha
    If ValType(xLinhaComando) = "C"
    cTextoBat := xLinhaComando
    //-- Verifica se são múltiplas linhas
    elseIf ValType(xLinhaComando) = "A"
    For i := 1 to Len(xLinhaComando)
    if !Empty(cTextoBat)
    cTextoBat += CRLF
    end
    cTextoBat += xLinhaComando
    end
    //-- Tratamento para parâmetro inválido
    else
    MsgInfo("Parâmetro inválido","CMDRUN")
    Return lResult
    end
    //-- Gerar o nome do arquivo bat a ser executado
    cFileBat := DirExe() + "CMDRUN_"+DToS(Date())+"_"+StrTran(Now(),":") + ".BAT"
    //-- Roda um loop para apagar o arquivo
    i := 0
    While File(cFileBat)
    SysRefresh()
    If fErase(cFileBat) != 0
    SysWait(1)
    //-- 3 tentativas "silenciosas"
    If i < 3
    i++
    loop
    end
    //-- Mensagem de erro
    If MsgYesNo("Erro " + UT( fError() ) + " ao apagar o arquivo: " + CRLF +;
    cFileBat + CRLF + "Tentar novamente")
    loop
    else
    exit
    end
    else
    exit
    end
    end
    //-- Se o arquivo não existe
    If !File(cFileBat)
    //-- Tenta criar o arquivo bat
    If CreateTxt(cFileBat,cTextoBat)
    //-- Verifica se criou
    i := 0
    While !File(cFileBat)
    SysRefresh()
    SysWait(1)
    //-- 3 tentativas "silenciosas"
    If i < 3
    i++
    loop
    end
    If MsgYesNo("Arquivo ainda não foi criado " + CRLF + "Deseja aguardar")
    loop
    else
    exit
    end
    end
    //-- Verifica se o arquivo foi criado com sucesso
    If File(cFileBat)
    lResult := .T.
    //-- Executa o BAT
    If lExibe
    WaitRun(cFileBat,1)
    else
    WaitRun(cFileBat,0)
    end
    //-- Caso tenha sido passada uma validação, executa
    If ValType(bEval) = "B"
    lResult := Eval(bEval)
    end
    end
    //-- Apaga o arquivo BAT para não deixar resíduos
    i := 0
    While File(cFileBat)
    SysRefresh()
    If fErase(cFileBat) != 0
    SysWait(1)
    //-- 3 tentativas "silenciosas"
    If i < 3
    i++
    loop
    end
    If MsgYesNo("Erro " + UT( fError() ) + " ao apagar o arquivo: " + CRLF +;
    cFileBat + CRLF + "Tentar novamente")
    loop
    else
    exit
    end
    else
    exit
    end//If fErase(cFileBat) != 0
    end//While File(cFileBat)
    end//If CreateTxt(cFileBat,cTextoBat)
    end//If !File(cFileBat)
    Return lResult
    /*------------------------------------------------------------------------*/
    ****************************************************************************
    Function DirExe()
    ****************************************************************************
    *
    * Pegar o caminho aonde se encontra o executavel
    * Parametros:
    * Retorno: cDir
    *
    * Autor: Samir
    * 18/5/2009 - 09:55:56
    *
    ****************************************************************************
    local cDir := cFilePath( GETMODULEFILENAME( GETINSTANCE() ) )
    If Right(cDir,1) != "\"
    cDir += "\"
    end
    Return cDir
    /*------------------------------------------------------------------------*/


    ****************************************************************************
    function UT(cStr)
    ****************************************************************************
    *
    * Remover os espaços excedentes e forçar caixa alta
    * Parametros: cStr
    * Retorno: cStrFormatado
    *
    * Autor: Samir
    * 7/4/2009 - 09:55:35
    *
    ****************************************************************************

    local cStrFormatado := ""

    If ValType(cStr) = "N"
    cStrFormatado := Str(cStr)
    elseif ValType(cStr) = "C"
    cStrFormatado := cStr
    elseif ValType(cStr) = "U"
    cStrFormatado := ""
    elseif ValType(cStr) = "A"
    cStrFormatado := "Matriz"
    else
    cStrFormatado := ""
    end

    cStrFormatado := AllTrim(Upper(cStrFormatado))

    Return cStrFormatado

    /*------------------------------------------------------------------------*/
  11. Like
    sambomb reacted to toya in Enquete: Curso de xHabour/FiveWin/SQL   
    Pois é, como nos velhos tempos...
    "O Clipper não morreu..."

    Minhas rotinas "lusitanas" estarão a disposição dos colegas aprendizes...
  12. Like
    sambomb got a reaction from kapiaba in Encontro 2015   
    Me interessa!
  13. Like
    sambomb got a reaction from Theotokos in for next   
    For contador := 1 to nMaximo
    If !Condicao()
    Loop //-- Não precisa incrementar o contador pois ele faz automaticamente
    End
    End
  14. Like
    sambomb got a reaction from evertonlb in Posso mudar o "Say" cada vez que foco um get diferente? RESOLVIDO   
    Fora isso:

    Procedure RedefinirGet( nGet ) Redefine Get oGet[nGet]; var cGet[nGet]; Update; ID 100 + nGet; Of oDlg oGet[nGet]:Cargo := "Get " + AllTrim( Str( nGet ) ) oGet[nGet]:bGotFocus := {|| oSay:SetText( oGet[nGet]:Cargo ) } Return
  15. Like
    sambomb got a reaction from kapiaba in Classe para tratar XML   
    Tratar como texto eu já imagino uma solução, mas queria uma solução similar a que já está implementada, caso não exista outra forma eu vou partir para o tratamento do texto, mas queria algo mais sofisticado e simples de implementar.
  16. Like
    sambomb reacted to rochinha in Classe para tratar XML   
    Amiguinhos,

    Vou reproduzir um post de 2009 que dá uma alusão mais direta a necessidade do forense sambomb.

    Quem não conhece o termo EDI, Eletronic Data Interchange, termo bonito para o que conhecemos como transferência de arquivos.

    No meu caso uso em meu sistema para fazer envio de informações entre filiais de meus clientes.

    Para tanto faço uso de arquivos formatados em .XML e só mudo a extensão para diferenciar e não misturar com os tantos arquivos manipulados pelo mesmo.

    No exemplo a seguir simulo a geração de um arquivo contendo dados de um cliente e os itens de seu orçamento, que depois de tratados pelo modulo de recebimento atualiza/inclui o cliente no cadastro e inclui um pedido na carteira de vendas.

    Vejam que o codigo é bem limpo, e de fácil assimilação e o .XML gerado segue uma estrutura bem definida.

    Para gerar a primeira parte usei a classe TXMLWrite( Fred ) e fiz pequeninas mudanças para continuar usando a classe original para outras coisas.

    A segunda parte do exemplo apresenta como interpretar um conteudo .XML e obter as informações. Para isto é necessário que o MS XML Toolkit ou MSXML4 esteja instalado.


    /*
    *
    * Teste de integracao XML atraves de arquivos EDX
    *
    */
    #include "FiveWin.ch"
    #include "edx.ch"

    #define CR Chr(13)
    #define LF Chr(10)

    #define BS "\"

    Function main()
    LOCAL cEDX, cHomeDir
    LOCAL cFile, cDOCFile, cXMLFile

    PUBLIC oEDX

    cXMLFile := "TESTEDX.EDX"

    if ! file( cXMLFile )
    EDX oEDX FILE cXMLFile FORMATED
    EDX OPEN MARK "pedido" ATTRIB "Database" VALUE "25709" OF oEDX
    EDX OPEN MARK "cliente" ATTRIB "idcliente" VALUE "803" OF oEDX
    EDX OPEN MARK "nome" TYPE "" TAG "JOSE CARLOS DA ROCHA" AUTOCLOSE OF oEDX
    EDX OPEN MARK "endereco" TYPE "" TAG "RUA DR MARIO MAURO RAMOS MATTOSO 50" AUTOCLOSE OF oEDX
    EDX OPEN MARK "bairro" TYPE "" TAG "PIRITUBA" AUTOCLOSE OF oEDX
    EDX OPEN MARK "cidade" TYPE "" TAG "SAO PAULO" AUTOCLOSE OF oEDX
    EDX OPEN MARK "estado" TYPE "" TAG "SP" AUTOCLOSE OF oEDX
    EDX OPEN MARK "cep" TYPE "" TAG "05171-340" AUTOCLOSE OF oEDX
    EDX OPEN MARK "telefone" TYPE "" TAG "(011)3534-3099" AUTOCLOSE OF oEDX
    EDX OPEN MARK "cgc" TYPE "" TAG "000.000.000-000" AUTOCLOSE OF oEDX
    EDX OPEN MARK "inscr" TYPE "" TAG "00.000.000" AUTOCLOSE OF oEDX
    EDX CLOSE MARK OF oEDX // cliente
    //
    EDX OPEN MARK "item" ATTRIB "Numero" VALUE "1" OF oEDX
    EDX OPEN MARK "dataped" TYPE "" TAG "20080926" AUTOCLOSE OF oEDX
    EDX OPEN MARK "resumido" TYPE "" TAG "AC1000" AUTOCLOSE OF oEDX
    EDX OPEN MARK "descricao" TYPE "" TAG "PRODUTO AC 1000" AUTOCLOSE OF oEDX
    EDX OPEN MARK "quantidade" TYPE "" TAG "1.000" AUTOCLOSE OF oEDX
    EDX OPEN MARK "valor" TYPE "" TAG "13.600" AUTOCLOSE OF oEDX
    EDX OPEN MARK "desconto" TYPE "" TAG "0.000" AUTOCLOSE OF oEDX
    EDX OPEN MARK "medidas" OF oEDX
    EDX OPEN MARK "largura" TYPE "" TAG "0.000" AUTOCLOSE OF oEDX
    EDX OPEN MARK "altura" TYPE "" TAG "0.000" AUTOCLOSE OF oEDX
    EDX OPEN MARK "compriment" TYPE "" TAG "0.000" AUTOCLOSE OF oEDX
    EDX CLOSE MARK OF oEDX // medidas
    EDX CLOSE MARK OF oEDX // item
    //
    EDX OPEN MARK "item" ATTRIB "Numero" VALUE "2" OF oEDX
    EDX OPEN MARK "dataped" TYPE "" TAG "20081214" AUTOCLOSE OF oEDX
    EDX OPEN MARK "resumido" TYPE "" TAG "AC1020" AUTOCLOSE OF oEDX
    EDX OPEN MARK "descricao" TYPE "" TAG "PRODUTO AC 1020" AUTOCLOSE OF oEDX
    EDX OPEN MARK "quantidade" TYPE "" TAG "3.000" AUTOCLOSE OF oEDX
    EDX OPEN MARK "valor" TYPE "" TAG "5.400" AUTOCLOSE OF oEDX
    EDX OPEN MARK "desconto" TYPE "" TAG "0.000" AUTOCLOSE OF oEDX
    EDX OPEN MARK "medidas" OF oEDX
    EDX OPEN MARK "largura" TYPE "" TAG "0.000" AUTOCLOSE OF oEDX
    EDX OPEN MARK "altura" TYPE "" TAG "0.000" AUTOCLOSE OF oEDX
    EDX OPEN MARK "compriment" TYPE "" TAG "0.000" AUTOCLOSE OF oEDX
    EDX CLOSE MARK OF oEDX // medidas
    EDX CLOSE MARK OF oEDX // item
    EDX CLOSE MARK OF oEDX // pedido
    EDX END oEDX
    //
    endif

    cMethod := "POST"
    cURL := "http://www.f2b.com.br/WSBilling"

    oEDXSend := TOLEAuto():New( "Microsoft.XMLHTTP" )

    //oEDXSend:Open( cMethod, cURL, .F. )
    //oEDXSend:Send( cXMLFile )
    //cEDXBuffer := oEDXSend:ResponseText

    cHomeDir := CurDrive() + ":" + BS + CurDir() + BS

    cFile := cHomeDir + cXMLFile

    oXMLDoc := TOLEAUTO():New("Microsoft.XMLDOM")
    oXMLDoc:async := .f.

    lSuccess := oXMLDoc:load( cXMLFile )

    if lSuccess

    x := oXMLDoc:getElementsByTagName( "cliente" )
    ? oXMLDoc:getElementsByTagName( "nome" ):Item(0):Text , ;
    oXMLDoc:getElementsByTagName( "endereco" ):Item(0):Text, ;
    oXMLDoc:getElementsByTagName( "bairro" ):Item(0):Text , ;
    oXMLDoc:getElementsByTagName( "cidade" ):Item(0):Text , ;
    oXMLDoc:getElementsByTagName( "estado" ):Item(0):Text , ;
    oXMLDoc:getElementsByTagName( "cep" ):Item(0):Text , ;
    oXMLDoc:getElementsByTagName( "telefone" ):Item(0):Text, ;
    oXMLDoc:getElementsByTagName( "cgc" ):Item(0):Text , ;
    oXMLDoc:getElementsByTagName( "inscr" ):Item(0):Text

    x := oXMLDoc:getElementsByTagName( "item" )
    for i = 1 to x:length
    ? oXMLDoc:getElementsByTagName( "dataped" ):Item(i-1):Text , ;
    oXMLDoc:getElementsByTagName( "descricao" ):Item(i-1):Text , ;
    oXMLDoc:getElementsByTagName( "resumido" ):Item(i-1):Text , ;
    oXMLDoc:getElementsByTagName( "quantidade" ):Item(i-1):Text, ;
    oXMLDoc:getElementsByTagName( "valor" ):Item(i-1):Text , ;
    oXMLDoc:getElementsByTagName( "desconto" ):Item(i-1):Text
    next

    else
    ? "erro de abertura"
    endif

    return nil

    #include "edx.prg"


    Para completar o exemplo segue os codigos de suporte, EDX.CH:

    #xcommand EDX <oEDX> FILE <cOut> ;
    [ VERSION <cVer> ] ;
    [ ENCODING <cEncode> ] ;
    [ STYLESHEET <cSheet> ] ;
    [ <lFormated:FORMATED> ];
    => ;
    <oEDX> := TEDXWrite():New( <cOut>, <cVer>, <cEncode>, <cSheet>, <.lFormated.> )

    #xcommand EDX OPEN MARK <cMark> [ TYPE <cType> ] ;
    [ ATTRIB <cAttrib1> VALUE <uVal1> ;
    [ ATTRIB <cAttrib2> VALUE <uValN> ]] ;
    [ EXTENDED <uExt> ] ;
    [ TAG <cTag> ] ;
    [ <lAutoClose:AUTOCLOSE> ];
    <of: OF> <oEDX> ;
    => ;
    <oEDX>:Open( <cMark>, <cType>,;
    { [ { <cAttrib1> ,<uVal1> } ] [, { <(cAttrib2)> ,<(uValN)>} ] },;
    <cTag>, <.lAutoClose.>, <uExt>)

    #xcommand EDX CLOSE MARK <of: OF> <oEDX> ;
    => ;
    <oEDX>:Close( )

    #xcommand EDX SEND <cXMLDoc> ;
    URL <cURL> ;
    METHOD <cMethod> ;
    <of: OF> <oEDX> ;
    => ;
    <oEDX>:Send( <cMethod>, <cURL>, <cXMLDoc> )

    #xcommand EDX END <oEDX> ;
    => ;
    <oEDX>:End()


    Codigo da classe, EDX.PRG:

    *******************************************************************************
    * Pruebas para la creacion de fichero xml desde fivewin *
    * 01 - 05 - 2002 *
    * Enviarme vuestras dudas y sugerencias a fredy@airtel.net *
    *******************************************************************************

    #include "objects.ch"
    #include "fileio.ch"
    #xcommand DEFAULT <uVar1> := <uVal1> ;
    [, <uVarN> := <uValN> ] => ;
    If( <uVar1> == nil, <uVar1> := <uVal1>, ) ;;
    [ If( <uVarN> == nil, <uVarN> := <uValN>, ); ]

    CLASS TEDXWRITE
    DATA hFile, lFormated, cCRLF, aMark
    METHOD New( cOut, cVer, cEncode, cSheet, lFormated ) CONSTRUCTOR
    METHOD Open( cMark, cType, aAttrib, cTag, lClose, cExt )
    METHOD End()
    METHOD Procesar( cText )
    METHOD Send( cMethod, cURL, cXMLDoc )
    METHOD Close()
    ENDCLASS

    METHOD New( cOut, cVer, cEncode, cSheet, lFormated ) CLASS TEDXWRITE
    DEFAULT cVer := "1.0"
    DEFAULT cEncode := "ISO-8859-1"
    //DEFAULT
    ::lFormated := .t.
    ::cCRLF := If( lFormated, Chr(13)+Chr(10), "" )
    ::aMark := {}
    ::hFile := FCreate( AllTrim( cOut ), 0 )
    ::Procesar( '<?xml version="' + cVer + '" encoding="' + cEncode + '"?>' )
    IF !Empty( cSheet )
    ::Procesar( '<?xml-stylesheet href="'+ AllTrim( cSheet ) + '" Type="text/xsl"?>' )
    END IF
    Return( Self )

    METHOD Open( cMark, cType, aAttrib, cTag, lClose, cExt ) CLASS TEDXWRITE
    Local n, cBuffer
    DEFAULT cTag := ""
    DEFAULT cType := ""
    DEFAULT cExt := ""
    aAdd( ::aMark, cMark )
    cBuffer := '<' + cMark
    //IF Len( ::aMark ) == 1
    // cBuffer += ' xmlns:dt="urn:schemas-microsoft-com:datatypes"'
    // xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"
    // xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    //END IF
    IF !Empty( cType )
    cBuffer += ' dt:dt= "' + cType + '"'
    END IF
    IF Len( aAttrib ) > 0
    FOR n := 1 TO Len( aAttrib )
    cBuffer += ' '+ aAttrib[n,1] + ' = "' + aAttrib[n,2] + '" '
    NEXT
    END IF
    cBuffer += '>' + alltrim( cTag ) + If( lClose, '</' + cMark + '>' , "" )
    ::Procesar( cBuffer )
    IF lClose
    aSize( ::aMark, Len( ::aMark ) -1 )
    END IF

    METHOD Close() CLASS TEDXWRITE
    ::Procesar( "</" + ::aMark[ Len( ::aMark ) ] + ">" )
    aSize( ::aMark, Len( ::aMark ) -1 )

    METHOD End() CLASS TEDXWRITE
    ::Procesar( "" ) // "</xml>" )
    FClose( ::hFile )

    METHOD Send( cMethod, cURL, cXMLDoc ) CLASS TEDXWRITE
    oEDXSend := TOLEAuto():New( "Microsoft.XMLHTTP" )
    oEDXSend:Open( cMethod, cURL, .F. )
    oEDXSend:Send( cXMLDoc )
    //cEDXBuffer := oEDXSend:ResponseText
    return "" // cEDXBuffer

    METHOD Procesar( cBuffer ) CLASS TEDXWRITE
    Local nSpaces := If( ::lFormated, Len( ::aMark ), 0 )
    cBuffer := Space( nSpaces )+ cBuffer + ::cCRLF
    FWrite( ::hFile, cBuffer, Len( cBuffer ) )
    return

  17. Like
    sambomb reacted to rochinha in Classe para tratar XML   
    Amiguinhos,
    Vejamos o tratamento que dariamos ao .XML em questão usando as dicas acima:
    ... <segmento> <detalhes> ... </detalhes> <saida> ... </saida> <entrada> ... </segmento> <segmento> ... Exemplificando:
    oXMLDoc := TOLEAUTO():New("Microsoft.XMLDOM") oXMLDoc:async := .f. lSuccess := oXMLDoc:load( cXMLFile ) if lSuccess ... // Farei a leitura de quantos segmentos houverem nSegmentos := oXMLDoc:getElementsByTagName( "segmento" ) for i = 1 to nSegmentos:length ... // Pega XML do trecho cXMLDetalhes := oXMLDoc:getElementsByTagName( "Detalhes" ):Item(i-1):xml ... // Dou tratamento ao xml resgatado em cXMLDetalhes ... cXMLSaida := oXMLDoc:getElementsByTagName( "Saida" ):Item(i-1):xml ... // Dou tratamento ao xml resgatado em cXMLSaida ... cXMLEntrada := oXMLDoc:getElementsByTagName( "Entrada" ):Item(i-1):xml ... // Dou tratamento ao xml resgatado em cXMLEntrada ... Outra coisa que se deve levar em consideração é o fato de uma tag não existir no .XML, por padrão ao escrever o conteúdo de um arquivo assim é melhor que exista conteúdo, mas muitas vezes encontramos "lixo" que nos atrapalham como <TagIncompleta /> ou <TagVazia></TagVazia>. Nos dois caso só nos faz perder tempo em processamento mas ainda assim devemos tratar e para tal é necessário criticar se a tag existe.
    Neste caso posso fazer de duas formas:
    Via DOM:
    ... cXMLDoc := MemoRead( cEDXFile ) oXMLDoc := TOLEAUTO():New("Microsoft.XMLDOM") oXMLDoc:async := .f. lSuccess := oXMLDoc:load( cEDXFile ) if lSuccess oteste := oXMLDoc:getElementsByTagName( "segmento" ) lExisteTagDetalhes := CriticaTagName( "detalhes", oXMLDoc, cXMLDoc ) lExisteTagSaida := CriticaTagName( "saida", oXMLDoc, cXMLDoc ) ... Function CriticaTagName( _tagName_, oXMLDoc, cXMLDoc ) if upper( "<"+_tagName_+">" ) $ upper( cXMLDoc ) _cTagName_ := oXMLDoc:getElementsByTagName( _tagName_ ):Item(0):Text else _cTagName_ := "" endif return _cTagName_ Via STRING:
    ... cXMLDoc := MemoRead( cEDXFile ) if ! empty( cXMLDoc ) lExisteTagDetalhes := ValidaXMLField( "Detalhes", cXMLDoc ) lExisteTagSaida := ValidaXMLField( "Saida" , cXMLDoc ) ... function ValidaXMLField( _XMLField_, _XMLFile_ ) return iif( AT( "<"+_XMLField_+">", _XMLFile_ ) > 0, .t., .f. )
  18. Like
    sambomb got a reaction from kapiaba in Apresentando fivedit de FiveTech   
    Invejei!
    Queria um update mas ta dificil de desembolsar dinheiro...
  19. Like
    sambomb got a reaction from kapiaba in Como atualizar o código da versão em .RES automaticamente? [Resolvido]   
    Com -r agora funcionou!


    Muito obrigado, agora é só fazer a edição do arquivo RC automaticamente!
  20. Like
    sambomb got a reaction from kapiaba in Quem é melhor Filedelete() ou Ferase()?   
    fErase é de nível mais baixo, o que eu considero que seja uma vantagem pois tem um número menor de fatores que podem causar problemas.
  21. Like
    sambomb got a reaction from kapiaba in Remover(Excluir) um Diretório(Pasta)   
    FUNCTION EliminaDir(cDir)
    If IsDir(cDir)
    WinExec("RD " + cDir + " /S",0)
    Else
    ? "Diretório " + cDir + " inválido."
    End
    Return

  22. Like
    sambomb got a reaction from rochinha in DLL32 FUNCTION   
    Rochinha, algumas dlls indicam sucesso com 1 e erro com 0, outras sucesso com 0 e erro com -1, entre infinitas combinações possíveis, até mesmo o código do erro já pode vir diretamente nesse retorno.
    Exemplo:
    1 = Sucesso
    0 = Sem comunicação
    -1 = Parâmetro inválido
    -2 = Erro aleatório de exemplo
    -3 = Outro exemplo
    Então nem sempre pode por <= 1, vai de caso a caso
    E no caso dele o retorno válido é o 1:
  23. Like
    sambomb got a reaction from kapiaba in Anti-Spywares e Adwares   
    http://brazil.kaspersky.com/produtos/produtos-para-usuarios-domesticos/internet-security
    Se você leva antivirus a sério deveria experimentar utilizar um pago, tem pacotes de 3 anos para multiplas máquinas que valem o investimento
  24. Like
    sambomb got a reaction from kapiaba in Verificar se tem anti virus na máquina.   
    If File( "C:\Program Files\Microsoft Security Client\MsMpEng.exe" )
  25. Like
    sambomb got a reaction from Jmsilva in Como pegar a tecla Enter - Resolvido   
    Fivewin tem uns bugs com foco em componente...
    O que eu fiz ae é criar uma tela que fica ativa só por 0.2 segundos e depois fecha sozinha, depois disso joga do foco para o componente que você quer.

    Você pode separar essa solução ae em uma função colocando o tempo e janela atual como parâmetros.
×
×
  • Create New...