Jump to content
Fivewin Brasil

Condição IIF no MsgItem


Luiz Arruda (ICO)

Recommended Posts

Bom dia Pessoal

 

Como faço uma condição If ser disparada no exemplo abaixo 

 

 

DEFINE MSGITEM oRow OF oWnd:oMsgBar ; 

      PROMPT "Acesso &Acc" SIZE 160 ;

      ACTION  (Listagem(MsgYesNo("Data e Hora em que o Computador foi ligado"+CRLF+CRLF+"Limpar dados ?","..::Dados")))

 

tentei com IIF mas sem sucesso!!

Obrigado...

Link to comment
Share on other sites

Cole e copie para \samples e teste para ver se te ajuda:

 

 

// Testing Bitmaps in the MsgBar - \SAMPLES\TESTMBAR.PRG
 
#include "FiveWin.ch"
 
static oWnd
 
//----------------------------------------------------------------------------//
 
function Main()
 
   local lMail := .t., oBar
 
   local oMsgItem, oMsgItemMail
 
   DEFINE WINDOW oWnd TITLE "Testing MsgBar with bitmaps"
 
   DEFINE BUTTONBAR oBar OF oWnd _3D
 
   @ 10,10 CHECKBOX lMail PROMPT "E-Mail"  OF oWnd ;
           SIZE 200, 35 COLOR CLR_BLACK ;
           ON CHANGE If( ! lMail, oWnd:oMsgBar:DelItem( oMsgItemMail ), ;
                                  oWnd:oMsgBar:InsItem( oMsgItemMail, 2 ) )
 
   SET MESSAGE OF oWnd TO "I may use different bitmaps"
 
   DEFINE MSGITEM oMsgItem OF oWnd:oMsgBar ;
          PROMPT "Lock" ;
          SIZE 60 ;
          BITMAPS "..\bitmaps\16x16\lock.bmp", "..\bitmaps\16x16\unlock.bmp" ;
          ACTION ( oMsgItem:lActive := !oMsgItem:lActive, oMsgItem:Paint() )
 
   DEFINE MSGITEM oMsgItemMail OF oWnd:oMsgBar ;
          SIZE 24 ;
          BITMAPS "..\bitmaps\16x16\MAIL.BMP" ;
          TOOLTIP "Check the email" + CRLF + "Get email"
 
   DEFINE MSGITEM OF oWnd:oMsgBar ;
          BITMAPS "..\bitmaps\16x16\PRINTER.BMP" ;
          ACTION PrinterSetup() ;
          TOOLTIP "Setup the printer"
 
   oWnd:oMsgBar:DateOn()
   oWnd:oMsgBar:ClockOn()
 
   ACTIVATE WINDOW oWnd
 
return nil
 
//----------------------------------------------------------------------------//
Link to comment
Share on other sites

Não é isso baby ..
eu quero simular If MsgYesNo() no Action sem disparar para uma Function
Tipo assim ;

If MsgYesNo("Deseja Sair")
   Quit
Endif

So que executando direto no Action, do mesmo jeito que abre o sim,não

DEFINE MSGITEM oRow OF oWnd:oMsgBar ; 
      PROMPT "Acesso &Acc" SIZE 160 ;
      ACTION  (Listagem(MsgYesNo("Data e Hora em que o Computador foi ligado"+CRLF+CRLF+"Limpar dados ?","..::Dados"))) 

.. será que é possivel ?

 

limpar.png

Link to comment
Share on other sites

Acho que não vai ter jeito mesmo, vou o que eu não queria, disparar para uma function  :( 
mesmo da maneira que o Erciley postou, no lugar das MsgInfo() teno que ir para uma function, e é exactamente isso que eu não queria, minha vontade era executar o delete no click

algo assim ;

DEFINE MSGITEM ABABA OF oWnd:oMsgBar PROMPT " Dados"                  ;
       SIZE 150 BITMAP "..\lembre\question.bmp"                       ;
       ACTION If MsgYesNo("Deseja excluir os dados ?", "..::Dados"))  ;
       Acesso->dbdelete(),.t.,                                        ;
       ToolTip "Dados" Center 

Mas isso nem passa na compilação  :rolleyes:

 

Obrigado a quem respondeu...

Link to comment
Share on other sites

Repicando o repique:

 

Ico, seu erro alí é fechar o ) do IIF antes da condição. Pega esse segundo parenteses, e coloca na linha debaixo:

 

 

 

DEFINE MSGITEM ABABA OF oWnd:oMsgBar PROMPT " Dados" ;
SIZE 150 BITMAP "..\lembre\question.bmp" ;
ACTION If MsgYesNo("Deseja excluir os dados ?", "..::Dados"), Acesso->dbdelete(),.t.) ;
ToolTip "Dados" Center
 
Link to comment
Share on other sites

Repicando o repique:

 

Ico, seu erro alí é fechar o ) do IIF antes da condição. Pega esse segundo parenteses, e coloca na linha debaixo:

 

 

 

DEFINE MSGITEM ABABA OF oWnd:oMsgBar PROMPT " Dados" ;
SIZE 150 BITMAP "..\lembre\question.bmp" ;
ACTION If MsgYesNo("Deseja excluir os dados ?", "..::Dados"), Acesso->dbdelete(),.t.) ;
ToolTip "Dados" Center
 

Nem passou na compilação, com o If mesmo com o endif depois...  :)

Link to comment
Share on other sites

Tente assim, coração:

 

 

 

DEFINE MSGITEM ABABA OF oWnd:oMsgBar PROMPT " Dados" ;
SIZE 150 BITMAP "..\lembre\question.bmp" ;
ACTION If MsgYesNo("Deseja excluir os dados ?", "..::Dados"), Acesso->(dbdelete()),.t.) ;
ToolTip "Dados" Center
 

Note que a diferença está no Acesso->(dbdelete())

 

Testei aqui e compilou.

Link to comment
Share on other sites

Testado.

 

DEFINE MSGITEM ABABA OF oWndEdit:oMsgBar PROMPT " Dados" ;
   SIZE 150 BITMAP "..\BITMAPS\EXIT.BMP" ;
   ACTION If( MsgYesNo("Deseja excluir os dados ?", "..::Dados"), msginfo("Acesso->(dbdelete()),.t.","Atenção") , ) ;
   ToolTip "Dados" Center

 

Troque a função msginfo por sua rotina.

 

Daniel Segura

Link to comment
Share on other sites

Olá,

 

ACTION IF( MsgYesNo("Deseja excluir os dados ?", "..::Dados"), (SeuArquivo->(RLock()),SeuArquivo->(DbDelete()),SeuArquivo->(DbUnlock()), MsgInfo("Não Deleta"))

 

Agora se For mais de um registro :

ACTION IF( MsgYesNo("Deseja excluir os dados ?", "..::Dados"), SueArquivo->(DbEval({||(SeuArquivo->(RLock()),SeuArquivo->(DbDelete()),SeuArquivo->(DbUnlock())}), MsgInfo("Não Deleta"))

Link to comment
Share on other sites

LOCAL bBlock:={|| IF( MSGYESNO('Deseja excluir os dados ?','ATENÇÃO') , (ALIAS->(RLOCK()),ALIAS->(DBDELETE())) , .T. ) }
 
E agora para despoluir o código...... ^^
 
...ACTION EVAL

 

 

Bom dia a todos...

 

A dica que mais se aproximou e não deu erro na compilação foi esta,  tudo funciona perfeitamente, só que não faz o que deveria fazer.... excluir os dados  :)

 

Obrigado..

Link to comment
Share on other sites

Olá Ico,

Verifique "SET DELETED ON"

Abaixo um teste com um pouco de cada dica.

 

#include "FiveWin.ch"

static oWnd, oWndEdit, oItem, ABABA, ;
       aCoors, oFont, oMenu, oMenuitem

static aColors, aFonts
static nColors, nFonts

//----------------------------------------------------------------------------//
function Main()

   Local i:=1

   LOCAL bBlock :={|| IF( MSGYESNO('Deseja excluir os dados ?','ATENÇÃO' ) , ( Clientes->(RLOCK()),Clientes->(DBDELETE()) ) , .T. ) }

   LOCAL bBlock2:={|| IF( MSGYESNO('Deseja excluir os dados ?','ATENÇÃO') , Clientes->(DbEval({||(Clientes->(RLock() ), Clientes->(DbDelete()), Clientes->(DbUnlock()) )})) , .T. ) }

   SET DELETED ON

   aColors := Array( 5 )
   aFonts  := Array( 5 )

   DEFINE FONT aFonts[ 1 ] NAME "Arial"         SIZE 0, 24 BOLD
   DEFINE FONT aFonts[ 2 ] NAME "Ms Sans Serif" SIZE 0,  8 BOLD
   DEFINE FONT aFonts[ 3 ] NAME "Ms Serif"      SIZE 0, 12 BOLD
   DEFINE FONT aFonts[ 4 ] NAME "Arial"         SIZE 0, 12 ITALIC
   DEFINE FONT aFonts[ 5 ] NAME "Ms Sans Serif" SIZE 0,  8

   aColors[ 1 ] = "w+*/r"
   aColors[ 2 ] = "r+/w+*"
   aColors[ 3 ] = "g+/w+*"
   aColors[ 4 ] = "w+*/b"
   aColors[ 5 ] = "b+/w"

   nColors := 1
   nFonts := 1

   SET _3DLOOK ON

   if ! File( "clientes.dbf" )
      DbCreate( "Clientes.dbf", { { "Nombre",    "C", 40, 0 },;
                                  { "Direccion", "C", 50, 0 },;
                                  { "Telefono",  "C", 12, 0 },;
                                  { "Edad",      "N",  2, 0 },;
                                  { "Productos", "C", 10, 0 },;
                                  { "Nivel",     "N",  2, 0 } } )
   endif
   USE Clientes

   IF MSGYESNO('Deseja incluir dados para teste ?','ATENÇÃO')
      for i:=1 to 5
         APPEND BLANK
         Clientes->Nombre     := str(i,1)
         Clientes->Direccion  := str(i,1)
         Clientes->Productos  := str(i,1)
         Clientes->Nivel      := i
         Clientes->Telefono   := str(i,1)
         Clientes->Edad       := i
      next
   endif
   go top

   browse()

   DEFINE WINDOW oWnd FROM 1, 1 TO 20, 70;
      TITLE "FiveWin Teste" MDI

   SET MESSAGE OF oWnd TO "FiveWin" ;
       FONT oFont

   DEFINE MSGITEM ABABA OF oWnd:oMsgBar PROMPT " Dados" ;
          SIZE 150 BITMAP "..\BITMAPS\EXIT.BMP" ;
          ACTION EVAL(bBlock) ;
          ToolTip "Dados" Center

	  //ACTION IF( MsgYesNo("Deseja excluir os dados ?", "..::Dados"), exclui_dados() , MsgInfo("Não Deleta") )  ;
          //ToolTip "Dados" Center

   ACTIVATE WINDOW oWnd MAXIMIZED

   AEval( aFonts, { | oFont | oFont:End() } )

return nil
//----------------------------------------------------------------------------//
static function exclui_dados()

   Clientes->(RLock())
   while ! Clientes->(eof())
      Clientes->(DbDelete())
      Clientes->(DbSkip())
   end
   Clientes->(DbUnlock())
   Clientes->(DbCommit())
return nil

 

Daniel Segura

Link to comment
Share on other sites

Vagner, é a sua opção, apenas montei um exemplo com o teste que eu fiz incluindo a sua dica para que fique mais fácil para quem vier depois.

 

A intenção é ajudar.

 

Quando o nosso amigo falou que não estava excluindo inclui sua dica para ver se havia algum possível erro mesmo sabendo que voce é mestre no assunto.

 

Felicidades Vagner.

 

Daniel Segura

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...