Dúvida, box com opção de escolha Sim ou Não

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Dúvida, box com opção de escolha Sim ou Não

Mensagem por porter »

olá pessoal,
Quero implementar uma caixa com botões com opções Sim e Não, compilei alguns exemplos da pasta
c:\hb32\contrib\gtwvg\tests, tem vários exemplos, mas o que preciso, não encontrei, tem alguma outra
pasta que tenha essa rotina para usar como exemplo, compilei assim:

hbmk2 demowvg.prg
Harbour 3.2.0dev

encontrei essa rotina, pesquisando aqui no fórum, mas da erro de compilação, tentei varias libs mas não da certo,
quais libs terei que usar nesse caso ?

Código: Selecionar todos

IF PERGUNTA("Sair do Sistema ?") = "S"
              EXIT
         ENDIF


FUNCTION PERGUNTA( TEX_TO )
	 LOCAL nButton
	 LOCAL SIM_NAO := 1
	  nButton:= WvW_MessageBox( NIL, chr(13)+chr(10) + TEX_TO ;
	           + chr(13)+chr(10) + chr(13)+chr(10), "Confirmar !!!", 4 + 32 + 4096 )
	 IF ( nButton == 6 )
	    SIM_NAO := 1
	 ELSE
	    SIM_NAO := 2
	 ENDIF   
	 RETURN IIF( SIM_NAO = 1, "S", "N" ) 
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dúvida, box com opção de escolha Sim ou Não

Mensagem por JoséQuintas »

"caixa com botões" de Sim ou não é meio vago.

Compilar o exemplo da gtwvg também é vago.

O fonte apresentado é da gtwvw também é vago.

Quer um Sim ou Não igual do Windows? tá na hbwin é wapi_messagebox()

Quer gtwvg? hbmk2 demowvg.prg gtwvg.hbc

Quer o da gtwvw? hbmk2 fontewvw.prg gtwvw.hbc (se for Harbour 3.4)

Tá usando console? Mensagem em Windows vai ser péssimo, porque vai ficar em janela separada.

Só de equivalentes a Messagebox, a lista é grande, depende da lib que vai usar...
hbmk2 -find messagebox
xhb.hbc (instalado):
- MessageBox()
gtwvg.hbc (instalado):
- wvg_MessageBox()
- wvt_MessageBox()
gtwvw.hbc (instalado):
- wvw_MessageBox()
hbwin.hbc (instalado):
- wapi_MessageBox()
addons\hmg3.hbc (não instalado):
- HMG_MESSAGEBOXTIMEOUT()
- MESSAGEBOXINDIRECT()
- MESSAGEBOXTIMEOUT()
- QHTM_MESSAGEBOX()
addons\hmge.hbc (não instalado):
- MESSAGEBOXINDIRECT()
- MESSAGEBOXTIMEOUT()
- QHTM_MESSAGEBOX()
addons\oohg.hbc (não instalado):
- MESSAGEBOXINDIRECT()
- MESSAGEBOXTIMEOUT()
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
acelconsultoria
Usuário Nível 3
Usuário Nível 3
Mensagens: 231
Registrado em: 10 Jan 2006 17:05
Localização: Itápolis-SP

Dúvida, box com opção de escolha Sim ou Não

Mensagem por acelconsultoria »

Bom dia,
porter escreveu:encontrei essa rotina, pesquisando aqui no fórum, mas da erro de compilação, tentei varias libs mas não da certo,
quais libs terei que usar nesse caso ?
Essa rotina que você encontrou aqui no fórum e postou, utiliza a GTWVW.

No Harbour 3.2, ela se encontra na pasta "extras". No Harbour 3.4 está na "contrib".

Como o Quintas já mencionou, existem várias "libs" com esse recurso de MessageBox, onde você pode escolher como quer os botões. Pode ser em forma de pergunta, com botões "Sim" e "Não", ou em forma de aviso apenas com o botão "Ok".

Código: Selecionar todos


 // Exemplo de AVISO com apenas botão OK - usando a api do Windows
FUNCTION Aviso( cMensagem, cTitulo )
   wapi_MessageBox( wapi_GetActiveWindow(), cMensagem, hb_defaultValue( cTitulo, "Info" ), WIN_MB_OK + WIN_MB_ICONINFORMATION + WIN_MB_SYSTEMMODAL )
RETURN .T.

// Exemplo de PERGUNTA, com botões "Sim" e "Não" - api do Windows
Function Pergunta( cMsg, cTitle )
RETURN wapi_MessageBox( wapi_GetActiveWindow(), cMsg, hb_defaultValue( cTitle, "Confirma ?" ), WIN_MB_YESNO + WIN_MB_ICONQUESTION + WIN_MB_SYSTEMMODAL ) == WIN_IDYES
Adm. Maickon Sato
Consultoria e Projetos
-------------------------------------------------------
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Dúvida, box com opção de escolha Sim ou Não

Mensagem por porter »

obrigado Sr Quintas e Maickon.
Maickon, com esse exemplo consegui fazer, obrigado.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Dúvida, box com opção de escolha Sim ou Não

Mensagem por porter »

olá pessoal,
Estou reabrindo esse tópico para tirar mais uma dúvida, como faço para determinar onde o foco
vai estar posicionado, ao abrir essa api do windows, caixa com opção sim e não.

Function Pergunta( cMsg, cTitle )
#define IDYES 6
#define WIN_MB_YESNO 0x00000004
#define WIN_MB_DEFBUTTON2 0x00000100
#define WIN_MB_ICONQUESTION 0x00000020
#define WIN_MB_SYSTEMMODAL 0x00000020
RETURN wapi_MessageBox( wapi_GetActiveWindow(), cMsg, hb_defaultValue( cTitle, "Confirma ?" ), WIN_MB_YESNO + WIN_MB_ICONQUESTION ) == IDYES

Harbour 3.2.0dev (console)
Avatar do usuário
acelconsultoria
Usuário Nível 3
Usuário Nível 3
Mensagens: 231
Registrado em: 10 Jan 2006 17:05
Localização: Itápolis-SP

Dúvida, box com opção de escolha Sim ou Não

Mensagem por acelconsultoria »

porter escreveu:RETURN wapi_MessageBox( wapi_GetActiveWindow(), cMsg, hb_defaultValue( cTitle, "Confirma ?" ), WIN_MB_YESNO + WIN_MB_ICONQUESTION ) == IDYES
Pode ser acrescentado mais uma flag, direcionando o foco para o botão desejado.
WIN_MB_DEFBUTTON1 == para que o foco fique no primeiro botão
WIN_MB_DEFBUTTON2 == para que o foco fique no segundo botão
... e assim por diante.

Neste exemplo, o foco fica no "Não".

Código: Selecionar todos

wapi_MessageBox( wapi_GetActiveWindow(), cMsg, hb_defaultValue( cTitle, "Confirma ?"), WIN_MB_YESNO + WIN_MB_ICONQUESTION + WIN_MB_DEFBUTTON2 ) == IDYES
Adm. Maickon Sato
Consultoria e Projetos
-------------------------------------------------------
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Dúvida, box com opção de escolha Sim ou Não

Mensagem por porter »

Olá Maickon,
Show de bola, obrigado.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Dúvida, box com opção de escolha Sim ou Não

Mensagem por porter »

Olá pessoal, na rotina abaixo, com API do windows, como faço para saber qual opção foi escolhida, SIM ou NÃO para poder tratá-la ?

Código: Selecionar todos

Function Pergunta( cMsg, cTitle )
#define IDYES               6
#define WIN_MB_YESNO                            0x00000004
#define WIN_MB_DEFBUTTON2                  0x00000100 // para que o foco fique no segundo botão
#define WIN_MB_ICONQUESTION                0x00000020
#define WIN_MB_SYSTEMMODAL                 0x00000020
RETURN wapi_MessageBox( wapi_GetActiveWindow(), cMsg, hb_defaultValue( cTitle, "Confirma ?" ), WIN_MB_YESNO + WIN_MB_ICONQUESTION + WIN_MB_DEFBUTTON2  ) == IDYES 
Gostaria de fazer assim:

Código: Selecionar todos

IF PERGUNTA("Gravar esse registro ? ","Clientes")  =  "NAO"
    .......
ELSE
    .......
    .......
ENDIF
Harbour 3.2.0dev (console)
Avatar do usuário
acelconsultoria
Usuário Nível 3
Usuário Nível 3
Mensagens: 231
Registrado em: 10 Jan 2006 17:05
Localização: Itápolis-SP

Dúvida, box com opção de escolha Sim ou Não

Mensagem por acelconsultoria »

Neste caso, não tem necessidade de colocar "SIM" ou "NÃO" no final da condição IF, pois a função retorna VERDADEIRO ou FALSO.

Código: Selecionar todos

If Pergunta("Confirma gravação dos registros ?", "Clientes")
   ... // comandos, caso seja verdadeiro, ou seja, SIM
Else
   ... // comandos, caso seja falso, ou seja, NÃO
Endif

Agora, se você PRECISA por alguma razão testar o SIM e o NÃO dentro do IF, você pode alterar a função para trabalhar de outra forma (na minha opinião, acho desnecessário, pois teria que digitar códigos a mais, sendo que a lógica é a mesma).

Código: Selecionar todos

Function Pergunta( cMsg, cTitle )  // Função modificada para retornar S, caso seja sim ou N caso seja não, sempre maiúsculo.
Local xResposta = Space(01)
#define IDYES               6
#define WIN_MB_YESNO                            0x00000004
#define WIN_MB_DEFBUTTON2                  0x00000100 // para que o foco fique no segundo botão
#define WIN_MB_ICONQUESTION                0x00000020
#define WIN_MB_SYSTEMMODAL                 0x00000020
If wapi_MessageBox( wapi_GetActiveWindow(), cMsg, hb_defaultValue( cTitle, "Confirma ?" ), WIN_MB_YESNO + WIN_MB_ICONQUESTION + WIN_MB_DEFBUTTON2  ) == IDYES
   xResposta := "S"
Else
   xResposta := "N"
Endif
RETURN xResposta


/// USANDO A FUNÇÃO

If Pergunta("Deseja gravar os registros ?", "Clientes") = "S"
   ... // comandos para SIM
Else
   ... // comandos para NÃO
EndIf
	 

Adm. Maickon Sato
Consultoria e Projetos
-------------------------------------------------------
Avatar do usuário
acelconsultoria
Usuário Nível 3
Usuário Nível 3
Mensagens: 231
Registrado em: 10 Jan 2006 17:05
Localização: Itápolis-SP

Dúvida, box com opção de escolha Sim ou Não

Mensagem por acelconsultoria »

Percebi que talvez você queira primeiro colocar os comandos para o NÃO e em seguida, os comandos do SIM. Você não precisa modificar a função. Basta usar o sinal de "!" antes da função.

Exemplo:

Código: Selecionar todos

If !(Pergunta("Deseja gravar os registros ?", "Clientes"))
   ... // comandos para NÃO
Else
   ... // comandos para SIM
Endif
Adm. Maickon Sato
Consultoria e Projetos
-------------------------------------------------------
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Dúvida, box com opção de escolha Sim ou Não

Mensagem por porter »

Obrigado Maickon por responder,
Para organizar o código as vezes é melhor o Não primeiro e as vezes o Sim, agora deu certo.
Responder