Jump to content
Fivewin Brasil

Ale SB

Membros
  • Posts

    1,653
  • Joined

  • Last visited

  • Days Won

    6

Posts posted by Ale SB

  1. Blz Galera....

    Poderiam indicar-me um Host confiável(bom) e com preços acessíveis(barato).

    Eh coisa simples q eu kero...pelo menos no minimo:

    5 Ct de eMail's

    10 Gb de espaço

    2 bancos Mysql

    Ja vi muita gente ( no Google) recomendando o HostGater...mas, tb vi algumas reclamaçoes.( acredito q todos tem reclamaçoes).

    @braços Ale

  2. Galera, qual o comando que simula o <botão> Exportar a PDF pois não está gravando o LOGO?

    Obg. abs.

    Blz Kapi...
    Como te passei ontem eh isso aki...ele exporta direto sem abrir a Cx d Exportaçao.
    Se o Logo nao esta exportando verifique o caminho.
      oFrPrn:SetProperty("PDFExport","FileName", "teste.pdf")  //--> Cria o nome e caminha do Pdf.
      oFrPrn:SetProperty("PDFExport","ShowDialog", .f.)  //--> (.f.) Nao abre a Cx de Dialog de Exportaçao.
      oFrPrn:SetProperty("PDFExport","OpenAfterExport",  .f. )  //--> (.f.) Nao abre o Pdf direto.
      oFrPrn:PrepareReport()  //--> Cria o Relatorio.
      oFrPrn:DoExport("PDFExport")  //--> exporta como PDF.
    
    @braços Ale
  3. Bom... vou dar um pitaco tb...

    A nossa realidade eh diferente de alguns anos atrás, acredito que muita gente espera os topicos para decidir ( como o Marca ja disse acima )....mas eu lhes pergunto !

    O que tem de novo para ser apresentado ?

    Há algo realmente interessante que valha o investimento para participar de um congresso desse porte.

    Há +- 5 ou 6 anos tinhamos a SqlLib ( muitos ainda nao haviam migrado para SQL, diferente de hoje ), tivemos xDev (uma plataforma bem interessante e desenvolvida pelo Vaiton, ja com seu nome consagrado aqui no forum...eh claro que valia a pena ver ela), tivemos a integraçao do ECF com Fw ( como o Alex apresentou, acho que mais de uma vez ), a FastReport ( debuiada pelo Evandro e que nos deu a honra de apresentar em detalhes. ) e sem falar que era uma epoca ainda do FW com telas mais simples e tivemos a vLib do Vagner dando um visual mais moderno para a Ferramenta.

    Entao, o que temos Hoje ?

    Seria mais facil falar de [x]Harbour do que FW, onde, nao podemos esquecer que Fw eh apenas uma Lib Visual, muita gente espera dela novidades como a de uma Linguagem..algo revolucionario ( Web, Tablets, Celulares , Palms )...isso nao vai acontecer!

    Pode ate ser apresentado uma faisca para esses equipamentos, mas, sabemos que [x]hb+Fw nao eh um linguagem desenvolvida para esta finalidade e mesmo com muita gente se esforçando para conseguir isso, como rodar em Android, estamos "Anos Luz" atrasados em comparaçao com linguagens preparadas para rodar neste OS.

    Sem desmerecer quem assume a organizar o Congresso( que nao eh uma tarefa facil )....mas...tb nao pode cobrar presença, pressionar ( como a Cacau fez ), sem nos dar algo que realmente seja motivador.

    Para finalizar, sobram duas alternativas;

    Fazer o Congresso, com novidades, topicos interessantes e com pouca enfase aqui no forum;

    ou promover o Encontro, onde muita gente vai para se distrair fazer amizades e assistir algumas palestra de temas rotineiros.

    Ps1.: Mantenho minha opniao e experiencia, nos encontros que participei, aprendi mais e fiz otimas amizades/parcerias, fora de algumas palestras batendo papo ou no Happy hour do que dentro de uma sala olhando para Slides.

    Ps2.: Concordo com o Marcelao (Marca), estamos mais fracos e perdendo muita gente boa.

    @braços Ale

  4. Muito boa essa classe alterada heim!

    Você a comercializa?

    Cara eh boa sim, ....

    nao vou te falar q ela seja merecedora do Premio Nobel, mas, tem muita coisa nela que eu sempre quis ter de forma automatica no sistema e no desenvolvimento.

    Cara a classe nao cormecializo nao, somente o suporte...pq algumas coisas sao personalizadas para minhas necessidades.

    Para vc usar ai, talvez precise de alguns ajustes para sua necessidade e compatibilidade de suas ferramentas, coisa simples, mas sempre necessarias ate para ganhar tempo.

    qq coisa entra em contato:

    Skype: ale.seribeli ( nao fico conectado o dia Todo)

    email: aleseribeli@hotmail.com ( verifico os emails diariamente )

    WhatsApp : 67-9147-3920 (24 horas p/dia, quando a Claro ta com boa vontade de sinal.)

    @braçao Ale

  5. Ah e no caso dos browses/listbox, eu trabalhava com array, mudei tudo para temp( nos testes descobri q eh mais rapido)

    Abro o banco filtro se precisar e carrego tudo para o temp, fecho o banco e pronto...pode dar pau no terminal pode esquecer aberto o Browse o seu banco ta fechado e guardado.

    *****--- CARREGA TEMP ********************************************************** 
      oDbfClie := ::oDbfClie
      
      if !oDbfClie:dbOpen()
         return .f.
      endif
      
      aEstru := (oDbfClie:cAlias)->( dbStruct() )  
      oDbfClie:dbClose()
      //--> Temporario
      //dbCreate( cFile, aStruct, cRDD, lKeepOpen, cAlias, cDelimArg, cCodePage, nConnection )   
      dbCreate( "mem:tCadaCli", aEstru, "DBFCDX", .T., "tCadaCli" )
      Inde On Upper(sb_TiraAcento(tCadaCli->Nome_Cli)) Tag "Nome_Cli"
      Inde On Upper(sb_TiraAcento(tCadaCli->FantaCli)) Tag "FantaCli"
      Inde On tCadaCli->Fone1Cli        Tag "Fone1Cli"
      Inde On tCadaCli->Fone2Cli        Tag "Fone2Cli"
      Inde On tCadaCli->Fone3Cli        Tag "Fone3Cli"
      
      dbSelectArea("tCadaCli")
      ::FiltroTab(1)
      tCadaCli->( dbSetOrder(1) ) //--> Nome
      tCadaCli->( dbGoTop() )
      
      aFiltro := { "Todos Ativos", "Venda Liberada","Venda Travada", "Excluidos", "Todos" }
    
    //----------------------------------------------------------------------------//
    METHOD FiltroTab(oCbx_nAt) CLASS TCliente_sb
      
      local cTagOrd, cScope1, cScope2
      local lFiltro := .t.
      local nOrd
      local oDbfClie, oAds
      
      oDbfClie := ::oDbfClie
     
      if !oDbfClie:dbOpen()
         return
      endif
      oDbfClie:SetIndex()
      
      //--> aFiltro := { "Todos Ativos", "Venda Liberada","Venda Travada", "Excluidos", "Todos" }
      if oCbx_nAt == 1 //--> Todos Clientes que nao sejam Excluidos.
         lFiltro := .f.
          nOrd := 9
         cScope1 := "A"
         cScope2 := "A"
      elseif oCbx_nAt == 2  //--> Todos Clientes Vendas Liberadas que nao sejam Excluidos.
         nOrd := 8          //    (.F.) Vendas Nao Travadas.
         cScope1 := .F.
         cScope2 := .F.
      elseif oCbx_nAt == 3
         nOrd := 8
         cScope1 := .T.
         cScope2 := .T.
      elseif oCbx_nAt == 4
         lFiltro := .f.
          nOrd := 9
         cScope1 := "E"
         cScope2 := "E"
      elseif oCbx_nAt == 5  //--> Todos
         lFiltro := .f.
          nOrd := 9
         cScope1 := "A"
         cScope2 := "E"
      endif
      oDbfClie:SetOrder(nOrd)
      cTagOrd := oDbfClie:cTag
     
      dbSelectArea("tCadaCli")
      tCadaCli->( dbzap() )
     
      oDbfClie:SelectArea()
      oDbfClie:dbGoTop()
     
      #ifdef __SB_ADSCDX__
         oAds := TxAds_sb():New()
         if lFiltro
             oAds:xScopeFilter( cTagOrd, cScope1, cScope2,"Clientes->Flag_Cli == 'A'" )        
          else
             oAds:xScopeIndex(cTagOrd, cScope1, cScope2 )
          endif   
         oAds := nil
      #else
      #endif
      
      do while !oDbfClie:Eof()
         tCadaCli->( dbAppend() )
         for x := 1 to ( oDbfClie:cAlias )->( FCOUNT() ) //oDbfCola:ordKeyCount()      
             tCadaCli->( FieldPut(x, (oDbfClie:cAlias)->(FieldGet(x)) ) )      
         next            
         oDbfClie:dbSkip()
      enddo
      
      oDbfClie:dbClose()
     
      dbSelectArea("tCadaCli")
      dbSetindex("tCadaCli")
      tCadaCli->( dbSetOrder(1) ) //--> Nome
      tCadaCli->( dbGoTop() )
     
    return
    
  6. Eu criei uma baseada na TDataBase, mas tudo atraves de Hash muito mais pratico e rapido do q array, hoje trabalho com DBF/ADS mas na linha do Sql, os bancos ficam fechados, soh eh aberto para carregar as variaveis e para gravaçoes, abre e fecha.
    Qq alteraçao nos registros, a classe verifica soh oq houve alteraçao e manda para o banco soh os registros alterados, tudo muito rapido...vc ganha tempo e segurança trabalhando em rede.
    
    

    Ale,

    Eu me interessei nessa sua resposta. Trabalho 100% com array com os meus DBF/CDX e gostaria de mudar para Hash.

    Se eu entendi bem, você disse que abre e fecha o banco somente nos momentos exatos de ler e gravar. Nesse caso, como você faz para travar o registro que está sendo modificado para que outros não o alterem na rede?

    Aguardo, obrigado.

    Oscar

    Blz Oscar,

    Bom na questao da Alteraçao vai depender do modulo, qualquer registro que eu tenha q travar eu defino no prg, se eu quero travar ele soh no momento da gravaçao dos dados ou quando abre o registro na tela( que eu acho inviável este ultimo caso).

    Se vc travar quando abrir o registro o usuario pode ir la tomar um cafezinho e por certo ninguem vai poder alterar nada.

    Entao prefiro travar na hora de salvar, a classe eh rapida entao mesmo q os dois ou mais estejam alterando o mesmo registro, nao da problema ja testei alterando dois registros apertando o botao de salvar ao mesmo tempo, foi de boa...oq manda neste caso e a maquina, a mais rapida faz a alteraçao 1º.

    O objetivo da classe e dar agilidade nos processos de gravaçao, 1º eu verifico quais os dados que foram alterados e depois mando gravar, com isso vc ja ganha muito tempo, assim, se tornando um processo rapido. Se vc tem um registro com 50 campos e o cara altera soh 01 campo, a classe identifica e grava soh a alteraçao de um campo ( mais rapido do que gravar os 50 neh), sem falar q pode acontecer de outro usuario estar alterando tb 1 campo, mas diferente, vc nao interfere na informaçao.

    Agora os dois estar alterando ao mesmo tempo, o mesmo campo eh dificil de acontecer, mas, pode acontecer ai vc tem q ter uma funçao para estes casos, por exemplo de uma venda os dois podem alterar o mesmo campo de estoque, ai o correto seria ter uma funçao informando o usuario q outra venda esta sendo realizada, se o produto tiver soh 01 em estoque, ai eh o vendedor mais experto q ganha a comissao..ehheheh....+- por ai.

    voltando para classe, seria +- isso :

    Inclusao/Novo registro:

    - Entro com os dados no buffers;

    - Salvo :

    --> Abro o banco

    --> A classe ja gera um codigo automatico e grava no registro( pronto aquele Registro eh meu, nao corro o risco de duplicaçao de codigo )

    --> Travo e mando salvar os outros campos;

    --> A classe salva faz o commit, destravo e ja fecho o banco.

    Alteraçao/ediçao do registro

    -Apos a Ediçao, mando salvar

    - A Classe:

    --> Compara os campos do registro que estao no Buffers com os do hash que eu ja carreguei na hora de abrir o registro.

    --> se houve alteraçao a propria classe tem uma dialog q informa para o usuario oq esta sendo alterado e ele decide oq fazer.

    fe2u.png

    ylb9.png

    --> Caso seja Confirmar a alteraçao,

    --> A Classe Grava um log sobre as alteraçoes (automatico)

    *** --Cliente.log

    Código: 000020
    Bairro : Centro ==> Alterado Por ==> jardim monte libano
    Fone 3 :  ==> Alterado Por ==> 1899999999
    Nome : Ana Paula Gomes Bertagnolli ==> Alterado Por ==> Teste log
    Usuário: USERMASTER - IP: 192.168.1.3 - Terminal: DEMOLIDOR
    Alterações Efetuadas em: 26/03/2014 às 10:24:45
    ====================================================================================================
    Código: 000001
    Ender. : Rua Evandro B. Calvoso ==> Alterado Por ==> Rua Evandro B. Calvo
    Nome : Edna Lopes Batalha ==> Alterado Por ==> Alessandro Batalha
    Usuário: USERMASTER - IP: 192.168.1.3 - Terminal: DEMOLIDOR
    Alterações Efetuadas em: 26/03/2014 às 10:24:01
    ====================================================================================================
    
    
    --> Abro o Banco, dou um seek, travo, a classe salva e da o commit, destravo e fecho o BD.
    Eh +- por ai...este eh a parte de gravaçao do meu Prg.
    //----------------------------------------------------------------------------//
    METHOD SalvaReg(nCodIni, lMsg) CLASS TCliente_sb
     
      local cRet, cModulo
      local vTarefa := "I"
      
      DEFAULT lMsg := .T.  //--> Envia as mensagens de Alteraçao.
      
      //--> cRet ==> (N) - Nao há Modificaçoes.
      //             (A) - Alterar, Salva as Novas Informaçoes.
      //             (C) - Cancelar, Cancela as Informaçoes Digitadas.
      //             (R) - Retornar, retorna a tela de Edição, ainda com as Informaçoes Digitadas.
      
      //--> Ediçao Novo Registro, Se _nCodIn for # do Codigo Digitado eh uma Alteração.
      //--> Este procedimento soh ocorre depois do Codigo ja estar validado e o
      //    Usuario estiver tentando Salvar o Registro.
     
      if nCodIni != Val(::oDbfClie:Codi_Cli)
         cRet := ::oDbfClie:hsChange(lMsg)
         if !lMsg
            cRet := "A"
         endif
         if ( cRet == "N" .or. cRet == "C" )
            return .t.
         elseif cRet == "R"
            return .f.
         elseif cRet == "A"
            //--> Grava em um Arquivo de Texto as Alteraçoes.
            hb_FNameSplit( ProcFile(0),, @cModulo ) 
            ::oDbfClie:hsChangeLog( cModulo, "Codi_Cli", oVar:cUsuario )
            //--> Grava apenas as Modificaçoes.
            vTarefa := "A"
         endif
      endif
     
      if !::oDbfClie:dbOpen()
         return .f.
      endif
       
      ::oDbfClie:SetIndex()  //--> default SetOrder 1
       
      if vTarefa == "I"    
          ::oDbfClie:GenCodeRec()  && Tem q vir antes do Append, Gera codigo.    
          ::oDbfClie:Append()    
          if ::oDbfClie:NetError()
             ::oDbfClie:dbClose() 
             return .f.
          endif    
          ::oDbfClie:FieldPut("Codi_Cli")
          ::oDbfClie:Flag_Cli := "A"  //--> Ativo    
         ::oDbfClie:UsuarCli := oVar:cCodUser
         ::oDbfClie:Data_Cli := Date()
          ::oDbfClie:Hora_Cli := Time()
      endif
       
      if vTarefa == "A"    
         ::oDbfClie:dbSeek(::oDbfClie:Codi_Cli)
      endif
          
      if ::oDbfClie:()
          ::oDbfClie:SaveBuf()
          ::oDbfClie:dbRUnLock()
      else
         ::oDbfClie:dbClose() 
         return .f.
      endif
      
      ::oDbfClie:dbClose()
      
      if (nCodIni != Val(::oDbfClie:Codi_Cli)) .and. vTarefa == "I"
         MsgInfo( "Novo Código Gerado: " + ::oDbfClie:Codi_Cli, "..:: Atenção ::..")
      endif
      
    return .t.
    
  7. Blz Joao;

    Cara o melhor seria neste caso vc criar uma classe para fazer tudo automatico.

    Eu criei uma baseada na TDataBase, mas tudo atraves de Hash muito mais pratico e rapido do q array, hoje trabalho com DBF/ADS mas na linha do Sql, os bancos ficam fechados, soh eh aberto para carregar as variaveis e para gravaçoes, abre e fecha.

    Qq alteraçao nos registros, a classe verifica soh oq houve alteraçao e manda para o banco soh os registros alterados, tudo muito rapido...vc ganha tempo e segurança trabalhando em rede.

    Mas, vc pode dar uma olhada nesta classe aqui, fazendo algumas pequenas alteraçoes personalizadas, acredito q vc vai conseguir fazer oq quer!

    http://forums.fivetechsupport.com/viewtopic.php?f=3&t=14019&hilit=xdatabase

    @braços Ale

  8. Ale boa tarde,

    te mandei um email pra aleseribeli@hotmail.com. Recebeste? Preciso falar conm você.

    Obrigado e desculpe entrar no tópico para falar de algo que não tem a ver com o assunto.

    Oi kleber blz...recebi sim

    Hoje o dia foi corrido, vi o email agora....vou providenciar para vc e envio no teu email...ok

    Tb ja te add no skype o meu eh : ale.seribeli

    @braços Ale

  9. Valeu!!

    Ops, Ale isto vem automático quando eu digitar GO.BAT? Acho que estou começando a entender.

    c:\testharb\visualfw.hbp

    APPLICAT.PRG

    CODE.PRG

    DATABASE.PRG

    DEBUG.PRG

    DESIGN.PRG

    INDEX.PRG

    INSPECT.PRG

    MENU.PRG

    OPTIONS.PRG

    PROGRAM.PRG

    PROJECT.PRG

    RECORD.PRG

    REP.PRG

    REPORT.PRG

    RESOURCE.PRG

    TOOLBAR.PRG

    TOOLS.PRG

    VISUAL.PRG

    VISUALFW.RC

    Se bem que nen instalei o HARBOUR ainda... Sexta-Feira, haja preguiça... kkkkkkkkkkkkkkkkkkkk

    go.bat Chama hbmkbc.bat

    o hbmkbc define seus Paths e chama o hbmk2 para compilar seu projeto q esta no visualfw.hbp ( q nada mais seria uma arquivo de Lote com a extençao .hbp )

    http://harbourlanguage.blogspot.com.br/2010/02/using-hbmk2.html

    Ps.: necessariamente nao precisa usar o HbMk2.exe, pode configurar direto...mas... a vantagem eh que ele ja ultiliza os flags padrao / libs /include para seu projeto.

    Nao eh mais facil compilar soh assim:

    hbmk2.exe -gui -comp=bcc -o%BIN_DIR%\%NAME_EXE% %1

    do q

    harbour.exe -n2 test.prg -owin\bcc\obj\ -iD:\dev_Tools\Bcc582\Include -iD:\dev_Tools\Bcc582\Include\dinkumware -id:\dev_Tools\harbour\hb32\include -iD:\dev_Tools\FiveWin\FwH1306\include -undef:.ARCH. -D__PLATFORM__WINDOWS -D__LITTLE_ENDIAN__ -D__ARCH32BIT__

    bcc32.exe -c -q -CP437 -d -O2 -OS -Ov -Oc -Oi -6 -tW -tWM -w -Q -w-sig- -nwin\bcc\obj -ID:\dev_Tools\Bcc582\Include -ID:\dev_Tools\Bcc582\Include\dinkumware -Id:\dev_Tools\harbour\hb32\include -ID:\dev_Tools\FiveWin\FwH1306\include win\bcc\obj\test.c

    ilink32.exe @MeuPrg.lnk -Gn -Tpe -LD:\dev_Tools\Bcc582\Lib;D:\dev_Tools\Bcc582\Lib\PSDK;d:\dev_Tools\harbour\hb32\lib\win\bcc;D:\dev_Tools\FiveWin\FwH1306\lib -aa c0w32.obj win\bcc\obj\test.obj, win\bcc\bin\test.exe, nul, fiveh.lib fivehc.lib hbct.lib hbtip.lib png.lib hbfship.lib hbxpp.lib hbwin.lib xhb.lib psapi.lib Version.lib OleDlg.lib hbextern.lib hbdebug.lib hbvm.lib hbrtl.lib hblang.lib hbcpage.lib gtcgi.lib gtpca.lib gtstd.lib gtwin.lib gtwvt.lib gtgui.lib hbrdd.lib hbuddall.lib hbusrrdd.lib rddntx.lib rddcdx.lib rddnsx.lib rddfpt.lib hbrdd.lib hbhsx.lib hbsix.lib hbmacro.lib hbcplr.lib hbpp.lib hbcommon.lib kernel32.lib user32.lib gdi32.lib advapi32.lib ws2_32.lib winspool.lib comctl32.lib comdlg32.lib shell32.lib uuid.lib ole32.lib oleaut32.lib mpr.lib winmm.lib mapi32.lib imm32.lib msimg32.lib wininet.lib hbpcre.lib hbzlib.lib cw32mt.lib import32.lib, ,

    @braços Ale

  10. Primeiro, Muito obrigado!!

    Segundo: VIXIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII, parece dificil para karamba... assustei...

    Se entendi:

    c:\testharb\go.bat
    \hbmkbc.bat visualfw
    Se eu quiser incluir mais um módulo??
    Crú, crú....

    Dificil onde ?!

    Para um cabra Inteligente como vc, nao vai apanhar de 2 arquivinhos neh?!

    o Bat de Compilaçao ja ta pronto eh soh alterar o Paths d seu Hb + Fw + Bcc ( hbmkbc.bat)

    Go.bat, soh serve pra facilitar sua vida e chamar seu projeto

    VisualFW.hbp eh seus Prg's e Rc/Res

    Cria Kapiaba.hbp e joga os Prg la, pronto!

    onde esta a dificuldade ?!

    qq coisa grita ai a gente vai ajudando...

    @braços Ale

  11. @Joao, meu bravo e grande amigo gaivota (heheheh), já pode testar:

    http://fivewin.com.br/index.php?/files/file/1096-bat-para-harbour-fw-bcc/

    Eu usei o hbmk2.exe, uma poderosa e eficiente ferramenta para gerar os Executaveis em harbour, o meu Bat está redondo com todas libs Adicionais q sua versao do Fw precisa, mas se faltar alguma eh soh add no bat. ( olhe ele com muito Amor e Carinho, nao tem segredo).

    "qq coisa Grita nois"

    Tb tem um exemplo de make com harbour no proprio Fw, na pasta Visual "visualfw.mak".

    Ps.: Rosa eh em homenagem a Nova Torcida organizada do seu Time...heheheh..........

    @braçao meu grande amigo;

    Ale SB

  12. Vixi, e o Liñares quer que eu mude para HARBOUR, para acabar com meus problemas de memoria no FIVE 13.06, não sei nem como compila usando arquivo de lote... E acho que quase ninguém usa o HARBOUR e nem sei se ele compila SSAY.PRG DSAY.PRG... Se bem que uso apenas estas duas classes de terceiros...

    Manda a SSAY.PRG e a DSAY.PRG que eu testo pra ver se compila!

    Outra coisa que não sei... Pode-se usar ORDSCOPE() com HARBOUR? E Indice temporário??

    Pô mais eh claro que pode usar, vc nao ta mundando pra Java nao. 99,99% do q vc usa vai continuar usando...tudo tem compatibilidade.

    Começar do 0 (zero) dá um medão... kkkkkkkkkkkkkkkkk, acho que até as mensagens de erros deve ser diferente... Em suma, acho que eu to <Aferrado> né <Aferra>?? kkkkkkkkkkkkkkkk

    abs,

    Medo, vc tem q sentir qdo o tricolor pega seu Time..hehehe.

    Vou Montar um esquema aki pra vc Compilar...e qq coisa pelo Forum/Skype a gente vai consertanto algum erro q possa acontecer..ok!

    @braços Ale

  13. Blz Theo;

    Olha em algumas versões antigas do FW, o BTNBMP dava este problema mesmo, já nas versões mais recentes esse calculo de posicionamento já foi resolvido.

    Mas estou junto com o Oscar, acho q o BUTTONBP mais funcional e mesmo nas versoes antigas funciona Blzinha, tem bastante exemplo no samples dele.

    @braços Ale

  14. Ola Amigo;

    Add esta funçao no seu main.prg

    *******************************************************************************
    function IsAppThemed()  //--> Correção de Transparencia no FW.
    *******************************************************************************
    return( .f. )
    

    e veja se sua Dialog esta

    oDlg:lTransparent := .f.

    ...ok.

    @braços Ale

  15. Ola Zeca,

    Veja se Isso Ajuda.....Esta Funçao vai fazer a conversão Automática.....

    ....a Funçao eh simples, se quiser melhorar fique a vontade:

     
    local cData := Space(10)
    .
    .
         REDEFINE GET oGet[02] VAR cData ID 22 OF oDlg PICTURE "9999999999"
                      oGet[02]:bValid := {|lRet| lRet := Data_Auto(@cData), ;
                                                     if( lRet, nil, ;
                                                                  (cData := Space(10)) ), oGet[02]:Refresh(),  ;
                                                              lRet }
    .
    .
    .
    Return
     
    
    function Data_Auto(_cData)
      
      local cDia_Mes, cAno
      
      if Len(AllTrim(_cData)) == 1 .or. Len(AllTrim(_cData)) == 2
         _cData := StrZero(Val(_cData),2) + "/" + StrZero(Month(Date()),2) + "/" + StrZero(Year(Date()),4)
      elseif Len(AllTrim(_cData)) == 4    
          _cData := Stuff(AllTrim(_cData),3,2,"") + "/" + Stuff(Alltrim(_cData), 1, 2, "" ) + "/" + StrZero(Year(Date()),4)
      elseif Len(AllTrim(_cData)) == 6
            cDia_Mes := Stuff(AllTrim(_cData),5,2,"")
            cDia_Mes := stuff(cDia_Mes,3,0,"/")
          _cData := DtoC(ctod(cDia_Mes + "/" + Str(Val(Stuff(Alltrim(_cData), 1, 4, "" )),4)))
      elseif Len(AllTrim(_cData)) == 8
          cDia_Mes := Stuff(AllTrim(_cData),5,4,"")
            cDia_Mes := Stuff(cDia_Mes,3,0,"/")
            cAno := Stuff(AllTrim(_cData),1,4,"/")
          _cData := cDia_Mes + cAno
      else
         MsgInfo("Erro no Campo Data, Verifique a Data Digitada!","...Atenção..")
         return .f.
      endif
      
    return .t.
    
    

    @braços Ale

  16. Selecionar o Caminho Direto ?

    facil....

      PRIVATE cDirPdf   := Curdrive() + ":\" + CurDir() + "\Pdf" 
      oFrPrn:SetProperty("PDFExport","FileName", "&cDirPdf\" + oDbfCota_Cab:ProtoCtc + ".pdf")
    

    Meu grande Amigo Corintiano, seria um Enorme prazer em revê-los..mas..não poderei ir...acabou ficando muito em cima...e estou com outra Viagem marcada para esta data...uma pena...mas...vamos nos esforçar para o proximo ano dar certo...e oq nao bebemos neste...acumularemos para o proximo........abraçao..e Parabens pela iniciativa....

    @braços Ale

  17. ...tem q por a mao na massa e ser firme..."vai ser assim, assado e pronto, kem ker bem, kem nao ker...."

    @braços Ale

    Ja me chamaram no Skype, p/ questionar se nao eh meio Anti Democratico, desta forma q experessei....

    soh para deixar mais claro, o que eu quiz dizer eh q se deve...fazer as coisas ate onde o Braço do(s) organizador(es) aguenta(m)....se for dar ouvido a tudo q pedem nao sai nada...q eh exatamente oq esta acontecendo...

    Antigamente era assim, os organizadores se reuniam deternimava oq era possivel fazer e apresentavam para a galera e funcionava...

    @braços Ale

  18. Disse tudo Joao, precisamos resgatar as origens.

    Nao pode ficar nesta d tudo mundo querer ajudar, com Enquete..kkkk...

    tem q por a mao na massa e ser firme..."vai ser assim, assado e pronto, kem ker bem, kem nao ker...."

    Ja teve encontro de ate 20 pessoas...pq agora kerer fazer Mega Evento, q nao sai do papel.

    E pra finalizar....ficar discutindo se vai aceitar ou nao inscriçao no dia ? fechar o periodo de inscriçao ? TA DE BRINCADEIRA NEH !?...KKKK

    Ps.:

    @Valdir, Manda Brasa do seu jeito cara, q tava legal, vc tava no rumo...nos sapos joga Sal..rssss.

    @braços Ale

  19. Concordo com o Gilmer.......

    .......

    Ainda sou do tempo, que prefiro 1.000.000 de vezes, o modo como o Vagner Wirts fazia, reunia a galera na padoca ou em um bar.

    Tempos bons, conheci gente boa pra caramba... ou não.

    obg. abs.

    Concordo em Numero, genero e grau...Foram os melhores e mais produtivos....

    Hoje o pessoal ker inventar D+..e acaba nisso....nao havendo nada........."muito sapo em volta da mesa!"

    @braços Ale

  20. Colega; 

     

     Usa o SysWait neste caso, q funciona...( eu mesmo testei e atualiza certinho)...

     

    function somac()  
        for i =1 to 10 
    ************* atualiza contador ************            
            mcontaa=val(mcontaa)+1            
             mcontaa=strzero(mcontaa,7)            
             ocontaa:refresh() 
           SysWait()
            //msgalert("contando: "+mcontaa)
    ******************************************** 
        next 
        oDlg5:end() 
        return nil
     
    

     

    @braços Ale

×
×
  • Create New...