Página 1 de 1

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

Enviado: 12 Mai 2017 18:33
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" ) 

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

Enviado: 12 Mai 2017 20:15
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()

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

Enviado: 13 Mai 2017 12:01
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

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

Enviado: 13 Mai 2017 13:54
por porter
obrigado Sr Quintas e Maickon.
Maickon, com esse exemplo consegui fazer, obrigado.

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

Enviado: 26 Mai 2017 15:06
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)

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

Enviado: 26 Mai 2017 16:56
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

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

Enviado: 26 Mai 2017 18:20
por porter
Olá Maickon,
Show de bola, obrigado.

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

Enviado: 06 Jun 2017 13:32
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)

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

Enviado: 06 Jun 2017 14:59
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
	 


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

Enviado: 06 Jun 2017 15:05
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

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

Enviado: 06 Jun 2017 15:33
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.