Jump to content
Fivewin Brasil

rochinha

Membros
  • Posts

    623
  • Joined

  • Last visited

  • Days Won

    70

Everything posted by rochinha

  1. Amiguinhos No exemplo que apresento voce podem ver como ficaria fácil o trabalho de preenchimento de um documento WORD diretamente de sua aplicação seja em Fivewin ou não. Bastando para isto usar os métodos mostrados no exemplo que segue o .ZIP http://www.shoppmarketing.com/forum/fw2ole.zip Ficou ShowDeBola e garanto vai quebrar muito galho, sendo mais uma força pra nossas pobres cabeças. Editado por - rochinha on 17/12/2006 22:59:14
  2. rochinha

    Bina

    Amiguinho Não existe meio de criar um rotina de detecção de bina sem o uso de um método que permita que a linha não fique presa. Em todos os casos ou voce usa um aparelhinho com este intuito ou uma placa discadora que possibilite monitorar a linha sem prende-la.
  3. Amiguinho O problema é que não sei onde gravei a string de pesquisa. Talvez eu não tenha dado importancia pois o correios disponibiliza um pacote chamado DNE que possui os ceps do brasil inteiro em formato .TXT então acho que por isto não dei importancia a fazer um web-service relativo. Mas vou continuar procurando e logo logo posto aqui.
  4. Amiguinhos Por partes Analisando o codigo da pagina de CEPs dos correios o que deve ser passado pelo web-service para pesquisa sao basicamente os campos abaixo: UF Localidade Tipo Logradouro Então o codigo ficaria parecido com isto: cCEPResult := ws:OpenWS( "http://www.correios.com.br/servicos/cep/cep_loc_log.cfm?" +; "&UF="+cUF+; "&localidade="+clocalidade+; "&tipo="+ctipo+; "&logradouro="+clogradouro" ) id=code>id=code>Só não sei o formato da resposta que deverá ser visualizada no conteudo da variavel cCEPResult. citação:Uma pergunta... os arquivos de notas fiscais eletronicas sao XML tbm correto? Entao poderei usar a tua classe para criar estes arquivos? id=quote>id=quote>O XML das e-NF poderá ser tratado com a classe XML existente no xHarbour 0.99.60 e 0.99.61. Minha biblioteca trata o XML de forma mais completa e complexa, ou seja, a estrutura do XML tratado por ela já vem dentro do mesmo XML de dados. citação:E para trabalhar com SOAP, Farmácia Popular por exemplo, daria para fazer com esta classe? id=quote>id=quote>Assim como as e-NF provavelmente este caso seja o mesmo, ou seja, o XML contém somente dados e o mesmo deverá ser analisado por uma rotina criada pelo próprio usuário tratando strings diretamente. Nos dois caso minha biblioteca poderá armazenar os dados passados pelo usuário em verdadeiros bancos de dados XML não podendo portanto tratar de forma direta estes arquivos. Resumindo voce poderá incluir, alterar, excluir, filtrar, pesquisar, indexar, arquivos XML como se fossem DBFs. Inclusive a atualização esta disponivel em http://www.shoppmarketing.com/forum/hbadox.612.09.zip
  5. Amiguinhos Obrigado pelo apoio a todos. Bom, o XML é um padrão de arquivo multihierarquico o qual sua estrutura não tem um fim definido, pois podemos ter muitos nós aninhados dentro dos outros, mas para não confundir sempre usamos no maximo 2 ou 3. No XML a seguir capturado via web-service em 5Win/Harbour voce podem ver uma pequena estrutura: <?xml version="1.0" encoding="ISO-8859-1" ?> 1.0 40010 SEDEX 05171340 88330000 31 0 0 0 0 0 -4 Peso excedido id=code>id=code>Portanto o trabalho com nós do mesmo não é assim tão fácil de se manipular Com o exemplo acima minha função XMLGet() cai como uma luva para obter dados do arquivo. No codigo que segue apresento o .RC da DIALOGo principal de interface com o usuário: Salve como SEDEX.RC Sedex DIALOG 28, 62, 267, 175 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "DIALOG_1" FONT 8, "MS Sans Serif" { EDITTEXT 101, 37, 17, 47, 12 EDITTEXT 102, 168, 17, 47, 12 EDITTEXT 103, 78, 50, 67, 12 PUSHBUTTON "Calcular Envio", 105, 149, 50, 107, 27 EDITTEXT 104, 78, 65, 67, 12 LTEXT "Nenhuma operação em curso.", 106, 10, 97, 247, 67 GROUPBOX "Origem", -1, 4, 5, 128, 32, BS_GROUPBOX GROUPBOX "Calculo", -1, 4, 38, 259, 46, BS_GROUPBOX GROUPBOX "Mensagem", -1, 4, 87, 259, 82, BS_GROUPBOX LTEXT "CEP:", -1, 9, 18, 26, 8 LTEXT "Peso em Gramas:", -1, 10, 52, 60, 8 LTEXT "Total a Pagar R$:", -1, 11, 66, 60, 8 GROUPBOX "Destino", -1, 135, 5, 128, 32, BS_GROUPBOX LTEXT "CEP:", -1, 140, 18, 26, 8 } id=code>id=code>O codigo a seguir é um web-service que tem por função passar parâmetros ao servidor de serviços dos Correios afim de trazer uma resposta dada por seus serviços on-line. Imagine que o mesmo método poderá ser usado para enviar dados ao Seraza e SPC e trazer o resultado da pesquisa validando ou não o crédito de um cliente. O código a seguir, feito em 5Win 2.7 e Harbour 45 pode ser adaptado a qualquer versão ou até a qualquer GUI que não 5Win e demonstra de forma clara com é feito este trabalho. Salve como SEDEX.PRG #include "fivewin.ch" static xDLL,oGet,oSay Function Main() local oDlg, oFont local cCEP1:=space(9), cCEP2:=space(9), cPESO:=0 , cTOTAL := 0 DEFINE FONT oFont NAME "ARIAL" SIZE 00,-12 BOLD SET _3DLOOK ON DEFINE DIALOG oDlg RESOURCE "Sedex" TITLE "Correios - Sedex" REDEFINE GET oGet101 VAR cCEP1 PICTURE "99999-999" ID 101 OF oDlg REDEFINE GET oGet102 VAR cCEP2 PICTURE "99999-999" ID 102 OF oDlg REDEFINE GET oGet103 VAR cPESO PICTURE "999999999" ID 103 OF oDlg REDEFINE GET oGet104 VAR cTOTAL PICTURE "@E 99,999.99" ID 104 OF oDlg REDEFINE BUTTON ID 105 OF oDlg ACTION Consulta(cCEP1,cCEP2,cPESO,oGet104,oSay106) REDEFINE SAY oSay106 MEMO ID 106 OF oDlg COLOR nRGB(255,0,0),getsyscolor(15) ACTIVATE DIALOG oDlg CENTERED return nil Function Consulta(cCepOrigem,cCepDestino,cPeso,oTotal,oSay) local oRs, ws ws := TdWebService():new() oSay:SetText( "Aguarde. consulta base de dados" ) cXMLSedex := ws:OpenWS( "http://www.correios.com.br/encomendas/precos/calculo.cfm?" +; "&cepOrigem="+cCepOrigem+; "&cepDestino="+cCepDestino+; "&peso="+alltrim(str(cPeso))+; "&resposta=xml" ) ws:end() oSay:SetText( "Aguarde. salvando o resultado" ) MemoWrit( "sedex.xml", cXMLSedex ) cXMLPreco := XMLGet( "preco_postal", cXMLSedex ) cXMLErros := XMLGet( "descricao" , cXMLSedex ) cTotal := transf( val( cXMLPreco ), "@E 99,999.99" ) oGet104:Refresh() oGet104:SetText( cTotal ) oSay:SetText( iif( empty( cXMLErros ), "Operacao bem sucedida", cXMLErros ) ) return nil Function XMLGet( XMLField, XMLFile ) XMLField := alltrim( XMLField ) XMLFieldINI := rat( "<"+XMLField+">", XMLFile ) + len( "<"+XMLField+">" ) XMLFieldEND := rat( ""+XMLField+">", XMLFile ) - XMLFieldINI return substr( XMLFile, XMLFieldINI, XMLFieldEND ) #include "Websrvce.prg" id=code>id=code>Abaixo vemos a classe WebService que é a responsável por fazer a ponte entre nosso aplicativo e o ponto distante do mesmo. Salve como WEBSRVCE.PRG /* * * Classe WebService * */ #include "dll.ch" //static xdll CLASS TdWebService DATA hOpen DATA sbuffer HIDDEN DATA xDLL HIDDEN METHOD New(buffersize) CONSTRUCTOR METHOD OpenWS(url) METHOD End() ENDCLASS ***************************** METHOD New(conexion,buffersize) CLASS TdWebService DEFAULT buffersize:=3200 ::sbuffer:=buffersize xDll:=LoadLib32("wininet.dll") ::hOpen = InternetOpen("TdWebService", 1,,, 0) RETURN Self ***************************** METHOD OpenWS(url) CLASS TdWebService local hFile,ret,xml hFile = InternetOpenUrl(::hOpen, url,"",0,,0) xml:=space(::sbuffer) InternetReadFile(hFile, @xml, ::sbuffer, @Ret) return subst(alltrim(xml),1,len(alltrim(xml))-5) ***************************** METHOD End() CLASS TdWebService FreeLib32(xDll) return nil ***************************** DLL32 FUNCTION InternetOpen( cApp as LPSTR, n1 AS DWORD, n2 AS LPSTR, n3 AS LPSTR,; n4 AS DWORD ) AS LONG PASCAL ; FROM "InternetOpenA" LIB xdll Dll32 Function InternetReadFile(hFile As 7, @sBuffer As 8, lNumBytesToRead As 7, @lNumberOfBytesRead As 7) As 7 PASCAL Lib xdll Dll32 Function InternetOpenUrl(hInternetSession As 7, lpszUrl As 8, lpszHeaders As 8, dwHeadersLength As 7, dwFlags As 7, dwContext As 7) As 7 FROM "InternetOpenUrlA" PASCAL Lib xdll DLL32 FUNCTION InternetCloseHandle( hSession AS LONG ) AS BOOL PASCAL LIB xdll id=code>id=code>Tenho feito outros web-services para meu aplicativo e sei que mesmo ainda usando o xBase vejo que não existem mais segredos e nem barreiras que eu não consiga transpor, além do próprio Céu. "E que Deus seja louvado!"
  6. Amiguinhos No exemplo que apresento voce podem ver como ficaria fácil o trabalho de preenchimento de um documento WORD diretamente de sua aplicação seja em Fivewin ou não. Bastando para isto usar os métodos mostrados no exemplo que segue o .ZIP http://www.shoppmarketing.com/forum/fw2ole.zip Ficou ShowDeBola e garanto vai quebrar muito galho. O teste foi feito com Fivewin 2.7 e Harbour, não consegui testar com o xHarbout por incompatibilidades de minha HBOLE.LIB com os builds 0.99.60 e 0.99.61 @braços :?)
  7. Amiguinhos No exemplo que apresento voce podem ver como ficaria fácil o trabalho de preenchimento de um documento WORD diretamente de sua aplicação seja em Fivewin ou não. Bastando para isto usar os métodos mostrados no exemplo que segue o .ZIP http://www.shoppmarketing.com/forum/fw2ole.zip Ficou ShowDeBola e garanto vai quebrar muito galho. O teste foi feito com Fivewin 2.7 e Harbour, não consegui testar com o xHarbout por incompatibilidades de minha HBOLE.LIB com os builds 0.99.60 e 0.99.61 @braços :?)
  8. Amiguinhos Estive recentemente fazendo alguns testes com OCX para integra-las ao meu sistema em Fivewin e consegui exito usando NSLOCK15.OCX. Usei a versão 2.7 que possui uma classe tActivex que permite acesso direto a estas caracteristicas. Não sei qual biblioteca voce usa com o Harbour mas poderia adaptar o codigo a seguir usando o TAutoOLE do Harbour anexando a sua linkagem a HBOLE.LIB. // FiveWin ActiveX support demo - Using Adobe Acrobat Reader #include "FiveWin.ch" function Main() local oWnd, oActiveX, cLiberationKey := space(16) DEFINE WINDOW oWnd TITLE "FiveWin ActiveX Support" oActiveX = TActiveX():New( oWnd, "nslock15vb5.ActiveLock" ) oActiveX:Do( "Password" , "minhasenha" ) oActiveX:Do( "SoftwareName" , "NomeDoSistema" ) oActiveX:Do( "LiberationKeyLength", 16 ) oActiveX:Do( "SoftwareCodeLength" , 16 ) //? oActiveX:GetProp( "SoftwareCode" ) if ! oActiveX:GetProp( "RegisteredUser" ) MsgGet( "Entre a chave de liberacao",; // Title "Chave:",; // Label @cLiberationKey ) // A variable by reference oActiveX:Do( "LiberationKey", cLiberationKey ) endif if ! oActiveX:GetProp( "RegisteredUser" ) if oActiveX:GetProp( "LastRunDate" ) > date() ? 'Data foi retrocedida. Programa sera encerrado' else ? 'Faltam ' + Str( 30 - oActiveX:GetProp( "UsedDays" ) ) + ' dias.' endif ? 'DEMONSTRACAO' oWnd:cCaption := 'DEMONSTRACAO' SysRefresh() else ? 'REGISTRADO' oWnd:cCaption := 'REGISTRADO' SysRefresh() endif //oWnd:oClient = oActiveX // To fill the entire window surface ACTIVATE WINDOW oWnd return nil id=code>id=code>Troque as linhas para uso com o TAutoOLE Para manuseio do Activex através de TActiveX: oActiveX = TActiveX():New( oWnd, "nslock15vb5.ActiveLock" ) // Métodos oActiveX:Do( "Metodo" , "string" ) // Propriedades oActiveX:GetProp( "RegisteredUser" ) oActiveX:SetProp( "Propriedade", 123 ) oActiveX:SetProp( "Propriedade", "String" ) id=code>id=code>Para manuseio do Activex através de TAutoOLE: oAutoOLE := TOleAuto():New( "nslock15vb5.ActiveLock" ) // Propriedades oAutoOLE:Get( "propriedade" ) oAutoOLE:Set( "propriedade" , 123 ) oAutoOLE:Set( "propriedade" , "string" ) // Métodos oActiveX:Do( "Metodo" , "string" ) // Termina objeto OLE oAutoOLE:End() ou cVariavel := oAutoOLE:propriedade // Usado para GET da propriedade oAutoOLE:propriedade := 123 // Usado para SET a propriedade oAutoOLE:propriedade := "string" id=code>id=code>Para manuseio do Activex através de CreateOleObject: hWordOle := CreateOleObject( "nslock15vb5.ActiveLock" ) // Propriedades OleGetProperty( hWordOle, "propriedade" ) OleSetProperty( hMainWnd, "propriedade", 123 ) OleSetProperty( hMainWnd, "propriedade", "string" ) // Métodos OleInvoke( hWordOle, "Metodo", "parametro" ) OleInvoke( hWordOle, "Metodo" ) // Termina objeto OLE OleUninitialize() id=code>id=code>O que foi colocado aqui o que tirei de cabeça pode não estar tão correto mais basta dar uma pesquisada em exemplos de uso destes recursos e voce verá que é este o caminho. A NSLOCK pode ser baixada de: VB - Protegendo sua aplicação com o nslock em 7 etapas. José Carlos Marcoratti @braços :?)
  9. Amiguinhos Estive recentemente fazendo alguns testes com OCX para integra-las ao meu sistema em Fivewin e consegui exito usando NSLOCK15.OCX. Usei a versão 2.7 que possui uma classe tActivex que permite acesso direto a estas caracteristicas. Não sei qual biblioteca voce usa com o Harbour mas poderia adaptar o codigo a seguir usando o TAutoOLE do Harbour anexando a sua linkagem a HBOLE.LIB. // FiveWin ActiveX support demo - Using Adobe Acrobat Reader #include "FiveWin.ch" function Main() local oWnd, oActiveX, cLiberationKey := space(16) DEFINE WINDOW oWnd TITLE "FiveWin ActiveX Support" oActiveX = TActiveX():New( oWnd, "nslock15vb5.ActiveLock" ) oActiveX:Do( "Password" , "minhasenha" ) oActiveX:Do( "SoftwareName" , "NomeDoSistema" ) oActiveX:Do( "LiberationKeyLength", 16 ) oActiveX:Do( "SoftwareCodeLength" , 16 ) //? oActiveX:GetProp( "SoftwareCode" ) if ! oActiveX:GetProp( "RegisteredUser" ) MsgGet( "Entre a chave de liberacao",; // Title "Chave:",; // Label @cLiberationKey ) // A variable by reference oActiveX:Do( "LiberationKey", cLiberationKey ) endif if ! oActiveX:GetProp( "RegisteredUser" ) if oActiveX:GetProp( "LastRunDate" ) > date() ? 'Data foi retrocedida. Programa sera encerrado' else ? 'Faltam ' + Str( 30 - oActiveX:GetProp( "UsedDays" ) ) + ' dias.' endif ? 'DEMONSTRACAO' oWnd:cCaption := 'DEMONSTRACAO' SysRefresh() else ? 'REGISTRADO' oWnd:cCaption := 'REGISTRADO' SysRefresh() endif //oWnd:oClient = oActiveX // To fill the entire window surface ACTIVATE WINDOW oWnd return nil id=code>id=code>Troque as linhas para uso com o TAutoOLE Para manuseio do Activex através de TActiveX: oActiveX = TActiveX():New( oWnd, "nslock15vb5.ActiveLock" ) // Métodos oActiveX:Do( "Metodo" , "string" ) // Propriedades oActiveX:GetProp( "RegisteredUser" ) oActiveX:SetProp( "Propriedade", 123 ) oActiveX:SetProp( "Propriedade", "String" ) id=code>id=code>Para manuseio do Activex através de TAutoOLE: oAutoOLE := TOleAuto():New( "nslock15vb5.ActiveLock" ) // Propriedades oAutoOLE:Get( "propriedade" ) oAutoOLE:Set( "propriedade" , 123 ) oAutoOLE:Set( "propriedade" , "string" ) // Métodos oActiveX:Do( "Metodo" , "string" ) // Termina objeto OLE oAutoOLE:End() ou cVariavel := oAutoOLE:propriedade // Usado para GET da propriedade oAutoOLE:propriedade := 123 // Usado para SET a propriedade oAutoOLE:propriedade := "string" id=code>id=code>Para manuseio do Activex através de CreateOleObject: hWordOle := CreateOleObject( "nslock15vb5.ActiveLock" ) // Propriedades OleGetProperty( hWordOle, "propriedade" ) OleSetProperty( hMainWnd, "propriedade", 123 ) OleSetProperty( hMainWnd, "propriedade", "string" ) // Métodos OleInvoke( hWordOle, "Metodo", "parametro" ) OleInvoke( hWordOle, "Metodo" ) // Termina objeto OLE OleUninitialize() id=code>id=code>O que foi colocado aqui o que tirei de cabeça pode não estar tão correto mais basta dar uma pesquisada em exemplos de uso destes recursos e voce verá que é este o caminho. A NSLOCK pode ser baixada de: VB - Protegendo sua aplicação com o nslock em 7 etapas. José Carlos Marcoratti @braços :?)
  10. Amiguinho Como são vários os sabores acho que seja possivel e irei disponibilizando a medida que for incrementando funções.
  11. Amiguinho Existem tantos RDDs por ai que fica dificil aparecer com mais um e eu não quero somar e sim ampliar nosso leque de possibilidades de integração, pois como voces sabem o papo do momento é SOAP. SOAP nada mais é que a integração de aplicações e ambientes com a troca de arquivos via XML exemplo disso as APIs do Google e dos Correios. Com arquivos XML fica facil o transporte de dados de forma leve e compativel com muita coisa da Micro$oft e outros. Os RDDs que encontramos são designados para grandes volumes de dados e portanto são uma solução profissional e minha biblioteca não tem pretensão de ser um RDD e sim uma ponte para a integração. Na pratica voce pode receber os arquivos XML provenientes de bancos e visualizar os lançamentos de sua conta. Voce pode enviar informações para um site e receber o resultado para sua aplicação e por ai vai. Para montar um aplicativo simples acho que seja possivel pois bastaria integrar o trabalho com áreas mas ue me preocupei mais com o principal, abrir, gravar, excluir, encontrar e salvar. Posteriormente estarei integrando opções como COPY TO e APPEND FROM, CREATE e etc. O importante é que a semente foi plantada e agora devo cultiva-la. Editado por - rochinha on 21/11/2006 11:09:26
  12. Amiguinhos Sà o noites sem dormir mas tinha que produzir esta biblioteca para que pudesse colocar em meus sistemas um meio de abrir, manipular e salvar estes arquivos de forma rápida e indolor. Sei que existe por ai muitas RDDs ferradas mas a minha biblioteca não tem o intuito de se tornar mais uma e nem mesmo chegar a arranhar o nicho delas. O que pretendia era quase que um trabalho academico, o de construir uma ponte para estes tipos de arquivos com linguagem conhecida e aspecto profissional. Ela possui as funções básicas para manipulação de arquivos XML que comportem em seu esqueleto o SCHEMA, estrutura da tabela de controle. Os comandos básicos podem ser visualizados no arquivo XML.CH, algo como: XML APPEND BLANK XML EDIT XML COMMIT XML SKIP XML DELETE XML REPLACE XML GOTOP XML GOBOTTOM XML SET FILTER TO XML SAVE XML EXECUTE XML LOCATE XML CLOSE XML USE id=code>id=code>E suas respectivas funções XMLAPPEND() XMLEDIT() XMLCOMMIT() XMLSKIP() XMLDELETE() XMLREPLACE() XMLGOTOP() XMLGOBOTTOM() XMLSETFILTER() XMLSAVE() XMLEXECUTE() XMLLocate() XMLUSE() id=code>id=code>À biblioteca foi dimencionada para trabalhar assim com o proprio XML com um arquivo por vez, sem area ou selects. Por isto ela é simples. portanto como ...em cavalo dado não se olha os dentes... façam bom uso e cada alteração que fizer estarei disponibilizando. Podem baixar a biblioteca juntmente com um exemplo prático em: http://www.shoppmarketing.com/forum/xmllib.asp Lembrando que estou utilizando para isto o Harbour 45 Editado por - rochinha on 21/11/2006 02:52:55
  13. Amiguinhos Sà o noites sem dormir mas tinha que produzir esta biblioteca para que pudesse colocar em meus sistemas um meio de abrir, manipular e salvar estes arquivos de forma rápida e indolor. Sei que existe por ai muitas RDDs ferradas mas a minha biblioteca não tem o intuito de se tornar mais uma e nem mesmo chegar a arranhar o nicho delas. O que pretendia era quase que um trabalho academico, o de construir uma ponte para estes tipos de arquivos com linguagem conhecida e aspecto profissional. Ela possui as funções básicas para manipulação de arquivos XML que comportem em seu esqueleto o SCHEMA, estrutura da tabela de controle. Os comandos básicos podem ser visualizados no arquivo XML.CH, algo como: XML APPEND BLANK XML EDIT XML COMMIT XML SKIP XML DELETE XML REPLACE XML GOTOP XML GOBOTTOM XML SET FILTER TO XML SAVE XML EXECUTE XML LOCATE XML CLOSE XML USE id=code>id=code>E suas respectivas funções XMLAPPEND() XMLEDIT() XMLCOMMIT() XMLSKIP() XMLDELETE() XMLREPLACE() XMLGOTOP() XMLGOBOTTOM() XMLSETFILTER() XMLSAVE() XMLEXECUTE() XMLLocate() XMLUSE() id=code>id=code>À biblioteca foi dimencionada para trabalhar assim com o proprio XML com um arquivo por vez, sem area ou selects. Por isto ela é simples. portanto como ...em cavalo dado não se olha os dentes... façam bom uso e cada alteração que fizer estarei disponibilizando. Podem baixar a biblioteca juntmente com um exemplo prático em: http://www.shoppmarketing.com/forum/xmllib.asp Lembrando que estou utilizando para isto o Harbour 45 Editado por - rochinha on 21/11/2006 02:52:55
×
×
  • Create New...