Jump to content
Fivewin Brasil

AcessoSoft

Membros
  • Posts

    36
  • Joined

  • Last visited

Everything posted by AcessoSoft

  1. 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?
  2. Interessante demais este recurso. Parabéns ao(s) idealizadore(s).
  3. /******************************************************************************************* * 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 ) /********************************************************************************************/
  4. 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...
  5. 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()
  6. 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?
  7. 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?
  8. Bem legais essas telas Giovanny. Tenho interesse nestes códigos. Manda pra mim se possível: acessosoft@gmail.com
  9. 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,
  10. Fiz alguns testes aqui e achei uma fonte chamada "Lucida Console".
  11. 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?
  12. 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...
  13. 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?
  14. 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?

  15. 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.
  16. 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?
  17. 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.)
  18. 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.
  19. Olá nobres colegas... Alguém possuiu uma rotina para recebimento de email com xharbour / fivewin que esteja funcional? Aguardo respostas... Agradeço antecipadamente.
  20. Apenas arredonda os cantos das abas do FOLDER
  21. 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.
  22. 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.
  23. 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.
  24. 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?
×
×
  • Create New...