Jump to content
Fivewin Brasil

Jmsilva

Membros
  • Posts

    718
  • Joined

  • Last visited

  • Days Won

    14

Posts posted by Jmsilva

  1. 1 hora atrás, Theotokos disse:

    acho que tem que colocar: oGet:Hide()

     

    Obrigado Jovem ! 

    Esta opção oculta o objeto, havia feito e não em lembrava, segue abaixo:

    -Só funciona para classe tget:

    oGet:lDisColors := .F.          //é show tget- mudar cor get when=f
    oGet:nClrTextDis := CLR_HBLUE   //é show tget - mudar cor get when=f

    Na classe TMultiGet não consegui com when = .f., dá para usar readonly sem when = .f., desta forma é possível ajustar a cor

    Resolvido !

  2. Toda classe Dialog, gets, etc vc pode definir a propriedade bKeyDown. Se vc definir f5 no oget:bKeyDown, toda vez que focu estiver no objeto get vai responde ao f5. Se definir no dialog vai responder em qq objeto que estiver no Dialog, tipo setkey(). No exemplos Fivewin vai encontrar vários exemplos.

    oDlg:bKeyDown := {|nKey| Minha_funcao(nKey) }

    Espero ter ajudado!

    JMSILVA 

     

  3. Fiz algo com processamento paralelo e com SqlServer no meu serviço usando o  xbrowse!

    Mas no momento só  tenho exemplo do console que serve como base! não muda muito!

    ELSEIF nKEY > 64 .AND. nKEY < 123 .OR. nKEY == K_F3
             /*processamento em segundo plano*/
             HB_IdleAdd( {|| HB_BackGroundRun() } )
             nTask := HB_BackGroundAdd( {|| temp->(RefreshTB(oTB)) }, 1000 )
             SET BACKGROUND TASKS ON
    
             IF nKEY != K_F3
                KEYBOARD Chr(nKEY)
             ENDIF
    
             cChave := Space(35)
             BOX3DOF(14,16,18,58)
             @ 16,20 GET cChave PICT "@!"
             READ
    
             cChave := Trim(cChave)
             If !Empty(cChave)
                TEMP->(DBSeek(cChave,.T.))
             Endif
    
             HB_BackGroundDel( nTask )
             SET BACKGROUND TASKS OFF
             oTB:RefreshAll()
      else....
      
      
      **----------------------------------------------------------------------
    static Function RefreshTB(oTB) //aqui vc pode carregar com comando sql e refresh no browse 
    **----------------------------------------------------------------------
       Local cTela,oGet:=GetActive()
       Static cLast := ''
    
       If HB_IsObject(oGet) .and. cLast != oGet:buffer
          cTela := SaveScreen(14,16,18,58)   //não mudar ainda
          DBSEEK(oGet:buffer,.T.)
          oTB:RefreshAll()
          oTB:ForceStable()
          Restscreen(14,16,18,58,cTela)
          cLast := oGet:buffer
          oGet:SetFocus()
       Endif
    Return .t.

    Espero que ajude, em caso de dúvida fique a vontade, estamos ai!

    com isto acredito que vc consegue montar sua lógica

    att

    JMSILVA 

  4. #include "FiveWin.ch"
    
    function Main()
    
       local oDlg, oCbx, cDia,cGet:=Space(10),cGet1:=Space(10)
    
       DEFINE DIALOG oDlg
       @ 1,3 get cGet of oDlg size 20,12
    
       @ 2, 3 COMBOBOX oCbx VAR cDia OF oDlg SIZE 100, 300 ;
          ITEMS { "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domimgo" } ;
          STYLE CBS_DROPDOWN
    
       oCbx:oGet:bKeyChar := {|nKey| oCbx:GetKeyChar( nKey ) }
       oCbx:bGotFocus     := {|| oCbx:Open()}
       oCbx:bLostFocus    := {|| oCbx:Close()}
    
       @ 3.6,3 get cGet1 of oDlg size 20,12
    
       ACTIVATE DIALOG oDlg CENTERED
    
    return nil

    Kapi !

    Desculpa a demora. O dia foi puxado!

    Segue um exemplo para vcs !

    abraço!

  5. Em 22/10/2022 at 11:35, CIACPD disse:

    Bom dia Colega,

    Não sei se é isto, mas...

    
    CREATE TABLE `products` (
      `ID` INTEGER(11) NOT NULL AUTO_INCREMENT,
      `CESTA` CHAR(2),
      `ITENS` CHAR(2),
      PRIMARY KEY (`ID`))ENGINE=InnoDB;
      
    COMMIT;
    
    INSERT INTO products ( CESTA , ITENS ) VALUES( 'C1' , 'I1' );
    INSERT INTO products ( CESTA , ITENS ) VALUES( 'C2' , 'I2' );
    INSERT INTO products ( CESTA , ITENS ) VALUES( 'C3' , 'I3' );
    INSERT INTO products ( CESTA , ITENS ) VALUES( 'C4' , 'I4' );
    INSERT INTO products ( CESTA , ITENS ) VALUES( 'C5' , 'I5' );
    
    COMMIT;
    
    INSERT INTO products ( CESTA , ITENS ) VALUES( 'C1' , 'I2' );
    INSERT INTO products ( CESTA , ITENS ) VALUES( 'C1' , 'I3' );
    INSERT INTO products ( CESTA , ITENS ) VALUES( 'C2' , 'I3' );
    INSERT INTO products ( CESTA , ITENS ) VALUES( 'C2' , 'I4' );
    
    COMMIT;
    
    INSERT INTO products ( CESTA , ITENS ) VALUES( 'I1' , 'I2' );
    INSERT INTO products ( CESTA , ITENS ) VALUES( 'I1' , 'I3' );
    INSERT INTO products ( CESTA , ITENS ) VALUES( 'I2' , 'C3' );
    INSERT INTO products ( CESTA , ITENS ) VALUES( 'I2' , 'C4' );
    
    INSERT INTO products ( CESTA , ITENS ) VALUES( 'C2' , 'C3' );
    INSERT INTO products ( CESTA , ITENS ) VALUES( 'C2' , 'C4' );
    
    COMMIT;
    
    SELECT * FROM products WHERE CESTA LIKE 'I%'
    UNION ALL
    SELECT * FROM products WHERE ITENS LIKE 'C%' ;

    Daniel Segura

    Obrigado Daniel, pela resposta! 

    Após pesquisa consegui montar o comando sql que precisava ficou  assim:

    SELECT a.cesta, a.itens FROM products AS a WHERE EXISTS

    (SELECT b.cesta, b.itens  FROM products AS b WHERE b.cesta !=  b.itens AND a.cesta = b.itens  AND a.itens = b.cesta) ;

    Valeu!

    Objetivo é eliminar registros inválidos após importação dos dados.

  6. Em uma tabela "products" com os campos 'id', 'cesta' e 'Itens', como montar um comando SQL para fazer uma análise em 'X'  e descobrir  os códigos invertidos.

    id        cesta     itens

    1         C1          I1 

    2         C1          I2

    3        I1          C1

    Resultado:  Id 1 e 3

    Grato!

    JMSILVA

           

  7. 4 horas atrás, alex2002 disse:

    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

    O Exemplo peguei do Fivewin, no caso exibe um menu, vc pode sim implementar e fazer o que vc desejar, acrescentado na sua rotina timer,  ele fica monitorando, em um intervalo de tempo desejado,  por exemplo, uma versão nova no servidor ou qq outra informação e se desejar, além da notificação, poderá exibir uma tela para tal processamento. 

  8. 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

  9. Diante do exposto, eu faria assim, na matriz após o cadastro, o botão que vc citou faz o insert ou update dos registros novos ou atualizados no servidor on line, vc teria duas conexões uma local outra remota. Há necessidade de campo data para controle da atualização. 

    Nas filiais depende muito das disponibilidade do link, se existir seria o inverso, duas conexões uma lê outra grava.

    Outra opção e ter um app independente para gerar um arquivo com script sql para ser lido nas filiais através de um ftp ou outro meio.

    Existem várias formas como vc sabe, com certeza demais amigos deverá dar outras dicas.

    Blz

     

     

  10. 4 horas atrás, kapiaba disse:

    Very good Edu. Agora, para ficar mais Show(), coloque uma xBrowse() no lugar da wBrowse(), para veres o show() de pelota que é o xBrowse().

    Depois, com mais tempo, teste janelas MDI com MDICHILD, todo o seu sistema fica como se fosse o xDev.exe  do Vailton, usuário ilimitado. Abre, minimiza, abre, minimiza, maximiza, impede abir a mesma janela novamente(parece difícil, mas não é), fecha a que quiser ou só fecha todas as janelas ao sair do programa principal. Só faço programas assim agora. Nada de diálogos FIXOS.

    Abs.

    Regards, saludos.

    Por Kapiaba, gostei da sua expertise! Conheço uso da MDI, mas não pensei da forma e objetivo que vc usou. Eu uso multithread para fazer processamento paralelo, no meu caso funciona bem, apesar do @Emotta dizer que tem problemas.

×
×
  • Create New...