Página 3 de 4

MsgYesNo: Tem como descentralizar ?

Enviado: 08 Dez 2015 13:33
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.

MsgYesNo: Tem como descentralizar ?

Enviado: 08 Dez 2015 14:27
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!

MsgYesNo: Tem como descentralizar ?

Enviado: 17 Jan 2016 15:50
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!!!!

MsgYesNo: Tem como descentralizar ?

Enviado: 28 Jan 2016 22:15
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

MsgYesNo: Tem como descentralizar ?

Enviado: 30 Jun 2016 23:38
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....

MsgYesNo: Tem como descentralizar ?

Enviado: 01 Jul 2016 07:26
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

MsgYesNo: Tem como descentralizar ?

Enviado: 01 Jul 2016 07:35
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

MsgYesNo: Tem como descentralizar ?

Enviado: 01 Jul 2016 22:40
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 5132 vezes

MsgYesNo: Tem como descentralizar ?

Enviado: 02 Jul 2016 03:44
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

MsgYesNo: Tem como descentralizar ?

Enviado: 02 Jul 2016 07:23
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"

MsgYesNo: Tem como descentralizar ?

Enviado: 02 Jul 2016 08:12
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().

MsgYesNo: Tem como descentralizar ?

Enviado: 23 Jul 2016 11:40
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

MsgYesNo: Tem como descentralizar ?

Enviado: 23 Jul 2016 11:55
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,

MsgYesNo: Tem como descentralizar ?

Enviado: 23 Jul 2016 18:09
por rubens
Obrigado Toledo...

Funcionou certinho...

Rubens

MsgYesNo: Tem como descentralizar ?

Enviado: 08 Nov 2023 10:48
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!