MsgYesNo: Tem como descentralizar ?

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MsgYesNo: Tem como descentralizar ?

Mensagem por asimoes »

A linha 121 está errada no seu hbp

O hbmk2 é executado fora:

ex.:
Criar a bat cl.bat colocar na bat:

hbmk2 SICCA35gt.hbp

Obs.: Este tópico está está saindo e misturando o assunto principal. O ideal é abrir um novo tópico para tirar suas duvidas.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

MsgYesNo: Tem como descentralizar ?

Mensagem por microvolution »

ok, V.Sa. tem razão...
quanto ao assunto que JQuintas começou a abordar
asimoes escreveu:Obs.: Este tópico está está saindo e misturando o assunto principal. O ideal é abrir um novo tópico para tirar suas duvidas.
transferi as minhas dúvidas para o tópico já existente que é de título USAR GTWVG (de autoria do próprio JQuintas).
O link para todos me ajudarem a entender o que o JQuintas passou é:
https://pctoledo.org/forum/viewto ... =4&t=13221

E aqui, vou continuar com as dúvidas ao MSGYESNO... que por enquanto (já havia dito anteriormente) está começando a dar o resultado que esperava, sem a necessidade de mais nada a não ser MSGYESNO ('texto da mensagem','título da janela')...
ABRAÇOS!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

MsgYesNo: Tem como descentralizar ?

Mensagem por microvolution »

olá pessoal, nóisAkiTravies:
assimoes escreveu: escreveu:Uma outra forma de exibir caixa de diálogo usando api do windows.
Bom, estou usando as mensagens que o prezado professor asimoes ensinou, que são as do exemplo por ele postado aqui neste tópico.
Mas, uma dúvida tenho, com "usuários leigos" do aplicativo final:
Assim que necessário no meu e também no sistema de todos, colocamos na tela mensagens para o usuário responder com "SIM/OK", NÃO/CANCEL,e etc...
No nosso antigo clipper essas mensagens estavam grudadas (como um formulário modal) na tela onde apareciam, e, o usuário se abrisse o WinWord e voltasse no sistema estavam lá:
- A tela do cadastro onde parou; e
- A Mensagem aguardando ser respondida.
Acontece que com este tipo de mensagem se o usuário fizer o mesmo procedimento (abrir o Word... etc...) ao voltar para o sistema a mensagem não está grudada ao aplicativo. Ela na verdade está aberta como uma nova seção lá em baixo na barra de ferramentas o usuário descobre-a e clica para responder ao questionamento.

Aí que é o "pobrema"; para nós (bons ou maus programadores) isso é fácil, mas, para o usuário, eles se perdem todo.
Então, existe uma forma da mensagem ser "tipo modal", onde, se o usuário mudar para o "Excel" e voltar ao sistema a tela em que ele parou e sua mensagem ficam juntos?
Não sei se compliquei ou se expliquei,
... mas é essa aí minha dúvida, pois tanto na HMG quanto agora na GTWVG percebo que são o mesmo problema!!!!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

MsgYesNo: Tem como descentralizar ?

Mensagem por Claudio Soto »

Hola a todos, en HMG oficial hace un tiempo que existe:
SET DIALOGBOX POSITION
Sets the Position of the Dialog Boxes in the Screen
(FindTextDialog, GetColor, GetFile, GetFolder, GetFont, MessageBoxTimeout, MsgXXX, PutFile, ReplaceTextDialog, SELECT PRINTER, etc.)

Syntax:

SET DIALOGBOX [ POSITION ] ROW <nRow>|<CodeBlockRow>|<NIL> COL <nCol>|<CodeBlockCol>|<NIL>

SET DIALOGBOX [ POSITION ] CENTER OF PARENT

SET DIALOGBOX [ POSITION ] CENTER OF <hWnd>

SET DIALOGBOX [ POSITION ] CENTER OF DESKTOP

SET DIALOGBOX [ POSITION ] DISABLE

Código: Selecionar todos

#include "hmg.ch"
 
   FUNCTION Main()
 
      DEFINE WINDOW Form_1 ;
         AT 0,0 ;
         WIDTH  300 ;
         HEIGHT 200 ;
         MAIN;
         TITLE "Move This Window"
 
         @ 50,100 BUTTON Button_1 CAPTION "Click Here" ACTION MsgInfo ("Hello")
 
         // These CodeBlock puts the dialog box always in the same Row and Col of Form_1
         cbRow1 := {|| Form_1.Row }
         cbCol1 := {|| Form_1.Col }
 
         // These CodeBlock puts the dialog box always in the same Row and Col of Button_1
         cbRow2 := {|| ClientToScreenRow ( Form_1.HANDLE , Form_1.Button_1.Row ) }
         cbCol2 := {|| ClientToScreenCol ( Form_1.HANDLE , Form_1.Button_1.Col ) }
 
         SET DIALOGBOX ROW cbRow2 COL cbCol2
 
      END WINDOW
 
      CENTER WINDOW Form_1
 
      ACTIVATE WINDOW Form_1
 
   RETURN NIL
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

MsgYesNo: Tem como descentralizar ?

Mensagem por lugab »

Ola amigos...

Aproveito a similaridade do tópíco pra perguntar 2 coisas:

1) tem como mudar o Foco de MsgYesNo() para "Yes" ? Do jeito como foi desenvolvida, o default da Função é "No"

Código: Selecionar todos

#define IDYES       6
#define WIN_MB_YESNO           0x00000004
#define WIN_MB_DEFBUTTON2         0x00000100
#define WIN_MB_ICONQUESTION        0x00000020

FUNCTION MsgYesNo( cText )
 LOCAL lValue
 lValue := wapi_MessageBox( wapi_GetActiveWindow(), cText, "Confirmação", WIN_MB_YESNO + WIN_MB_ICONQUESTION + WIN_MB_DEFBUTTON2 ) == IDYES
 RETURN lValue
2) Tem como Acrescentar um Temporizador em algumas das Funções abaixo , tipo sair da Msg depois de N segundos?

Código: Selecionar todos

FUNCTION MsgExclamation( cText )
 wapi_MessageBox( wapi_GetActiveWindow(), cText, "Atencao", WIN_MB_ICONASTERISK )
 RETURN NIL

FUNCTION MsgWarning( cText )
 wapi_MessageBox( wapi_GetActiveWindow(), cText, "Atencao", WIN_MB_ICONEXCLAMATION )
 RETURN NIL

FUNCTION MsgStop( cText )
 wapi_MessageBox( wapi_GetActiveWindow(), cText, "Atencao", WIN_MB_ICONHAND )
 RETURN NIL
Grato....
lugab
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MsgYesNo: Tem como descentralizar ?

Mensagem por asimoes »

Exemplo de mensagem com timeout

Código: Selecionar todos

MensagemTimeOut("É obrigatório informar o motivo para sócios que entram na classe 10!"+hb_EOL()+;
                              "Os sócios que entram na classe 10 são excluídos de algumas rotinas por ex.:"+hb_EOL()+hb_EOL()+;
                              "Emissão de boletos."+hb_EOL()+;
                              "Emissão de etiquetas."+hb_EOL()+;
                              "Relatório de inadimplentes.", "Atenção", 30000, 2)


FUNCTION MensagemTimeOut( cMensagem, cTitulo, nTempo, nTipo ) 
LOCAL nTypeButton
     
   cMensagem := hb_DefaultValue(cMensagem, "")
   cTitulo   := hb_DefaultValue(cTitulo, "Atenção")
   nTempo    := hb_DefaultValue(nTempo, 10000)
   nTipo     := hb_DefaultValue(nTipo, 1)

   SWITCH nTipo
     CASE 1
        nTypeButton := MB_OK + MB_SYSTEMMODAL + MB_ICONASTERISK //Exclamação
        Exit
     CASE 2
        nTypeButton := MB_OKCANCEL + MB_SYSTEMMODAL + MB_DEFBUTTON2 + MB_ICONASTERISK //Pergunta
        Exit
   END SWITCH

   nRet := HWG_MessageBoxTimeout(cMensagem, cTitulo, nTypeButton, nTempo)

RETURN nRet

#pragma BEGINDUMP

#include "windows.h"
#include "hbapi.h"
#include "time.h"
#include "olectl.h"

int WINAPI MessageBoxTimeout(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType, WORD wLanguageId, DWORD dwMilliseconds) 
{
   typedef BOOL (WINAPI *PMessageBoxTimeout)(HWND,LPCTSTR,LPCTSTR,UINT,WORD,DWORD);
   static PMessageBoxTimeout pMessageBoxTimeout = NULL;
   if (pMessageBoxTimeout == NULL) 
   {
      HMODULE hLib = LoadLibrary ("User32.dll");
      #ifdef UNICODE
         pMessageBoxTimeout = (PMessageBoxTimeout)GetProcAddress(hLib, "MessageBoxTimeoutW");
      #else
         pMessageBoxTimeout = (PMessageBoxTimeout)GetProcAddress(hLib, "MessageBoxTimeoutA");
      #endif
   }
   if(pMessageBoxTimeout == NULL)
      return FALSE;
   return pMessageBoxTimeout(hWnd, lpText, lpCaption, uType, wLanguageId, dwMilliseconds);
}

//       HMG_MessageBoxTimeout (Text, Caption, nTypeButton, nMilliseconds) ---> Return iRetButton
HB_FUNC (HWG_MESSAGEBOXTIMEOUT)
{
   HWND  hWnd           = GetActiveWindow();
   TCHAR *lpText        = hb_parc (1);
   TCHAR *lpCaption     = hb_parc (2);
   UINT  uType          = HB_ISNIL(3) ? MB_OK : (UINT) hb_parnl (3);
   WORD  wLanguageId    = MAKELANGID (LANG_NEUTRAL, SUBLANG_NEUTRAL);
   DWORD dwMilliseconds = HB_ISNIL(4) ? (DWORD)0xFFFFFFFF  : (DWORD) hb_parnl (4);
   int iRet = MessageBoxTimeout (hWnd, lpText, lpCaption, uType, wLanguageId, dwMilliseconds);
   hb_retni ((int) iRet);
}

#pragma ENDDUMP
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MsgYesNo: Tem como descentralizar ?

Mensagem por asimoes »

Botão default:

#include "hbdyn.ch"
#define MB_DEFBUTTON2 0x00000100
#define MB_DEFBUTTON3 0x00000200
#define MB_DEFBUTTON4 0x00000300

Ex.:

Código: Selecionar todos

        nEscolha:=hb_dynCall( { "MessageBoxA", "user32.dll",HB_DYN_CALLCONV_STDCALL},0,cMensagem, "Aviso do Sistema",hb_bitOr( MB_YESNO, MB_ICONASTERISK, MB_DEFBUTTON2 ))
        IF nEscolha = 6
           nEscolha:=1
        ELSEIF nEscolha = 7
           nEscolha:=2
        ENDIF
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MsgYesNo: Tem como descentralizar ?

Mensagem por JoséQuintas »

O que há contra isto?

Código: Selecionar todos

FUNCTION Main()

   SetMode(25,80)
   CLS
   CallDll( "MessageBoxTimeoutA", "user32.dll", wapi_GetActiveWindow(), "Hi", "Yes Or No", MB_YESNO + MB_DEFBUTTON2, 0, 6000 )
   Inkey(0)
   RETURN NIL
timeout.png
timeout.png (12.79 KiB) Exibido 5120 vezes
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/
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

MsgYesNo: Tem como descentralizar ?

Mensagem por lugab »

Obrigado, pessoal...

Asimoes,
No código por vc postado não consta a definição de

Código: Selecionar todos

 hb_DefaultValue()
e aí da erro na compilção..

José Quintas,
Eu compilei e não deu erro, entretanto, na execução não exibiu mensagem nenhuma, apenas contou os 2 segundos do inkey() e prosseguiu

Código: Selecionar todos

#define MB_YESNO          0x00000004
#define MB_DEFBUTTON2       0x00000100
CallDll( "MessageBoxTimeoutA", "user32.dll", wapi_GetActiveWindow(), "Testando Quintas", "Yes Or No", MB_YESNO + MB_DEFBUTTON2, 0, 6000 )
Inkey(2)
Ps: Eu uso o Hb3.0 e Windows 7
lugab
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MsgYesNo: Tem como descentralizar ?

Mensagem por asimoes »

LugaB

use DEFAULT

cMensagem := hb_DefaultValue(cMensagem, "")
cTitulo := hb_DefaultValue(cTitulo, "Atenção")
nTempo := hb_DefaultValue(nTempo, 10000)
nTipo := hb_DefaultValue(nTipo, 1)

default cMensagem to "",;
cTitulo to "Atenção",;
nTempo to 10000,;
nTipo to 1

Não esqueça de incluir "common.ch"
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MsgYesNo: Tem como descentralizar ?

Mensagem por JoséQuintas »

No Harbour 3.2 chama-se CallDll32(), no 3.0 deve ser igual.
Existe outra CallDll() mas é pra compatibilidade xHarbour, é a que deve ter sido linqueditada, e por isso não deu erro.

No Harbour 3.4 CallDll32() foi renomeada pra CallDll().
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
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

MsgYesNo: Tem como descentralizar ?

Mensagem por rubens »

Bom dia...

Como eu faço para sair do wapi_MessageBox() pressionando o esc?
Tenho a funcao

Código: Selecionar todos

FUNCTION PERG(cTexto)
LOCAL nSimNao 	:= 1
LOCAL lValue
lValue 	:= wapi_MessageBox( wapi_GetActiveWindow(), cTexto, "Confirmacao", WIN_MB_YESNO + WIN_MB_ICONQUESTION + WIN_MB_DEFBUTTON1 ) == IDYES
nSimNao 	:= If( lValue,1,2 )

RETURN IF(nSimNao=1,"S","N")
Só que quando ela é chamada não sai pressionando ESC. Tem alqum parametro que possa ser enviado para sair pressionando esc?

Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

MsgYesNo: Tem como descentralizar ?

Mensagem por Toledo »

Rubens, acho que o ESC só vai funcionar se tiver o botão CANCELA, então faz um teste, troque WIN_MB_YESNO por WIN_MB_YESNOCANCEL.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

MsgYesNo: Tem como descentralizar ?

Mensagem por rubens »

Obrigado Toledo...

Funcionou certinho...

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

MsgYesNo: Tem como descentralizar ?

Mensagem por deividdjs »

bom dia amigos ....

estou usando as funções abaixo e sempre tenho problema com variaveis .. alguem sabe me dizer onde está o problema ??

Código: Selecionar todos

FUNCTION MsgYesNo( cText )

   LOCAL lValue

   lValue := wapi_MessageBox( wvgSetAppWindow():hWnd, cText, "Confirma?", WIN_MB_YESNO + WIN_MB_ICONQUESTION + WIN_MB_DEFBUTTON2 ) == WIN_IDYES

   RETURN lValue

FUNCTION MsgExclamation( cText )

   wapi_MessageBox( wvgSetAppWindow():hWnd, cText, "Atenci¢n!", WIN_MB_ICONASTERISK )

   RETURN NIL

FUNCTION MsgWarning( cText )

   wapi_MessageBox( wvgSetAppWindow():hWnd, cText, "Atenci¢n!", WIN_MB_ICONEXCLAMATION )

   RETURN NIL

FUNCTION MsgStop( cText )

   wapi_MessageBox( wvgSetAppWindow():hWnd, cText, "Atenci¢n!", WIN_MB_ICONHAND )

   RETURN NIL
Abraços!
Anexos
Captura de Tela (6).png
Captura de Tela (5).png
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Responder