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.