-
Posts
1,229 -
Joined
-
Last visited
-
Days Won
24
Posts posted by alex2002
-
-
Olá,
Sim. Com ele vc acessa via navegador o seu ERP como se estivesse em um lugar só.
Já tem um tempinho que estamos usando e estamos satisfeitos com ele.
Um abraço,
Alexandre Pereira -
Simplesmente como o João falou:
Clica em "Save As" e escolha o tipo .RES
-
Olá pessoal.
O tópico é pra saber se algum amigo do grupo tem uma impressora da lista pra vender. Tem uma amiga que está precisando e daí vi aqui que muita gente trabalha com isso, se por acaso alguem tiver, favor entrar em contato comigo no email: alexandre@declatecnologia.com.brAs impressoras compatíveis com o sistema dela estão na imagem.
Lembrando que ela precisa comprar uma destas impressoras (para impressão de etiquetas para semi jóias)
Obrigado a todos.
Alexandre Pereira
-
Olá Edu.
Cara, de referência internacional são Amazon e Digital Ocean.
Eu tenho usado a KingHost (brasileira) desde 2010. Eles também tem CLOUD lá, não tenho o que reclamar.
Fui para a KingHost em 2010 exatamente por causa da Locaweb. Só tinham propaganda, hoje não sei como estão, mas de acordo com você continua a mesma coisa.Um abraço,
Alexandre Pereira -
Fala Luiz,
Quanto tempo rapaz?
Cara, sugiro pular fora dessa DLL até porque os bancos hoje estão usando API para fazer registros, etc.
Me parece que a ACBR tem algo, mas não tenho certeza.
Um abraço meu amigo.
Alexandre Pereira -
9 horas atrás, MAMP2 disse:
ou existe alguma funcao que trasnforma UTF-8 em ASCII (encorde)? alguem tem?
Bom, talvez vc esteja usando o modo diferente do que eu uso: Tente OemToAnsi(), AnsiToOem()....
Enfim, mas vou te enviar a minha que foi feito na unha pra tirar os acentos.
Um abraço,
Alexandre Pereira////////////////////////////DADOS DA FUNCAO////////////////////////////////////////////// NOME : TiraAcentoUTF //// SINTESE : Retirar acentos e cedilhas //// PARAMETROS : <1> cTexto para retirar os acentos //// RETORNO : cTexto sem acentos ou cedilhas /////////////////////////////////////////////////////////////////////////////////////////function TiraAcentoUTF( cTexto )cTexto := StrTran(cTexto,"ã","a")cTexto := StrTran(cTexto,"ä","a")cTexto := StrTran(cTexto,"à","a")cTexto := StrTran(cTexto,"á","a")cTexto := StrTran(cTexto,"ª","a")cTexto := StrTran(cTexto,"â","a")cTexto := StrTran(cTexto,"¦","a")cTexto := StrTran(cTexto,"è","e")cTexto := StrTran(cTexto,"é","e")cTexto := StrTran(cTexto,"ê","e")cTexto := StrTran(cTexto,"ë","e")cTexto := StrTran(cTexto,"ì","i")cTexto := StrTran(cTexto,"í","i")cTexto := StrTran(cTexto,"î","i")cTexto := StrTran(cTexto,"ï","i")cTexto := StrTran(cTexto,"ò","o")cTexto := StrTran(cTexto,"§","o")cTexto := StrTran(cTexto,"õ","o")cTexto := StrTran(cTexto,"ö","o")cTexto := StrTran(cTexto,"ó","o")cTexto := StrTran(cTexto,"º","o")cTexto := StrTran(cTexto,"ô","o")cTexto := StrTran(cTexto,"õ","o")cTexto := StrTran(cTexto,"ø","o")cTexto := StrTran(cTexto,"ù","u")cTexto := StrTran(cTexto,"ú","u")cTexto := StrTran(cTexto,"ü","u")cTexto := StrTran(cTexto,"û","u")cTexto := StrTran(cTexto,"ç","c")cTexto := StrTran(cTexto,"Ã","A")cTexto := StrTran(cTexto,"Ä","A")cTexto := StrTran(cTexto,"À","A")cTexto := StrTran(cTexto,"Á","A")cTexto := StrTran(cTexto,"Â","A")cTexto := StrTran(cTexto,"È","E")cTexto := StrTran(cTexto,"Ë","E")cTexto := StrTran(cTexto,"É","E")cTexto := StrTran(cTexto,"Ê","E")cTexto := StrTran(cTexto,"Ì","I")cTexto := StrTran(cTexto,"Í","I")cTexto := StrTran(cTexto,"Î","I")cTexto := StrTran(cTexto,"Ï","I")cTexto := StrTran(cTexto,"Ò","O")cTexto := StrTran(cTexto,"Õ","O")cTexto := StrTran(cTexto,"Ó","O")cTexto := StrTran(cTexto,"Ô","O")cTexto := StrTran(cTexto,"Ö","O")cTexto := StrTran(cTexto,"Ù","U")cTexto := StrTran(cTexto,"Ú","U")cTexto := StrTran(cTexto,"Ü","U")cTexto := StrTran(cTexto,"Û","U")cTexto := StrTran(cTexto,"Ç","C")cTexto := StrTran(cTexto,"«"," ")cTexto := StrTran(cTexto,"®"," ")cTexto := StrTran(cTexto,"?"," ")cTexto := StrTran(cTexto,"¬"," ")cTexto := StrTran(cTexto,"¯"," ")cTexto := StrTran(cTexto,"ý"," ")cTexto := StrTran(cTexto,","," ")cTexto := StrTran(cTexto,"'"," ")cTexto := StrTran(cTexto,"`"," ")cTexto := StrTran(cTexto,"/"," ")cTexto := StrTran(cTexto,"\"," ")return cTexto -
17 horas atrás, sygecom disse:
Bom dia Alê,
Lembro de você em um evento do Fivewin que aconteceu em Minas, acho que no SESC, foi top aquele evento, por aqui tudo corrido e por ai ? tudo bem ?
Segue abaixo o exemplo, como eu disse não está 100% mas da para partir dai para fazer algo bem legal.
FUNCTION MyManualReport( cTXT2FR3 ) /* Recebe por parâmetro o arquivo .txt ou .prn para mostrar na tela do fastreport exemplo: c:\syg_temp\relatorio.txt */ local oFrPrn IF !FILE(cTXT2FR3) ShowMsg("Erro ao localizar o arquivo para impressão " +cTXT2FR3 ) RETURN(.F.) ENDIF oFrPrn := frReportManager():new() //oFrPrn:LoadLangRes(PEGA_ARQUIVO_SAGI(1,.T.)) // aqui é o icone da tela oFrPrn:PreviewOptions:SetShowCaptions(.T.) oFrPrn:SetIcon(1001) oFrPrn:SetTitle("Visualizador de Relatórios do Sistema.") oFrPrn:StartManualBuild( { || MyManualReport2(oFrPrn,cTXT2FR3) }, FR_LANDSCAPE, , FR_PIXELS ) oFrPrn:PrepareReport() oFrPrn:ShowPreparedReport() oFrPrn:Clear() oFrPrn:DestroyFR() // detona com o fastreporte e a dll da memoria. oFrPrn:=nil RETURN(.t.) FUNCTION MyManualReport2(oFrPrn,cTXT2FR3) /* Exemplo de uso sem arquivo .FR3 */ local tmp_Name:='', cText_ARQ:='', nLINES:=0, nA:=0, nINIT_LINE:=0, cIMPTEXT:='' //local cLOGO:=ARQUIVOLOGOMARCA() // pega o logotipo do cliente para mostrar no relatorio local cLOGO:='' oFrPrn:SetDefaultFontProperty( "Name", "Arial" ) oFrPrn:SetDefaultFontProperty( "Size", 10 ) IF !EMPTY(cLOGO) oFrPrn:PictureAt( cLOGO , 30, 200, 150, 150 ) nINIT_LINE:=300 ENDIF cText_ARQ := memoread( cTXT2FR3 ) // carrega o TXT nLINES := mlcount( cText_ARQ, 250 ) // total de linhas FOR nA := 1 to nLINES cLINE := MEMOLINE( cText_ARQ, 250, nA, 1, .F., .T. ) IF Left(AllTrim( cLine ), 1 ) == Chr( 15 ) .or. Left( AllTrim(cLine), 1 ) == Chr( 18 ) loop ENDIF If Left(AllTrim(cLine),1)==Chr(12) //SALTO DA PAGINA LOOP //oFrPrn:NewPage() ENDIF IF AT('[',cLine)>0 .OR. AT(']',cLine)>0 cLine:=Stuff(cLine, AT('[',cLine),1,'-') cLine:=Stuff(cLine, AT(']',cLine),1,'-') ENDIF IF !EMPTY(ALLTRIM(cLINE)) //oFrPrn:MemoAt(cLINE, 100, (nA*100)+nINIT_LINE, 350, 50 ) nINIT_LINE:=0 cIMPTEXT:=cIMPTEXT+cLINE+CR_LF //MemoAt(cStr, nLeft, nTop, nWidth, nHeight) ENDIF NEXT oFrPrn:MemoAt(cIMPTEXT, 10, 350, 1500, 1500 ) * tmp_Name := oFrPrn:MemoAt( "Some memo with bottom frame ...", 30, 30, 300, 50 ) * oFrPrn:SetManualObjProperty( tmp_Name + ".Frame", "Typ", "[ftBottom]" ) // oFrPrn:LineAt( 30, 200, 100, 100 ) // oFrPrn:MemoAt( "<-- It's a some line ...", 200, 250, 350, 50 ) // oFrPrn:NewPage() // oFrPrn:MemoAt( "It's a second page..................", 30, 30, 100, 1000 ) RETURN(.T.)
Olá meu amigo, que memória hein? Foi isso mesmo.
Tudo bem por aqui e muito obrigado pelo exemplo.
Um abraço,
Alexandre Pereira -
3 horas atrás, sygecom disse:
Tenho um exemplo que não está 100% que lê relatórios em TXT para gerar em FASTREPORT, se isso ajuda posso postar aqui.
Opa, posta aí então meu amigo.
Por falar nisso, vc está sumido. Uso até hoje aquela dica de instalação do MySQL que vc me passou (instalar pelo próprio aplicativo).
Um abraço,
Alexandre Pereira -
1 hora atrás, MAMP2 disse:
oi alexandre tem como baixar em excel ou texto, nao uso SQL
é possivel por favor?
Gerei em .CSV com tamanho fixo.
https://drive.google.com/file/d/183F-YI8O2UF6wLZyXXt5XbSwFTQqxKX5/view?usp=sharingExiste duas tabelas:
- CEP
- BAIRRO
A de CEP se relaciona com o bairro para trazer o endereço completo.
Agora vai te servir.
Um abraço,
Alexandre Pereira
-
Segue a rotina de consulta externa.
////////////////////////////////////////////////////////////////////////////////////////////// NOME : BuscaCepOnLine //// SINTESE : Procura nos correios um CEP e retornar array //// PARAMETROS : cCEP // 1 - Número do CEP //// @aRetorno // 2 - Array ( Logradouro, Bairro, Cidade, UF ) //// RETORNO : lAchou Alexandre //////////////////////////////////////////////////////////////////////////////////////////////Function BuscaCepOnLine( cCep, aRetorno )local oCon, cMsg, cComando, cBuffer, cLogradouro, cBairro, cCidade, cUFlocal hJsonlocal lRetorno := .t.local nLenhJson := {=>}cMsg := ''cCep := SoNumeros( cCep )tryoCon := CreateObject("Microsoft.XMLHTTP")catch oErrorcMsg := oError:descriptionlRetorno := .f.endif lRetornocComando := 'https://viacep.com.br/ws/'+cCep+'/json/'tryoCon:Open("GET", cComando,.f.)catch oErrorcMsg := oError:descriptionlRetorno := .f.endendifif lRetornotryoCon:Send()catch oErrorcMsg := oError:descriptionlRetorno := .f.endendifif lRetornohJson := {}cBuffer := oCon:responseBodynLen := hb_jsonDecode( cBuffer , @hJson )if nLen = 0cMsg := "Erro"hJson := {=>}endifif !empty( hJson ) .and. HhasKey( hJson, 'logradouro' )cLogradouro := hJson['logradouro']endifif !empty( hJson ) .and. HhasKey( hJson, 'bairro' )cBairro := hJson['bairro']endifif !empty( hJson ) .and. HhasKey( hJson, 'localidade' )cCidade := hJson['localidade']endifif !empty( hJson ) .and. HhasKey( hJson, 'uf' )cUF := hJson['uf']endifendifif empty( cLogradouro ) .or. empty( cBairro ) .or. empty( cCidade ) .or. empty( cUF )lRetrono := .f.aRetorno := {'','','',''}elselRetorno := .t.aRetorno := { TiraAcentoUTF(cLogradouro), TiraAcentoUTF(cBairro), TiraAcentoUTF(cCidade), cUF }endifif !empty( cMsg )MsgStop( 'Não foi possível obter o CEP pelos correios!','Erro')endifreturn lRetorno -
Pessoal, uso estas tabela em MySQL.
https://drive.google.com/file/d/1A1jZjaJlmKyHkd4ZfuaX0kjTSe1eJOMp/view?usp=sharing
Espero que ajude os amigos.
Os dados que não tenho eu saio e consulto fora, mas ela já me ajuda bastante.
Um abraço,
Alexandre Pereira -
7 minutos atrás, macs disse:
******************************************************************************** ** Arquivo...: TCheckVersaoDisponivel.Prg * ******************************************************************************** ** Função....: TCheckVersaoDisponivel() * ** Objetivo..: Checar se existe uma versão disponível no site do sistema * ** Módulo....: Library * ** Autor.....: Márcio Augusto Cezar * ** Data......: 16/10/2008 17:16:03 * ******************************************************************************** ** Retorno...: * ******************************************************************************** ** Observação: Exemplo da chamada * ** TCheckVersaoDisponivel():new( oWnd, -> Window principal * ** BUILD, -> Versão atual do sistema * ** DT_VERSAO, -> Data da versão atual * ** cSiglaSys, -> Sigla do sistema * ** nome_empresa ) ->Senha da empresa * ** :Execute() -> Método que executa a classe * ** * ******************************************************************************** /* ** Definicoes para o tratamento de efeitos nas dialogs do sistema ** ** Informacoes de animação para API do windows **/ # Define AW_HOR_POSITIVE 1 && Animates the window from left to right. This flag can be used with roll or slide animation. # Define AW_HOR_NEGATIVE 2 && Animates the window from right to left. This flag can be used with roll or slide animation. # Define AW_VER_POSITIVE 4 && Animates the window from top to bottom. This flag can be used with roll or slide animation. # Define AW_VER_NEGATIVE 8 && Animates the window from bottom to top. This flag can be used with roll or slide animation. # Define AW_CENTER 16 && Makes the window appear to collapse inward if AW_HIDE is used or expand outward if the AW_HIDE is not used. # Define AW_HIDE 65536 && Hides the window. By default, the window is shown. # Define AW_ACTIVATE 131072 && Activates the window. # Define AW_SLIDE 262144 && Uses slide animation. By default, roll animation is used. # Define AW_BLEND 524288 && Uses a fade effect. This flag can be used only if hwnd is a top-level window. # Include "FiveWin.Ch" # Include "HBXml.Ch" # Include "FileIO.Ch" # Include "URLLink.Ch" CLASS TCheckVersaoDisponivel PRIVATE: DATA aOcorrencias AS ARRAY DATA cVersaoAtual ,; cVersaoDisponivel ,; cSiglaSistema ,; cSenhaEmpresa ,; cNomeEmpresa ,; cTituloDialog AS CHARACTER DATA cLink ,; cFileVersion ,; cResources AS CHARACTER DATA dDataVersaoAtual ,; dDataVersaoDisponivel AS DATE DATA lSistemaAtivo ,; lForceVisualizacao AS LOGIC DATA oWnd AS OBJECT METHOD getLink() INLINE ::cLink := "http://www.????????????????senha=" + alltrim( ::cSenhaEmpresa ) METHOD putVersaoFile() METHOD dialogMensagem() PUBLIC: METHOD new( oWnd, cVersaoAtual, dDataVersaoAtual, cSiglaSistema, cEmpresa, cTituloDialog ) CONSTRUCTOR METHOD end() INLINE ( PostMessage( self, WM_CLOSE ) ) //setResources( ::cResources ) METHOD execute( lViewDadosLink ) METHOD getSistemaAtivo() INLINE ( ::lSistemaAtivo ) METHOD getVersaoDisponivel() INLINE ( ::cVersaoDisponivel ) METHOD getDataVersao() INLINE ( ::dDataVersaoDisponivel ) METHOD getOcorrencias() INLINE ( ::aOcorrencias ) METHOD ajustaDialog( oDlg ) ENDCLASS ********************************************************************************* ** Método....: new() * ** Objetivo..: Método construtor da classe * ** Autor.....: Márcio Augusto Cezar * ** Data......: 16/10/2008 17:23:19 * ********************************************************************************* ** Observação: * ********************************************************************************* METHOD new( oWnd, cVersaoAtual, dDataVersaoAtual, cSiglaSistema, cEmpresa, cTituloDialog, lForceVisualizacao ) CLASS TCheckVersaoDisponivel DEFAULT cTituloDialog := "Existe uma nova versão disponível para o sistema" DEFAULT lForceVisualizacao := .F. ::oWnd := oWnd ::cResources := getResources() ::cVersaoAtual := alltrim( cVersaoAtual ) ::cSiglaSistema := cSiglaSistema ::cSenhaEmpresa := PassWord( alltrim( cEmpresa ) ) ::dDataVersaoAtual := dDataVersaoAtual ::cTituloDialog := cTituloDialog + " " + cSiglaSistema ::cVersaoDisponivel := "" ::dDataVersaoDisponivel := ctod("") ::lForceVisualizacao := lForceVisualizacao ::cFileVersion := "SystemVer.Txt" RETURN self ********************************************************************************* ** Método....: putVersaoFile() * ** Objetivo..: Escreve a versão do sistema no arquivo XML * ** Autor.....: Márcio Augusto Cezar * ** Data......: 16/10/2008 17:43:11 * ********************************************************************************* ** Observação: * ********************************************************************************* METHOD putVersaoFile() LOCAL oHttp, oUrl IF file( ::cFileVersion ) FErase( ::cFileVersion ) ENDIF oUrl := TUrl():New( ::getLink() ) oHttp := TIPClient():New( oUrl ) oHttp:nConnTimeout := 1000 oHttp:nDefaultPort := 9600 // Gravando no arquivo! /////////////////////// IF oHttp:Open() IF ! oHttp:ReadToFile( ::cFileVersion, FC_NORMAL, 300 ) // msgStop( "Não foi possível criar o arquivo " + ::cFileVersion ) ENDIF ENDIF IF oHttp <> Nil oHttp:Close() ENDIF RETURN file( ::cFileVersion ) ********************************************************************************* ** Método....: Execute() * ** Objetivo..: Executar os procedimentos da classe * ** Autor.....: Márcio Augusto Cezar * ** Data......: 16/10/2008 17:27:39 * ********************************************************************************* ** Observação: * ********************************************************************************* METHOD execute( lViewDadosLink ) CLASS TCheckVersaoDisponivel LOCAL oFile, oXML, oNode, oIter LOCAL aLines := {} DEFAULT lViewDadosLink := .F. ::aOcorrencias := {} BEGIN SEQUENCE // Checando se existe conectividade com a internet ////////////////////////////////////////////////// IF ! ChecaInternet( "www.simtechsistemas.com.br" ) aAdd( ::aOcorrencias, "Não há conexão com a Internet" ) ENDIF IF ! ::putVersaoFile() aAdd( ::aOcorrencias, "Não foi possível gravar o registro de versão no arquivo XML" ) ENDIF TRY oFile := TTxtFile():new( ::cFileVersion ) CATCH aAdd( ::aOcorrencias, "Erro na abertura do arquivo XML" ) END IF FError() <> 0 ::aAdd( ::aOcorrencias, "Erro na abertura do arquivo XML" ) ENDIF IF len( ::aOcorrencias ) <> 0 BREAK ENDIF WHILE ! oFile:lEof() aAdd( aLines, oFile:readLine() ) oFile:Skip() ENDDO oFile:close() IF lViewDadosLink mytoString( aLines ) ENDIF IF len( aLines ) > 0 IF ! ( ::lSistemaAtivo := "ATIVO" $ upper( aLines[01] ) ) BREAK ENDIF ::cNomeEmpresa := aLines[02] FOR nX := 3 TO len( aLines ) IF left( aLines[ nX ], 3 ) == ::cSiglaSistema ::cVersaoDisponivel := subStr( aLines[ nX ], at( "-", aLines[ nX ] ) + 1 ) ::cVersaoDisponivel := alltrim( subStr( ::cVersaoDisponivel, 1, at( "-", ::cVersaoDisponivel ) - 1 ) ) ::dDataVersaoDisponivel := ctod( alltrim( subStr( aLines[ nX ], rat( "-", aLines[ nX ] ) + 1 ) ) ) ENDIF NEXT ENDIF IF ( ::cVersaoDisponivel > ::cVersaoAtual .OR. ::dDataVersaoDisponivel > ::dDataVersaoAtual ) .OR. ::lForceVisualizacao // Exibindo a mensagem na tela ////////////////////////////// ::dialogMensagem() ENDIF END SEQUENCE RETURN ( len( ::aOcorrencias ) == 0 ) ********************************************************************************* ** Método....: ajustaDialog() * ** Objetivo..: Ajustar posicionamento de uma determinada dialog em relação à * ** janela principal * ** Autor.....: Márcio Augusto Cezar * ** Data......: 20/10/2008 - 16:25:22 * ********************************************************************************* ** Parâmetros: oDlg --> Objeto dialog que será ajustado * ********************************************************************************* METHOD ajustaDialog( oDlg ) CLASS TCheckVersaoDisponivel LOCAL aCoorsWnd := { 0, 0 } LOCAL nTopWnd := 0 LOCAL nLeftWnd := 0 // ---> Recuperando as coordenadas da dialog e da janela pai //////////////////////////////////////////////////////////// aCoorsWnd := clientToScreen( ::oWnd:hWnd, aCoorsWnd ) nTopWnd := ( ( aCoorsWnd[1] + ::oWnd:nHeight ) - oDlg:nHeight ) - 77 nLeftWnd := ( ::oWnd:nWidth() - oDlg:nWidth() ) - 8 // ---> Posicionando a dialog ///////////////////////////// oDlg:move( nTopWnd, nLeftWnd,,, .T. ) ::oWnd:setFocus() RETURN ********************************************************************************* ** Método....: dialogMensagem() * ** Objetivo..: Configuração da dialog da mensagem * ** Autor.....: Márcio Augusto Cezar * ** Data......: 20/10/2008 - 16:14:07 * ********************************************************************************* ** Observação: * ********************************************************************************* METHOD dialogMensagem() CLASS TCheckVersaoDisponivel LOCAL oDlg, oFont, oFont2, oLastDlg, oTimer, oLink LOCAL oObj := self LOCAL cColorBack := 16768959 LOCAL cColorText1 := CLR_BLACK LOCAL cColorText2 := CLR_BLUE LOCAL cColorText3 := 106 // ---> Salvando a última janela ativa antes da mensagem //////////////////////////////////////////////////////// oLastDlg := oWndFromhWnd( getActiveWindow() ) setResources( "Comum.Dll" ) DEFINE DIALOG oDlg RESOURCE "CHK_NOVA_VERSAO" OF ::oWnd COLOR CLR_BLACK, cColorBack oFont := TFont():New( "MS Sans Serif", 0, 15,, .T. ) oFont2 := TFont():New( "Courier" , 0, 12,, .T. ) // ---> Criando o timer para close automatico da dialog /////////////////////////////////////////////////////// oTimer := TTimer():new( 10000, { || animateDlg( oDlg, "fadeOut",, .T. ), oTimer:end() }, oObj:oWnd ) REDEFINE SAY ID 4001 OF oDlg COLOR 22784 , cColorBack FONT oFont PROMPT ::cTituloDialog REDEFINE SAY ID 4002 OF oDlg COLOR cColorText1, cColorBack FONT oFont2 PROMPT ::cVersaoAtual REDEFINE SAY ID 4003 OF oDlg COLOR cColorText1, cColorBack FONT oFont2 PROMPT ::dDataVersaoAtual REDEFINE SAY ID 4004 OF oDlg COLOR cColorText2, cColorBack FONT oFont2 PROMPT ::cVersaoDisponivel REDEFINE SAY ID 4005 OF oDlg COLOR cColorText2, cColorBack FONT oFont2 PROMPT ::dDataVersaoDisponivel REDEFINE SAY ID 4006 OF oDlg COLOR cColorText3, cColorBack REDEFINE SAY ID 4007 OF oDlg COLOR cColorText3, cColorBack REDEFINE SAY ID 4008 OF oDlg COLOR cColorText3, cColorBack REDEFINE SAY ID 4009 OF oDlg COLOR cColorText3, cColorBack REDEFINE SAY ID 4010 OF oDlg COLOR CLR_BLACK, cColorBack REDEFINE URLLINK oLink ID 4011 URL "www.simtechsistemas.com.br" OF oDlg TOOLTIP "Click neste link para acessar a página da simtechsistemas Informática" oLink:SetColor( oLink:nClrInit, cColorBack ) ACTIVATE DIALOG oDlg NOWAIT ON INIT ( oObj:ajustaDialog( oDlg ), oTimer:activate() ) oFont:End() oFont2:End() // ---> Realizando o foco da última janela após a visualização de novas mensagens ///////////////////////////////////////////////////////////////////////////////// IF oLastDlg <> NIL oLastDlg:setFocus() ELSE ::oWnd:setFocus() ENDIF RETURN ********************************************************************************* ** Função....: animateDlg() * ** Objetivo..: Realizar uma determinada animação na dialog/window * ** Autor.....: Márcio Augusto Cezar * ** Data......: 20/10/2008 - 15:46:44 * ********************************************************************************* ** Parâmetros: oDlg --> Objeto dialog/window para controle da animação * ** cTipoAnimacao --> String contendo o tipo de animação a ser feita * ** de acordo com os tipos definidos pela API * ** nDuracao --> Velocidade a ser realizada a animação * ** lFechaDlg --> Expr. Lógica indicando se a Dialog/Window deverá * ** ser finalizada * ********************************************************************************* ** Retorno...: NIL * ********************************************************************************* FUNCTION animateDlg( oDlg, cTipoAnimacao, nDuracao, lFechaDlg ) DEFAULT cTipoAnimacao := "fadeIn", ; nDuracao := if( inArray( { "fadeOut", "fadeIn" }, cTipoAnimacao ), 1000, 200 ), ; lFechaDlg := .F. // ---> Realizando a animação apropriada, definida em cTipoAnimacao /////////////////////////////////////////////////////////////////// IF ( cTipoAnimacao == "fadeIn" ) animateWindow( oDlg:hWnd, nDuracao, AW_BLEND + AW_CENTER ) ELSEIF ( cTipoAnimacao == "fadeOut" ) IF ( animateWindow( oDlg:hWnd, nDuracao, AW_BLEND + AW_HIDE ) == 0 ) oDlg:hide() ENDIF ELSEIF ( cTipoAnimacao == "toUp" ) animateWindow( oDlg:hWnd, nDuracao, AW_VER_NEGATIVE ) ELSEIF ( cTipoAnimacao == "toDown" ) animateWindow( oDlg:hWnd, nDuracao, AW_VER_POSITIVE ) ELSEIF ( cTipoAnimacao == "fromLeft" ) animateWindow( oDlg:hWnd, nDuracao, AW_HOR_POSITIVE ) ELSEIF ( cTipoAnimacao == "fromRight" ) animateWindow( oDlg:hWnd, nDuracao, AW_HOR_NEGATIVE ) ENDIF // ---> Atualizando a dialog para objetos say/image /////////////////////////////////////////////////// oDlg:refresh() // ---> Verificando se a dialog deverá ser fechada /////////////////////////////////////////////////// if( lFechaDlg, oDlg:end(), ) RETURN( NIL ) ********************************************************************************* ** Função....: Funções de controle geral para Dialogs/Window a partir de API * ** Autor.....: Márcio Augusto Cezar * ** Data......: 13/06/2008 11:00:53 * ********************************************************************************* DLL FUNCTION animateWindow( hWnd AS LONG, dwTime AS LONG, dwFlags AS LONG ) AS LONG PASCAL ; FROM "AnimateWindow" LIB "user32.dll" DLL FUNCTION findWndByClass( wndClass AS LPSTR, wndName AS LPSTR ) AS LONG PASCAL ; FROM "FindWindowA" LIB "user32.dll" ********************************************************************************* ** Método....: inArray() * ** Objetivo..: Checa se determinado parâmetro encontra-se no array informado * ** Autor.....: Márcio Augusto Cezar * ** Data......: 20/10/2008 - 17:16:32 * ********************************************************************************* ** Observação: * ********************************************************************************* FUNCTION inArray( aVetor, uParametro, bBlocoCodigo ) LOCAL lInArray := .F. DEFAULT uParametro := "", ; aVetor := {}, ; bBlocoCodigo := NIL IF bBlocoCodigo == NIL lInArray := ( ascan( aVetor, { | uParam | uParam == uParametro } ) > 0 ) ELSE lInArray := ( ascan( aVetor, bBlocoCodigo ) > 0 ) ENDIF RETURN( lInArray )
Esta função checa se existe uma versão disponível no ftp e apresenta uma notificação no try. Você pode adaptar pra você.
Obrigado meu amigo.
Vou dar uma estudada aqui.
Valeu.
Um abraço,
Alexandre Pereira -
Uso a versão paga.
Mas é a antiga, na época so Sergey ainda.
Um abraço,
Alexandre Pereira -
14 horas atrás, Jmsilva disse:
Olá, existe a classe da Fivewin TTrayIcon que faz exatamente isto! na pasta samples tem exemplo: testtray.prg
#include "Fivewin.CH" static oWnd, oTray, oIcon function TESTIT() local oIcon1 DEFINE ICON oIcon FILE "..\icons\fivewin.ICO" DEFINE ICON oIcon1 FILE "..\icons\folder.ico" DEFINE WINDOW oWnd TITLE "Icon Tray Class for FiveWin! from Jim Gale" ICON oIcon ACTIVATE WINDOW oWnd ; ON INIT oTray := TTrayIcon():New( oWnd, oIcon, "Testing tray ...",; { || MsgInfo( "Left CLick" ) },; { | nRow, nCol | MenuTray( nRow, nCol, oTray ) } ) ; VALID oTray:End() ; ON RIGHT CLICK oTray:SetIcon( oIcon1, "Another" ) return NIL function MenuTray( nRow, nCol, oTray ) local oMenu MENU oMenu POPUP MENUITEM "Show" ACTION oWnd:Show(), oWnd:SetFocus() MENUITEM "Hide" ACTION oWnd:Hide() SEPARATOR MENUITEM "Close Application" ACTION oWnd:end() ENDMENU ACTIVATE POPUP oMenu AT nRow, nCol OF oTray:oWnd return NIL
Por algum motivo não consegui fazer funcionar perfeitamente no xHarbour, acabei usando HB32 deu tudo certo. Mas não verifiquei a causa do erro no xHB.
JMSilva
Olá meu amigo.
Na verdade o que a classe faz é um menu, eu queria que na notificação me desse a oportunidade de executar uma função, quando clicado. Exatamente os antivírus, atualizações nos permitem fazer.
Enfim, vou notificar o usuário com shellnotify e se o cara clicar executaria uma determinada função. Creio não ser possível porque a o shellnotify na verdade é uma function das DLLs do windows, por isso acho não ser possível. Mas de qualquer forma, se existir estamos dentro.
Um abraço,
Alexandre Pereira -
Ninguém ou eu não soube explicar? rsrsrsrsrs
-
Olá PessoALL,
Alguém saberia me dizer se consigo fazer uma associação de uma função xHarbour para ser utilizada na notificação do Windows (aquela mesma do tray já comentado aqui no grupo)?
Pergunto pois, se o sistema notificar o usuário dentro do sistema, queria abrir uma janela caso o usuário clique na notificação. Exatamente igual existe para atualizações do Java, etc.
Não sei se é possível, mas se for será de granda valia pra mim.
Um abraço,
Alexandre Pereira -
Não tem problema, o memoread lê tranquilamente, não deixa de ser um arquivo. Leio aruqivos de imagens e outros mais através dele.
Mas se o arquivo é gerado por vc, neste caso fica até mais fácil.Acho que o caminho é esse.
Um abraço,
Alexandre Pereira -
Olá Oscar.
Faça um memoread no arquivo pra dentro uma variável e usa a função clipboard para esta variável, assim o texto fica na área de transferênciaNunca fiz isso, mas deve ser por aí.
Um abraço,
Alexandre Pereira -
Olá pessoal,
Manuel Mercado, autor da TSBUTTON e TSBROWSE, faleceu ontem.
http://fivetechsupport.com/forums/viewtopic.php?f=6&t=41871&sid=8cdc3e6838ff0a603a60a88e7ff0f882
Usei por muito tempo suas classes que eram bem além do tempo.
Um abraço,
Alexandre Pereira -
10 horas atrás, lucimauromelo disse:
Pelo navegador ou pela tela do terminal service?
Pelo navegador. Mas tem opção de instalar o Client tbm. Porém este Client não é o da Micro$oft
Ontem mostrei para o Marcelo (Marca) o meu sistema funcionando. Ele ficou muito satisfeito com a velocidade e a facilidade.
-
58 minutos atrás, Theotokos disse:
deixa ver se entendi! Com TSPlus o meu cliente pode ter uma maquina com servidor (onde ficaria então todos os programas disponiveis para os usuarios) e as outras lojas (filiais) pode acessar através do TSPlus por um navegador, e utilizar o programa desktop da loja?
exatamente
-
Em 21/05/2022 at 18:01, lucimauromelo disse:
Eu venho acompanhando eles nos podcast do projetoacbr falando muitos sobre os TSPLUS me parece bem fácil de instalar, quanto aos preços voce poderiao nos dar um exemplo aqui. pelo que entendi os servidores são seus ou são dos clientes mesmo.
No nosso caso, os servidores são nossos. Mas pode colocar onde quer que seja. Quanto às licenças, no site já tem os preços para o consumidor, mas existe uma parceria com a representante aqui no Brasil onde empresas de desenvolvimento podem pagar mensalmente por cliente. No nosso caso, estamos pagando R$ 20,00 por cliente com o mínimo de 10 clients.
Acho a proposta deles extremamente bacana. -
Olá pessoal,
Sempre tem gente perguntando como colocar o aplicativo pra rodar no navegador. Pois bem, estávamos estudando uma solução mais barata para os nossos clientes ao utilizar o Terminal Server (não tem nada a ver com aplicativo por navegador), e nos deparamos com a ferramenta TSPLUS. Além de ter os clients infinitamente mais barato que o Terminal Server da Micro$oft, ele tem também a opção de acessar e rodar o ERP pelo navegador. Montamos dois servidores através do Hyper V e disponibilizamos para rodar em dois clientes diferentes. Estamos simplesmente fascinados com o resultado, até os clientes estão preferido utilizar ao invés de usar o TS da Micro$oft.
Fica a dica aí, ferramente extremamente eficiente e creio que vai resolver o problema de muita gente. A configuração é extremamente simples e você coloca a saída da forma que quiser, se quiser colocar a área de trabalho é possível, se quiser colocar apenas um app é possível, enfim são muitas possibilidades e muito simples de configurar. Além de ter as ferramentas de defesas que tbm são muito bacana.
Fica a dica.
Um abraço,
Alexandre Pereira- Luiz Fernando and Valdir
- 2
-
Bom dia
///
oWS := WebConnect():New()cTexto := ' 'cUser := 'nomedousuario'cSenha := 'senhaenviadapelazenvia'cTelefone := '5531991143593'cMensagem := 'Mensagem de Teste'cTexto := oWS:Open( 'https://api-http.zenvia.com/GatewayIntegration/msgSms.do?account='+cUser+'&code='+cSenha+'&dispatch=send&to='+cTelefone+'&msg='+cMensagem )if len( cTexto ) >= 3 .and. substr(cTexto,1,3) = '000'lRetorno := .t.elseif len( cTexto ) >= 3 .and. substr(cTexto,1,3) = '990'MsgStop('Erro ao enviar SMS, possivelmente estourou a cota!'+CRLF+cTexto,'Erro' )lRetorno := .f.elseif len( cTexto ) >= 3 .and. substr(cTexto,1,3) = '900'MsgStop('Erro ao enviar SMS, Erro de Autenticação!'+CRLF+cTexto,'Erro' )lRetorno := .f.elselRetorno := .f.endifsyswait(.2)sysrefresh()oWS:end()
////
Trecho do meu código
Deve te ajudar
Um abraço,
Alexandre Pereira
Uso do Aplicativo pelo navegador
in Programação
Posted
Olá meu amigo.
Tem sim, porém estou em viagem. Assim que voltar pra B.Horizonte marco com você.
Um abraço,
Alexandre Pereira