AcessoSoft
Membros-
Posts
36 -
Joined
-
Last visited
Everything posted by AcessoSoft
-
Hoje utilizo a solução do MEX10 com pacote de 5.000 SMS que coloca o custo em 0,04 por SMS. Qual o custo do DISPARO PRO?
- 4 replies
-
- integracao
- envio
-
(and 4 more)
Tagged with:
-
Interessante demais este recurso. Parabéns ao(s) idealizadore(s).
-
/******************************************************************************************* * EXEMPLO DE BUSCA GERAL POR UMA EXPRESSÃO QUALQUER NUM ARQUIVO DBF E RETORNO DE ARRAY * FUNCIONA COM QUALQUER ARQUIVO DBF * by: Acesso Softwares *******************************************************************************************/ #include "fivewin.ch" /******************************************************************************************/ FUNCTION Main() LOCAL cBusca, aFiltrados USE clientes.dbf cBusca := "SÃO PAULO" aFiltrados := CriaArrayFiltrado( cBusca ) XBROWSE( aFiltrados ) RETURN NIL /*******************************************************************************************/ FUNCTION CriaArrayFiltrado( cBusca ) LOCAL nFor, bFiltro, aArray := {}, aCampos, cFiltro := "" cTextoBusca := cBusca //------------------------------ OBTEM CAMPOS DO ARQUIVO ----------------------------------// aCampos := DBSTRUCT() //---- MONTA STRING PARA CONDICAO DO DBEVAL SOMENTE COM OS CAMPOS DO TIPO C, M, D, N ------// FOR nFor = 1 TO LEN( aCampos ) DO CASE // Campo tipo caracter ou memo CASE aCampos[ nFor, 2 ] $ "CM" cFiltro += "UPPER( cTextoBusca ) $ TiraAcento( UPPER( " + aCampos[ nFor, 1 ] + ") ) .OR. " // campo do tipo data CASE aCampos[ nFor, 2 ] == "D" cFiltro += "UPPER( cTextoBusca ) $ DTOC( " + aCampos[ nFor, 1 ] + ") .OR. " // campo do tipo numérico CASE aCampos[ nFor, 2 ] == "N" cFiltro += "UPPER( cTextoBusca ) $ STR( " + aCampos[ nFor, 1 ] + " ) .OR. " ENDCASE NEXT cFiltro := "{||" + SUBSTR( cFiltro, 1, LEN( cFiltro ) - 6 ) + "}" // -6 para retira o último .OR. criado acima //----------------------- MONTA CODEBLOCK DE FILTRO PARA DBEVAL --------------------------// IF EMPTY( cFiltro ) bFiltro := {|| .T. } ELSE bFiltro := &cFiltro ENDIF //------------ ADICIONA NO ARRAY REGISTRO QUE SATISFAÇA A CONDIÇAO ( bFiltro ) ------------// WHILE !EOF() IF EVAL( bFiltro ) AADD( aArray, PegaRegistro( aCampos ) ) ENDIF SKIP ENDDO //----------------------- CRIA ARRAY COM 1 LINHA EM BRANCO PARA O BROWSE -----------------// IF EMPTY( aArray ) aArray := { { LEN( aCampos ) } } AFILL( aArray[1], SPACE(10) ) ENDIF RETURN( aArray ) /********************************************************************************************/ FUNCTION PegaRegistro( aCampos ) LOCAL nFor, aRegistro := {}, cNomeCampo FOR nFor = 1 TO LEN( aCampos ) cNomeCampo := aCampos[ nFor, 1 ] AADD( aRegistro, &cNomeCampo ) NEXT RETURN( aRegistro ) /********************************************************************************************/ FUNCTION TiraAcento( cTexto ) // ESCREVA AQUI CÓDIGO QUE RETIRE DA STRING CARACTERES COMO: Ç, Ã, Ó, É, etc RETURN( cTexto ) /********************************************************************************************/
-
Saudações.... Alguém poderia indicar uma solução prática para converter um arquivo PDF para JPG ou BMP? O objetivo é exibir a imagem no Preview do FW. Pretendo converter a primeira página do PDF para BMP e montar um documento para impressão com essa imagem apenas para que possa ser visualizada no PREVIEW. Agradeço antecipadamente a quem puder ajudar...
-
Como faço pra alinhar os dados nas linhas do xbrowse? Vejam na imagem que a coluna NOSSO NÚMERO e VALOR estão fora de alinhamento http://www.acessosoft.com.br/img/50.png Estou criando o XBROWSE com o código abaixo: aMainPanelCtrl[ "MAIN_OBRWREM" ] := TXBrowse():New( aMainPanelCtrl[ "MAIN_OFOLDER" ]:aDialogs[ RemRetGetDialog( "REM" ) ] ) aMainPanelCtrl[ "MAIN_OBRWREM" ]:SetArray( aMainPanelCtrl[ "MAIN_ABRWREM" ] ) aMainPanelCtrl[ "MAIN_OBRWREM" ]:oFont := oFontLuc aMainPanelCtrl[ "MAIN_OBRWREM" ]:oDataSelFont := oFontLucB aMainPanelCtrl[ "MAIN_OBRWREM" ]:nMarqueeStyle := MARQSTYLE_HIGHLROW aMainPanelCtrl[ "MAIN_OBRWREM" ]:nColDividerStyle := 2 aMainPanelCtrl[ "MAIN_OBRWREM" ]:nRowDividerStyle := 2 aMainPanelCtrl[ "MAIN_OBRWREM" ]:nHeaderLines := 1 aMainPanelCtrl[ "MAIN_OBRWREM" ]:nDataLines := 4 aMainPanelCtrl[ "MAIN_OBRWREM" ]:nTop := 10 aMainPanelCtrl[ "MAIN_OBRWREM" ]:nLeft := 5 aMainPanelCtrl[ "MAIN_OBRWREM" ]:nBottom := aMainPanelCtrl[ "MAIN_OFOLDER" ]:aDialogs[ RemRetGetDialog( "REM" ) ]:nHeight - 38 aMainPanelCtrl[ "MAIN_OBRWREM" ]:nRight := aMainPanelCtrl[ "MAIN_OFOLDER" ]:nRight - 10 aMainPanelCtrl[ "MAIN_OBRWREM" ]:bClrStd := {|| { CLR_BLACK, IF( MOD( aMainPanelCtrl[ "MAIN_OBRWREM" ]:nArrayAt, 2 ) == 0, _PARM_BRWCLR[1], _PARM_BRWCLR[2] ) } } aMainPanelCtrl[ "MAIN_OBRWREM" ]:bClrSel := {|| { CLR_WHITE, CLR_BLACK } } aMainPanelCtrl[ "MAIN_OBRWREM" ]:nStretchCol := STRETCHCOL_LAST aMainPanelCtrl[ "MAIN_OBRWREM" ]:cFileSaveWidth := _PATH_TRM + "BRW_MAIN_REM.CFG" aMainPanelCtrl[ "MAIN_OBRWREM" ]:lRecordSelector := .F. aMainPanelCtrl[ "MAIN_OBRWREM" ]:cToolTip := "Listagem de Boletos Aguardando Remessa " + CRLF + CRLF + "Clique na primeira coluna para selecionar ou faça duplo clique para VISUALIZAR o boleto." aMainPanelCtrl[ "MAIN_OBRWREM" ]:blDblClick := {|| MainRemRetView( "REM" ) } aMainPanelCtrl[ "MAIN_OBRWREM" ]:bKeyDown := {|nKey| IF( nKey == VK_RETURN, MainRemRetView( "REM" ), NIL ) } aMainPanelCtrl[ "MAIN_OBRWREM" ]:bChange := NIL aMainPanelCtrl[ "MAIN_OBRWREM" ]:SetColor( CLR_BLACK, _PARM_BRWCLR[1] ) aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_SEL ]:cHeader := " " aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_SEL ]:AddResource("Bmp_CheckOn" ) aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_SEL ]:AddResource("Bmp_CheckOff" ) aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_SEL ]:bBmpData := { || RemRetBmpSel( "REM" ) } aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_SEL ]:nDataBmpAlign := AL_CENTER aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_SEL ]:bStrData := NIL aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_SEL ]:bLClickData := {|| RemRetClickSelect( "REM" ) } aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_DAT ]:cHeader := "Datas" aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_BOM ]:lHide := .T. aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_NUM ]:cHeader := "Número" aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_NUM ]:nHeadStrAlign:= AL_CENTER aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_BCO ]:lHide := .T. aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_NNU ]:cHeader := "Nosso Número" aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_NNU ]:nHeadStrAlign:= AL_CENTER aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_VAL ]:cHeader := "Valor R$" aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_VAL ]:nHeadStrAlign:= AL_CENTER aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_MAT ]:lHide := .T. aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_NOM ]:cHeader := "Aluno" aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_NOM ]:nHeadStrAlign:= AL_CENTER aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_USU ]:cHeader := "Usuário" aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_USU ]:nHeadStrAlign:= AL_CENTER aMainPanelCtrl[ "MAIN_OBRWREM" ]:aCols[ REM_COD ]:lHide := .T. aMainPanelCtrl[ "MAIN_OBRWREM" ]:CreateFromCode()
-
Olá, Estou com um problema desconhecido: Após algum tempo de inatividade, os objetos desaparecem da tela. Originalmente a tela é assim: Mas após algum tem de inatividade a tela fica assim: Alguém faz ideia do que possa ser?
-
Se entendi bem você deseja passar um texto de três linhas. 1º - Você quer uma função que identifique qual das três linhas é a maior 2º - Você quer ajustar o tamanho do botão de acordo com o retorno da função acima citada para que caiba todo texto É isso? Uma última pergunta: onde entraria o @ say? você fez uma espécie de botão usando texto ou está usando @ BUTTON?
-
Bem legais essas telas Giovanny. Tenho interesse nestes códigos. Manda pra mim se possível: acessosoft@gmail.com
-
Aproveitar pra listar outras fontes que nos meus testes obtive o mesmo efeito de alinhamento vertical (não importa se é número, letra maiúscula ou minúscula). Agency FB, BatangChe, Consolas, Courier, Courier New, DFKay-SB, DotumChe, FangSong, FixedSys, GulimChe, GungSuhChe, Kaiti, Lucida Console, Lucida Sans Typewriter, Ms Gothic, Ms Mincho, MingLiu, NSimSun, Niagara Engraved, Niagara Solid, OCR A Extended, Simplified Arabic Fixed,
-
Fiz alguns testes aqui e achei uma fonte chamada "Lucida Console".
-
As fontes acima citadas, não possuem as características que necessito. Somente a "Courier New" (que já uso) e a Ms Sans Serif que é uma fonte feia pra caramba. A demais não alinham caracteres verticalmente. Que tem alguma sugestão de fonte que NÃO SEJA a Courier New e tenha tamanhos fixos?
-
Você quer dar um visual de windows 10 no seu sistema rodando em outra versão do windows ? É isso? Não entendi.... Pra mim, o sistema aparece de acordo com a versão do windows que estou rodando o sistema. Se windows XP, visual do sistema XP, se windows 10, visual do sistema 10 ,e por aí vai...
-
Costumo usar COURIER para relatórios. Isso porque essa fonte alinha os caracteres verticalmente independente da largura da letra. Principalmente quando utilizo valores numéricos, a "font" Courier. garante que os números ficarão alinhados verticalmente nas colunas. Entretanto, estou com um probleminha ao gerar PDF e suponho que este problema esteja relacionado ao tipo de "FONT". Quero usar outra "FONT". Alguém poderia indicar uma fonte de aparência profissional que alinhe números e letras verticalmente nas colunas igualmente a Courier faz?
-
Saudações.
Estou com um probleminha: sempre que vou acessar o forum tenho que resetar minha senha.
Na tela de login diz que não existe um usuário relacionado ao meu email mas quando clico em esqueci minha senha, abro o email enviado por vocês, reseto a senha e entra. Etretanto, seu eu sair do forum já não faz login mais.
Pode me ajudar?
-
A vantagem das variáveis do tipo STATIC é que elas funcionam como PUBLIC mas somente dentro do PRG onde ela foi declarada. Após encerrar o PRG onde as STATIC´s foram declaradas, essas variáveis não ficam mais acessíveis. Entretanto, se seu código chamar novamente o PRG onde a variável foi declarada, ela pode novamente ser lida, inclusive contendo o último valor que possuía após encerrar o PRG. Uso pouco as variáveis do tipo STATIC mas são bem úteis quando preciso armazenar um valor pra ser lido posteriormente no PRG onde a variável foi declarada.
-
Uso as variáveis muito bem classificadas. Todas STATIC ou LOCAL. Se tiver alguma PRIVATE é por mero esquecimento de declarar como LOCAL. Fiz alguns testes com samples do fivewin e noto que essa alocação de memória contínua se repete em todos executáveis. Em resumo: o tamanho de memória utilizada mostrado no gerenciador de processos do windows só aumenta. Nunca diminui. Em relação à sugestão do Kapaiaba em chamar a função HB_GCALL() para esvaziar a memória, apesar de ser teoricamente ideal, não funciona. O o método End() já chama essa função toda vez que uma dialog é fechada pelo método "oDialog:End()". B_GCALL libera blocos de memória não usados pelo EXE, porém, o que parece estar acontecendo é que esses blocos não estão sendo marcados como LIXO para que a função HB_GCALL limpe. E agora? O que fazer?
-
O que sugere é chamar a função: HB_GCALL(.T.) ao encerrar uma rotina e retornar ao MAIN Fladimir? Testei em alguns módulos aqui mas não diminui o uso da memória. Toda vez que entro numa rotina e encerro, o uso de memória aumenta mesmo chamando HB_GCALL(.T.)
-
Olá nobres colegas, Através do gerenciador de processos do windows, notei que meu EXECUTÁVEL aumenta o uso de memória quando abro uma dialog ou chamo qualquer função do sistema, o que é perfeitamente aceitável, entretanto, notei que ao fechar a dialog ou encerrar a função, a quantidade de memória usada não diminui. Resultado: Após alguns minutos de "abre e fecha" dialogs no meu sistema, o uso da memória alcança valores bem altos. Minha pergunta é: Além de encerrar os controles e dialogs usando o método :End(), existe alguma função ou comando que preciso chamar pra limpar a memória liberando o espaço utilizado pela rotina que está sendo encerrada? Agradeço antecipadamente.
-
Olá nobres colegas... Alguém possuiu uma rotina para recebimento de email com xharbour / fivewin que esteja funcional? Aguardo respostas... Agradeço antecipadamente.
-
Apenas arredonda os cantos das abas do FOLDER
-
Não tem nada de especial no código, apenas um REDEFINE super normal. Mas vou seguir sua sugestão... REDEFINE FOLDEREX aSistCtrl[ SIST_FOLDER ] ID 101 OF aSistCtrl[ SIST_DIALOG ] PROMPT "&Empresa", "&Geral", "&Contrato", "&Doc´s Financeiros", "&Aulas Práticas", "&Pesquisa CEP", "E-mail", "SMS" DIALOGS "Fld_SistConfig1", "Fld_SistConfig2", "Fld_SistConfig3", "Fld_SistConfig4", "Fld_SistConfig5", "Fld_SistConfig6", "Fld_SistConfig7", "Fld_SistConfig8" ROUND 5 O folder é criado com a linha acima. O resto é praxe. Mas sei que deve ser algum problema no folder pois em várias partes do sistema onde uso o recuso FOLDEREX e chamo um enable ou disable para qualquer controle que tenha no folderex o problema ocorre.
-
Estou fazendo uns testes com FOLDEREX. O Folder criado com esta classe funciona muito bem. Entretanto, quando habilito ou desabilito um controle numa guia do folder, a parte debaixo deste controle que recebeu o Enable() ou Disable() simplesmente desaparece. É desenhado um retângulo em branco abaixo do controle. Somente quando mudo de guia e volto na anterior é que a guia "danificada" volta ao normal. Alguém teve este mesmo problema? Alguma sugestões para correção? Agradeço antecipadamente.
-
Há neste fórum e em outros mais, diversas postagens sobre envio de SMS. Gostaria de abrir aqui um tópico para debate recente do uso desta tecnologia que apesar de ser antiga, ainda é muito utilizada. Tenho necessidade de implementar este recurso. 1 - Códigos: classes, métodos e funções ; 2 - Qual hardaware usar ; 3 - Qual melhor provedor ou pacote de serviços. Agradeço antecipadamente.
-
Há algum, tempo li neste Fórum algo relacionado a biometria. Atualmente preciso utilizar. Quem poderia me dar "o caminho das pedras" relacionado a ler impressão digital em leitor biométrico?