Clipper On Line • Ver Tópico - Dúvida, box com opção de escolha Sim ou Não

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

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

Moderador: Moderadores

 

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

Mensagempor porter » 12 Mai 2017 18:33

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 ?

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" )
porter
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1024
Data de registro: 10 Dez 2009 15:44
Cidade/Estado: OLIMPIA-SP
Curtiu: 3 vezes
Mens.Curtidas: 23 vezes

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

Mensagempor JoséQuintas » 12 Mai 2017 20:15

"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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

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

Mensagempor acelconsultoria » 13 Mai 2017 12:01

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


// 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
-------------------------------------------------------
Avatar de usuário

acelconsultoria
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 231
Data de registro: 10 Jan 2006 16:05
Cidade/Estado: Itápolis-SP
Curtiu: 6 vezes
Mens.Curtidas: 6 vezes

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

Mensagempor porter » 13 Mai 2017 13:54

obrigado Sr Quintas e Maickon.
Maickon, com esse exemplo consegui fazer, obrigado.
porter
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1024
Data de registro: 10 Dez 2009 15:44
Cidade/Estado: OLIMPIA-SP
Curtiu: 3 vezes
Mens.Curtidas: 23 vezes

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

Mensagempor porter » 26 Mai 2017 15:06

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)
porter
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1024
Data de registro: 10 Dez 2009 15:44
Cidade/Estado: OLIMPIA-SP
Curtiu: 3 vezes
Mens.Curtidas: 23 vezes

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

Mensagempor acelconsultoria » 26 Mai 2017 16:56

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".
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
-------------------------------------------------------
Avatar de usuário

acelconsultoria
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 231
Data de registro: 10 Jan 2006 16:05
Cidade/Estado: Itápolis-SP
Curtiu: 6 vezes
Mens.Curtidas: 6 vezes

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

Mensagempor porter » 26 Mai 2017 18:20

Olá Maickon,
Show de bola, obrigado.
porter
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1024
Data de registro: 10 Dez 2009 15:44
Cidade/Estado: OLIMPIA-SP
Curtiu: 3 vezes
Mens.Curtidas: 23 vezes

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

Mensagempor porter » 06 Jun 2017 13:32

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 ?

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:
IF PERGUNTA("Gravar esse registro ? ","Clientes")  =  "NAO"
    .......
ELSE
    .......
    .......
ENDIF


Harbour 3.2.0dev (console)
porter
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1024
Data de registro: 10 Dez 2009 15:44
Cidade/Estado: OLIMPIA-SP
Curtiu: 3 vezes
Mens.Curtidas: 23 vezes

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

Mensagempor acelconsultoria » 06 Jun 2017 14:59

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

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 de usuário

acelconsultoria
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 231
Data de registro: 10 Jan 2006 16:05
Cidade/Estado: Itápolis-SP
Curtiu: 6 vezes
Mens.Curtidas: 6 vezes

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

Mensagempor acelconsultoria » 06 Jun 2017 15:05

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:
If !(Pergunta("Deseja gravar os registros ?", "Clientes"))
   ... // comandos para NÃO
Else
   ... // comandos para SIM
Endif
Adm. Maickon Sato
Consultoria e Projetos
-------------------------------------------------------
Avatar de usuário

acelconsultoria
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 231
Data de registro: 10 Jan 2006 16:05
Cidade/Estado: Itápolis-SP
Curtiu: 6 vezes
Mens.Curtidas: 6 vezes

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

Mensagempor porter » 06 Jun 2017 15:33

Obrigado Maickon por responder,
Para organizar o código as vezes é melhor o Não primeiro e as vezes o Sim, agora deu certo.
porter
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1024
Data de registro: 10 Dez 2009 15:44
Cidade/Estado: OLIMPIA-SP
Curtiu: 3 vezes
Mens.Curtidas: 23 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro