Jump to content
Fivewin Brasil

Ariston Santos

Membros
  • Posts

    500
  • Joined

  • Last visited

  • Days Won

    11

Posts posted by Ariston Santos

  1. Olá. Aguém já passou por este erro? Sabe como resolver?

     

    Dynamic SQL Error - Native error code 335544569
    
    Command : SELECT FIRST 1 a.cod_seq AS cod_seq, a.idunico AS idunico, a.cod_opr AS cod_opr, a.nom_opr AS nom_opr, a.nom_atd AS nom_atd, a.dtatend AS dtatend, a.hoatend AS hoatend, a.nrpront AS nrpront, a.iduprnt AS iduprnt, a.nome AS nome, a.end_rua AS end_rua, a.end_nro AS end_nro, a.end_bai AS end_bai, a.end_cep AS end_cep, a.end_cid AS end_cid, a.end_uf AS end_uf, a.end_zona AS end_zona, a.queixa AS queixa, a.observacao AS observacao, a.tipoatd AS tipoatd, a.tipocad AS tipocad, b.cod_atd AS codativ, b.idunico AS iduativ, b.descatd AS descatd, b.nomprof AS nomprof, b.observ AS obsativ, a.estcivi AS estcivi, a.dultmen AS dultmen, coalesce(a.qtgesta, 0) AS qtgesta, coalesce(a.qtpariu, 0) AS qtpariu, coalesce(a.qtabort, 0) AS qtabort, a.clrisco AS clrisco, coalesce(a.num_ord, 0) AS num_ord FROM sga_atend_atv b JOIN sga_atendimento a ON b.idunico = a.idunico WHERE a.cod_seq > 0 ORDER BY a.cod_seq ASC
    
    hStmt   :
    Steatment handle  : 
    Connection handle : 
    RetCode           :         -1
    	SR_FIREBIRD:RUNTIMEERR     Linha : 859
    SR_FIREBIRD:EXECUTE     Linha : 618
    SQLARRAY     Linha : 81
    ATDGETRECEP     Linha : 931
    ATDRECEPCAO     Linha : 58
    (b)SGAMAIN     Linha : 168
    TBTNBMP:CLICK     Linha : 465
    TBTNBMP:LBUTTONUP     Linha : 656
    TCONTROL:HANDLEEVENT     Linha : 1690
    TBTNBMP:HANDLEEVENT     Linha : 1408
    _FWH     Linha : 3153
    WINRUN     Linha : 0
    TWINDOW:ACTIVATE     Linha : 980
    SGAMAIN     Linha : 226

     

  2. TiraAcentos()

    FUNCTION TiraAcentos(cStr)
       LOCAL cStrNew := "", nX, aAcento, aLetras
       aAcento := {"ã","Ã","Æ","Â"," ","µ","…","·","‚","","ˆ","Ò","¡","Ö","¢","à","ä","å","“","â","£","š","á","Á","à","À","é","É","ê","Ê","í","Í","ó","Ó","õ","Õ","ô","Ô","ú","Ú","ü","Ü","ù","ç","‡","Ç","€","§","¦","º","°","ª","ƒ"}
       aLetras := {"a","A","a","A","a","A","a","A","e","E","e","E","i","I","o","O","o","O","o","O","u","U","a","A","a","A","e","E","e","E","i","I","o","O","o","O","o","O","u","U","u","U"," ","c","c","C","C",".",".",".",".",".", ""}
       FOR nX := 1 TO LEN(aAcento)
           try
           cStrNew := STRTRAN(cStr,aAcento[nX],aLetras[nX])
           cStr := cStrNew
           catch e
           end try
       NEXT
       IF EMPTY(cStrNew) ; cStrNew := cStr ; ENDIF
    RETURN(cStrNew)


    MyMsgRun()

    // Substitua por MsgRun()

    Filewrite()

    FUNCTION FileWrite(cFname, cStrig)
       *----------( Alternativa ao memowrit, para salver texto em arquivo )-----------*
       LOCAL _lOk := .f., nH, _nBt, nErrNr := 0
       IF FILE(cFname)
          IF FERASE(cFname) = -1
             nErrNr := FERROR() // pegar código de erro com FERROR()
             SysRefresh() ; MsgAlert("Não foi possível excluir o arquivo "+cFname, "Erro: ("+ALLTRIM(STR(nErrNr))+") "+DosErr2Str(nErrNr))
             RETURN .F.
          ENDIF
       ENDIF
      	nH := FCreate(cFname) // Se houver erro, retorna -1
      	IF nH >= 0
       	_nBt := FWrite(nH, cStrig) // Retorna a quantidade de bytes escritos
          FClose(nH) // Retorna .T. ou .F., pegar código de erro com FERROR()
          nErrNr := FERROR()
          IF nErrNr > 0 ; _lOk := .F. ; ELSE ; _lOk := .T. ; ENDIF // Se maior que zero, houve erro. Consulte FERROR()
       ENDIF
       IF ! _lOk
          SysRefresh() ; MsgAlert("Ocorreu um erro ao criar o arquivo "+cFname, "Erro: ("+ALLTRIM(STR(nErrNr))+") "+DosErr2Str(nErrNr))
       ENDIF
    RETURN _lOk
    
    FUNCTION DosErr2Str(nErrNr)
       *-------------------( Retorna uma strig com o motivo do erro )-----------------*
       LOCAL c_Err := ""
       IF nErrNr = 02 ; c_Err := "Arquivo nao encontrado" ; ENDIF
       IF nErrNr = 03 ; c_Err := "Pasta não encontrada" ; ENDIF
       IF nErrNr = 04 ; c_Err := "Muitos arquivos abertos" ; ENDIF
       IF nErrNr = 05 ; c_Err := "Acesso negado" ; ENDIF
       IF nErrNr = 06 ; c_Err := "Handle inválido" ; ENDIF
       IF nErrNr = 08 ; c_Err := "Memória insuficiente" ; ENDIF
       IF nErrNr = 15 ; c_Err := "Especificado um drive inválido" ; ENDIF
       IF nErrNr = 19 ; c_Err := "Tentativa de gravar em disco protegido" ; ENDIF
       IF nErrNr = 21 ; c_Err := "Disco não pronto" ; ENDIF
       IF nErrNr = 23 ; c_Err := "Erro de CRC" ; ENDIF
       IF nErrNr = 29 ; c_Err := "Erro de gravação" ; ENDIF
       IF nErrNr = 30 ; c_Err := "Erro de leitura" ; ENDIF
       IF nErrNr = 32 ; c_Err := "Violação de compartilhamento" ; ENDIF
       IF nErrNr = 33 ; c_Err := "Violação de travamento" ; ENDIF
    RETURN( c_Err )

     

  3. Este exemplo obtém o JSON e baixa a imagem, mas o modo como faço o download está incorreto porque estou salvando o conteúdo como JPEG, mas a imagem baixada pode ter outras formatos. O que quero saber se se os senhores pode indicar um modo melhor de fazer o download.

    FUNCTION PrdBaixInfo(aBars, xInfo, cFimg)
       LOCAL xmlhttp_resultado := "", _xBar := "7896806700069"
       LOCAL _xNome := "", _xNcm := "", _Cest := "", _xEmbal := "", _xQtEmb := "", _xMarca := "", _xCateg := "", _xPeso := "", _xTrib := ""
    
       DEFAULT cFimg := ""
    
       _xBar := ALLTRIM(aBars[1,2])
       IF EMPTY(_xBar)
          SysRefresh() ; MsgAlert("É preciso informar um código de barras no cadastro do produto", "Atenção!")
          return nil
       endif
    
       url := "http://www.eanpictures.com.br:9000/api/"+xInfo+"/"+_xBar // Ex: 7896806700069 (xInfo: desc=JSON, gtin=Imagem)
    
       CursorWait()
    
       try
    		oUrl:=TUrl():New( url ) // From tip.lib
    		oHttp := TipClientHttp():New( oUrl , .f. ) // From tip.lib
       catch oErr
          CursorArrow()
          SysRefresh() ; MsgAlert("Houve um erro: "+oErr:Description, "Atenção!")
          return nil
       end try
    
    	Try
    		oHttp:Open()
    		_xRet := oHttp:ReadAll() // Baixa todo o conteúdo do site.
    	Catch oErr
          CursorArrow()
          SysRefresh() ; MsgAlert("Houve um erro: "+oErr:Description, "Atenção!")
          return nil
    	End
    	oHttp:Close()
    	DeleteUrlCacheEntry(url) // Lipar Cache
    	
    	IF EMPTY(_xRet)
          CursorArrow()
          SysRefresh() ; MsgAlert("Houve um erro na comunicação com o Webservice", "Atenção!")
          return nil
    	ENDIF
    	
       CursorArrow()
       
       IF '"Status":"404"' $ _xRet
          _xMsg := ""
          _xRet := "["+TiraAcentos(UnicodeToStr(_xRet, .f.))+"]"
       	hJson := {}
       	nLength := hb_JSONDecode( _xRet, @hJson )
       	for nInf := 1 to len(hJson)
       		Li := hJson[nInf]
       		if len(Li) > 0
       	      try ; _xMsg := Alltrim(Li["Status_Desc"]) ; catch ; end try && Para republicavirtual
       		endif
       	next
          SysRefresh() ; MsgInfo(_xMsg, "Info")
          return nil
       ENDIF
    
       IF xInfo = "desc" // Obter um JSON com as informações do proudto
          IF '"Status":"200"' $ _xRet
           * SysRefresh() ; MsgInfo(_xRet, "Ok")
             _xRet := "["+TiraAcentos(UnicodeToStr(_xRet, .f.))+"]"
          	hJson := {}
          	nLength := hb_JSONDecode( _xRet, @hJson )
          	for nInf := 1 to len(hJson)
          		Li := hJson[nInf]
          		if len(Li) > 0
          	      try ; _xNome  := LEFT(UPPER(Li["Nome"])+SPACE(50),50) ; catch ; end try && Para republicavirtual
          			try ; _xNcm   := LEFT(UPPER(Li["Ncm"])+SPACE(50),50) ; catch ; end try
          			try ; _Cest   := LEFT(UPPER(Li["Cest_Codigo"])+SPACE(02),02) ; catch ; end try
          			try ; _xEmbal := LEFT(UPPER(Li["Embalagem"])+SPACE(30),30) ; catch ; end try
          			try ; _xQtEmb := LEFT(UPPER(Li["QuantidadeEmbalagem"])+SPACE(50),50) ; catch ; end try
          			try ; _xMarca := LEFT(UPPER(Li["Marca"])+SPACE(50),50) ; catch ; end try
          			try ; _xCateg := LEFT(UPPER(Li["Categoria"])+SPACE(30),30) ; catch ; end try
          	      try ; _xPeso  := LEFT(UPPER(Li["Peso"])+SPACE(50),50) ; catch ; end try && Para republicavirtual
          	      try ; _xTrib  := LEFT(UPPER(Li["tributacao"])+SPACE(50),50) ; catch ; end try && Para republicavirtual
          		endif
          	next
             c_Txt :="DESCRIÇÃO: "+ALLTRIM(_xNome )+CRLF+;
                     "NCM......: "+ALLTRIM(_xNcm  )+CRLF+;
                     "CEST.....: "+ALLTRIM(_Cest  )+CRLF+;
                     "TIPO EMB.: "+ALLTRIM(_xEmbal)+CRLF+;
                     "QT. EMB..: "+ALLTRIM(_xQtEmb)+CRLF+;
                     "MARCA....: "+ALLTRIM(_xMarca)+CRLF+;
                     "CATEGORIA: "+ALLTRIM(_xCateg)+CRLF+;
                     "PESO.....: "+ALLTRIM(_xPeso )+CRLF+;
                     "TRUBUT...: "+ALLTRIM(_xTrib )
             IF FileWrite("eaninfo.txt", c_Txt)
                MyMsgRun("",,{||WAITRUN(GETENV("ComSpec")+" /C START NOTEPAD .\eaninfo.txt", 0 )})
             ELSE
                SysRefresh() ; MsgAlert("Não foi possível criar o arquivo .txt!", "Aviso do sistema")
             ENDIF
          else
             SysRefresh() ; MsgInfo(_xRet, "Aviso")
          endif
       ELSE // Donwload da imagem do produto
          cFimg := GetCurDir()+"\tempdir\"+_xBar+".jpg"
          FileWrite(cFimg, _xRet)
          hIni := LEFT(TIME(),8)
       	WHILE ! FILE(cFimg)
             SysWait(0.25)
             IF SECS(ELAPTIME(hIni, LEFT(TIME(),8))) > 10 ; EXIT ; ENDIF
             LOOP
       	END
          SysWait(0.25)
        * WAITRUN(GETENV("ComSpec")+" /C START NOTEPAD .\"+cFimg, 0 )
       ENDIF
    RETURN NIL
    

     

  4. 3 horas atrás, kapiaba disse:

    Ariston, blz meu rei? Eu não quero o valor de  GetSysMetrics(), eu quero,  MUDAR a RESOLUÇÃO DE TELA em tempo real. Por exemplo: o usuário está com 1024 x 768, eu quero mudar para 1280 X 768 e ele vai trabalhar somente nesta resolução, ao sair, o programa "devolve"  a resolução que ele estava, no caso, 1024 x 768, entende? O programa que eu postei acima, faz exatamente o que eu quero,  no Windows 7, más no Windows 10, dá um efeito colateral indesejado, entende? 

    Obg. abs.

     

    Regards, saludos.

    Opa! Eu tinha entendido errado.

    Mas, desculpa minha ignorância, ;) poderia me dizer por que precisa fazer isso? :) 

  5. Será que os valores retornados na função abaixo server? :) 

    //----------------------------------------------------------------------------//
    
    FUNCTION DLG_RESOLUCION( oDlg )
       LOCAL aPor := {1,1},;
             nWidth := GetSysMetrics(0),;
             nHeight := GetSysMetrics(1)
    
       nTWid := WndWidth(FindWindow( 'Shell_TrayWnd',nil))
       IF nTWid < nWidth // TrayBar position: Right or left
          nWidth -= nTWid
       ENDIF
    
       nThei := WndHeight(FindWindow( 'Shell_TrayWnd',nil))
       IF nThei < nHeight // TrayBar position: Bottom or top
          nHeight -= nThei
       ENDIF
    
       nBwid := ((100/oDlg:nWidth)*nWidth)/100
       nBhei := ((100/oDlg:nHeight)*nHeight)/100
       aPor := {nBwid, nBhei}
    RETURN aPor
    

     

  6. Segue minha contribuição neste assunto :wub:

    * Função de busca de Endereço pelo CEP Utilizando WebService de CEP da republicavirtual.com.br
    function BuscaCEP( cep, _cUF, cCidade, cEnde, cBairro, cCompl, _oDlg )
       LOCAL xmlhttp_resultado := "", cXML := ""
       DEFAULT cep := "", _cUF := "", cCidade := "", cEnde := "", cBairro := "", cCompl := ""
       if empty(cep) ; return .t. ; endif
    
       nOpc := Alert("Buscar CEP via", {"ViaCEP", "Rep.Virtual"}, "Escolha uma opção")
       IF nOpc = 1
          cLink := "https://viacep.com.br/ws/"+ALLTRIM(cep)+"/xml/?callback=meu_callback"
          cXML := Emt_GetHtml( cLink )
       	DeleteUrlCacheEntry(cLink) // Lipar Cache
    
          IF Empty(cXML) ; RETURN .F. ; ENDIF
          IF "<erro>true</erro>" $ cXML
             SysRefresh() ; MsgAlert("CEP não encontrado.", "Atenção!")
             RETURN .F.
          ENDIF
    
          cCodMun := MySubstr(cXML, '<ibge>', '<')
          _cUF    := MySubstr(cXML, '<uf>', '<')
          aCidUf  := DTBGetCid(cCodMun)
          cCidade := aCidUf[1]
          cEnde   := Upper(TiraAcentos(UnicodeToStr(MySubstr(cXML, '<logradouro>', '<'), .t.)))
          cCompl  := LEFT(Upper(TiraAcentos(UnicodeToStr(MySubstr(cXML, '<complemento>', '<'), .t.)))+SPACE(255), 255)
          cBairro := LEFT(Upper(TiraAcentos(UnicodeToStr(MySubstr(cXML, '<bairro>', '<'), .t.)))+SPACE(30),30)
       ELSEIF nOpc = 2
          url := "http://cep.republicavirtual.com.br/web_cep.php?cep="+ALLTRIM(cep)+"&formato=jsonp" // +"&formato=query_string"
          try
       		oUrl:=TUrl():New( url ) // From tip.lib
       		oHttp := TipClientHttp():New( oUrl , .f. ) // From tip.lib
          catch oErr
             SysRefresh() ; MsgAlert("Houve um erro: "+oErr:Description, "Atenção!")
          	return .f.
          end try
    
       	Try
       		oHttp:Open()
       		cXML := oHttp:ReadAll() // Baixa todo o conteúdo do site.
       	Catch oErr
             SysRefresh() ; MsgAlert("Houve um erro: "+oErr:Description, "Atenção!")
       		RETURN .f.
       	End
       	oHttp:Close()
       	DeleteUrlCacheEntry(url) // Lipar Cache
    
          cXML := "["+TiraAcentos(UnicodeToStr(cXML, .f.))+"]"
          cRes    := ""
          cResTxt := ""
          cTipo   := ""
       	hJson := {}
       	nLength := hb_JSONDecode( cXML, @hJson )
       	for nCep := 1 to len(hJson)
       		Li := hJson[nCep]
       		if len(Li) > 0
       	      try ; cRes    := LEFT(UPPER(Li["resultado"])+SPACE(50),50) ; catch ; end try && Para republicavirtual
       			try ; cResTxt := LEFT(UPPER(Li["resultado_txt"])+SPACE(50),50) ; catch ; end try
       			try ; _cUF    := LEFT(UPPER(Li["uf"])+SPACE(02),02) ; catch ; end try
       			try ; cCidade := LEFT(UPPER(Li["cidade"])+SPACE(30),30) ; catch ; end try
       			try ; cTipo   := LEFT(UPPER(Li["tipo_logradouro"])+SPACE(50),50) ; catch ; end try
       			try ; cEnde   := LEFT(UPPER(Li["tipo_logradouro"]) + " " + UPPER(Li["logradouro"])+SPACE(50),50) ; catch ; end try
       			try ; cBairro := LEFT(UPPER(Li["bairro"])+SPACE(30),30) ; catch ; end try
       		endif
       	next
       ENDIF
    
    	if _oDlg == nil ; XBrowse(hJson,"Retorno") ; endif
    	if _oDlg <> nil ; _oDlg:Update() ; endif
    return .t.
    
    FUNCTION MySubstr(cString, cStrtAt, cFnshAt)
       cRes := ""
       nIni := At(cStrtAt,  cString) + LEN(cStrtAt)
       if nIni > 0
          cSub := SubStr(cString, nIni)
          nFim := At(cFnshAt, cSub) - 1
          if nFim > 0
             cRes := SUBSTR(cSub, 1, nFim)
          endif
       endif
    RETURN cRes
    
    FUNCTION DTBGetCid(cCodMun)
       * Crie um script para obter o nome do municipio aqui
    RETURN ""
    
    FUNCTION UnicodeToStr(_cStr, lTiraAcento)
       LOCAL _cNewStr := _cStr
       LOCAL aConvert := {}
       AADD(aConvert, {"á", "\u00e1"})
       AADD(aConvert, {"à", "\u00e0"})
       AADD(aConvert, {"â", "\u00e2"})
       AADD(aConvert, {"ã", "\u00e3"})
       AADD(aConvert, {"ä", "\u00e4"})
       AADD(aConvert, {"Á", "\u00c1"})
       AADD(aConvert, {"À", "\u00c0"})
       AADD(aConvert, {"Â", "\u00c2"})
       AADD(aConvert, {"Ã", "\u00c3"})
       AADD(aConvert, {"Ä", "\u00c4"})
       AADD(aConvert, {"é", "\u00e9"})
       AADD(aConvert, {"è", "\u00e8"})
       AADD(aConvert, {"ê", "\u00ea"})
       AADD(aConvert, {"ê", "\u00ea"})
       AADD(aConvert, {"É", "\u00c9"})
       AADD(aConvert, {"È", "\u00c8"})
       AADD(aConvert, {"Ê", "\u00ca"})
       AADD(aConvert, {"Ë", "\u00cb"})
       AADD(aConvert, {"í", "\u00ed"})
       AADD(aConvert, {"ì", "\u00ec"})
       AADD(aConvert, {"î", "\u00ee"})
       AADD(aConvert, {"ï", "\u00ef"})
       AADD(aConvert, {"Í", "\u00cd"})
       AADD(aConvert, {"Ì", "\u00cc"})
       AADD(aConvert, {"Î", "\u00ce"})
       AADD(aConvert, {"Ï", "\u00cf"})
       AADD(aConvert, {"ó", "\u00f3"})
       AADD(aConvert, {"ò", "\u00f2"})
       AADD(aConvert, {"ô", "\u00f4"})
       AADD(aConvert, {"õ", "\u00f5"})
       AADD(aConvert, {"ö", "\u00f6"})
       AADD(aConvert, {"Ó", "\u00d3"})
       AADD(aConvert, {"Ò", "\u00d2"})
       AADD(aConvert, {"Ô", "\u00d4"})
       AADD(aConvert, {"Õ", "\u00d5"})
       AADD(aConvert, {"Ö", "\u00d6"})
       AADD(aConvert, {"ú", "\u00fa"})
       AADD(aConvert, {"ù", "\u00f9"})
       AADD(aConvert, {"û", "\u00fb"})
       AADD(aConvert, {"ü", "\u00fc"})
       AADD(aConvert, {"Ú", "\u00da"})
       AADD(aConvert, {"Ù", "\u00d9"})
       AADD(aConvert, {"Û", "\u00db"})
       AADD(aConvert, {"ç", "\u00e7"})
       AADD(aConvert, {"Ç", "\u00c7"})
       AADD(aConvert, {"ñ", "\u00f1"})
       AADD(aConvert, {"Ñ", "\u00d1"})
       AADD(aConvert, {"&", "\u0026"})
       AADD(aConvert, {"'", "\u0027"})
       FOR nX := 1 TO LEN(aConvert)
          IF aConvert[nX,2] $ _cNewStr
             _cNewStr := STRTRAN(_cNewStr, aConvert[nX,2], aConvert[nX,1])
          ENDIF
       NEXT
    RETURN(IIF(lTiraAcento,TiraAcentos(_cNewStr),_cNewStr))
    
    FUNCTION TiraAcentos(cStr)
       LOCAL cStrNew := "", nX, aAcento, aLetras
       aAcento := {"ã","Ã","Æ","Â"," ","µ","…","·","‚","","ˆ","Ò","¡","Ö","¢","à","ä","å","“","â","£","š","á","Á","à","À","é","É","ê","Ê","í","Í","ó","Ó","õ","Õ","ô","Ô","ú","Ú","ü","Ü","ù","ç","‡","Ç","€","§","¦","º","°","ª","ƒ"}
       aLetras := {"a","A","a","A","a","A","a","A","e","E","e","E","i","I","o","O","o","O","o","O","u","U","a","A","a","A","e","E","e","E","i","I","o","O","o","O","o","O","u","U","u","U"," ","c","c","C","C",".",".",".",".",".", ""}
       FOR nX := 1 TO LEN(aAcento)
           cStrNew := STRTRAN(cStr,aAcento[nX],aLetras[nX])
           cStr := cStrNew
       NEXT
       IF EMPTY(cStrNew) ; cStrNew := cStr ; ENDIF
    RETURN(cStrNew)
    
    * Clear browser cache
    DLL Function DeleteUrlCacheEntry(lpszUrlName AS STRING) AS LONG PASCAL FROM "DeleteUrlCacheEntryA" LIB "wininet.dll"

     

  7. Uso o TS da Microsoft mas, apesar das vantagens, ainda sinto falta de alguns recursos, como ler peso da balança conectada ao PC do usuário sendo que o programa está rodando no servidor TS. Se esta solução viabilizar a leitura de peso no PC do usuário, vai ser ótimo. Vou comprar. :D

  8. Não tenho a tTxtPrev, mas tenho esta rotina que está sendo útil no momento.

    FUNCTION MsgPrevew(cSpoolFile, nSkip)
       LOCAL lOk, aText, cText, nMaior, o_Txt, lExit := .F.
       PUBLIC nFont := 3, o_Fnt[9]
       DEFAULT nSkip := 6
       lOk := .f.
       aText := {}
       cText := ""
       nMaior:=0
    
       o_Txt := MEMOREAD( cSpoolFile )
       nLinh := MLCOUNT(o_Txt)
       for n := 3 TO nLinh
          cLinh := SUBSTR(STRTRAN(MEMOLINE(o_Txt,254,n),"",""), nSkip, 254)
          cText += cLinh + CRLF
          nMaior := IIF(LEN(ALLTRIM(cLinh)) > nMaior, LEN(ALLTRIM(cLinh)), nMaior)
          IF n >= 350
             cText += "--------------------" + CRLF
             cText += "Continua..." + CRLF
             EXIT
          ENDIF
       next
    
       DEFINE FONT o_Fnt[1] NAME "Courier New" SIZE 0, -09
       DEFINE FONT o_Fnt[2] NAME "Courier New" SIZE 0, -10
       DEFINE FONT o_Fnt[3] NAME "Courier New" SIZE 0, -11
       DEFINE FONT o_Fnt[4] NAME "Courier New" SIZE 0, -12
       DEFINE FONT o_Fnt[5] NAME "Courier New" SIZE 0, -13
       DEFINE FONT o_Fnt[6] NAME "Courier New" SIZE 0, -14
       DEFINE FONT o_Fnt[7] NAME "Courier New" SIZE 0, -15
       DEFINE FONT o_Fnt[8] NAME "Courier New" SIZE 0, -16
       DEFINE FONT o_Fnt[9] NAME "Courier New" SIZE 0, -17
       DEFINE CURSOR oHand HAND
    
       SysRefresh()
       DEFINE WINDOW oVisu FROM 0,0 TO 35, 100 TITLE "Previsualização" ;
              STYLE nOr( WS_POPUP, WS_CAPTION, WS_BORDER, WS_SYSMENU, DS_SYSMODAL)
    
       DEFINE SBUTTONBAR oViBar SIZE 44, 33 OF oVisu 3DLOOK COLORS CLR_GRAY, nBtClr OFFICE
       oViBar:bRClicked := { |nRow, nCol| ( NIL ) } // Mouse direito
       oViBar:bLClicked := { |nRow, nCol| ( NIL ) } // Mouse Esquerdo
    
       DEFINE SBUTTON oSb1 OF oViBar FILE ".\bitmaps\printer.bmp" OFFICE ;
              MESSAGE "Imprimir" ;
              COLOR CLR_GRAY,{CLR_HGRAY,CLR_WHITE,3} ;
              MENU ACTION ImpSplMenu(oSb1, cSpoolFile)
       DEFINE SBUTTON oSb2 OF oViBar FILE ".\bitmaps\procbtn2.bmp" OFFICE ;
              MESSAGE "Aumentar tamanho da fonte" ;
              COLOR CLR_GRAY,{CLR_HGRAY,CLR_WHITE,3} ;
              ACTION MudaFonte(oGet1, "+") GROUP
       DEFINE SBUTTON oSb3 OF oViBar FILE ".\bitmaps\procbtn1.bmp" OFFICE ;
              MESSAGE "Diminuir tamanho da fonte" ;
              COLOR CLR_GRAY,{CLR_HGRAY,CLR_WHITE,3} ;
              ACTION MudaFonte(oGet1, "-")
       DEFINE SBUTTON oSb4 OF oViBar FILE ".\bitmaps\sair1.bmp" OFFICE ;
              MESSAGE "Sair da previsualização" ;
              COLOR CLR_GRAY,{CLR_HGRAY,CLR_WHITE,3} ;
              ACTION oVisu:End() GROUP
       AEval( oViBar:aControls, { | o | o:oCursor := oHand } )
    
       DEFINE STATUSBAR OF oVisu PROMPT "Previsualização" CENTERED
    
       @25, 05 GET oGet1 VAR cText OF oVisu SIZE 35, 100 PIXEL MEMO FONT o_Fnt[nFont] HSCROLL READONLY
    
       WndCenter(oVisu:hWnd)
    
       ACTIVATE WINDOW oVisu ;
                ON INIT (oGet1:Move(35, 4, oVisu:GetCliRect():nRight - oVisu:GetCliRect():nLeft - 8, oVisu:GetCliRect():nBottom - oVisu:GetCliRect():nTop -70, .t.)) ;
                VALID (AEVAL(o_Fnt, {|o|o:End()}) ,;
                             oHand:End()          ,;
                             oVisu := nil         ,;
                             lExit := .T.         ,;
                             .T.)
       StopUntil( {|| lExit} )
       RELEASE nFont
    RETURN lOk
    
    STATIC FUNCTION MudaFonte(oGet1, cOp)
       *----------------------( Função MudaFonte de MsgPreview )---------------------*
       IF cOp = "+"
          nFont ++
          IF nFont > 9 ; nFont := 9  ; MsgBeep(); ENDIF
       ELSEIF cOp = "-"
          nFont --
          IF nFont < 1 ; nFont := 1 ; MsgBeep(); ENDIF
       ENDIF
       oGet1:SetFont(o_Fnt[nFont])
       oGet1:Refresh()
    RETURN NIL
    
    STATIC FUNCTION ImpSplMenu(oBtn, cSpoolFile)
       LOCAL oMenu, aRect
       aRect := GetClientRect( oBtn:hWnd )
       MENU oMenu POPUP 2007
          MENUITEM "Papel Carta" ACTION ImpSpool(cSpoolFile, cDraftp)
          MENUITEM "Imp Térmica" ACTION ImpSpool(cSpoolFile, cICupom)
       ENDMENU
       ACTIVATE POPUP oMenu AT aRect[ 3 ] + 1, aRect[ 2 ] OF oBtn
    RETURN NIL

     

  9. Se você está obtendo o conteúdo da balança, tente fazer uma limpeza antes.

    Ex:

             cBuffer := strtran(cDados, chr(02), "")
             cBuffer := strtran(cBuffer, chr(03), "")
             cBuffer := strtran(cBuffer, chr(27), "")
             cvar := cBuffer
             if at(".", cvar) # 0 .or. at(",", cvar) # 0
                if at(",", cvar) # 0
                   cvar := strtran(cvar, ",",".")
                endif
                xQtd := VAL(cVar)
             else
                xQtd := VAL(cVar) / 1000
             endif
             ? xQtd
    

     

  10. 1 hora atrás, kapiaba disse:

    Ariston, essa rotina que você postou, em minha modesta opinião, é puro show(), só de olhar, já encheu os olhos na perfeição. Gostei muito. abs.

    Obrigado, amigo. Mas quem postou primeiro foi o Jmsilva.

    Eu também gostei muito dela por ser bem prática. Fiz algumas modificações visto que não compilou de primeira.

    Muito obrigado, Jmsilva

×
×
  • Create New...