ALERT() posicionável

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

Moderador: Moderadores

Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

ALERT() posicionável

Mensagem por Hasse »

Boa tarde colegas

Faz um bom tempo vi que havia uma função ALERT(), ou NEWALERT() ou ainda ALERTNEW() que permitia estabelecer a sua posição na tela, e NÃO encontro mais.

Alguém lembra ou usa ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

ALERT() posicionável

Mensagem por Hasse »

Acabei de encontrar:

Trata-se da FUNCTION MYALERT() disponibilizado por
/*
* Pritpal Bedi <bedipritpal@hotmail.com>
*/
está em:
..\Hmg.3.4.3\HARBOUR\contrib\gtwvg\tests\_modal.prg

A dificuldade é que está escrito para uso em GTWVG e preciso em Harbour nativo, podendo ser como uma função externa.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
tonicm
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 08 Mar 2016 21:51
Localização: Porto

ALERT() posicionável

Mensagem por tonicm »

Porque não usa a função wapi_MessageBox?

Pode encontrar mais info aqui:
https://pctoledo.org/forum/viewto ... =4&t=19647
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

ALERT() posicionável

Mensagem por JoséQuintas »

As funções do Harbour tem fonte, nos fontes do Harbour.
Baixe e altere.

Ela deve usar as definições Top, Bottom, Left, Right, só alterar as posições.
Talvez alterar pra receber dois parâmetros indicando inicio/fim/centro pra altura e largura, indicando alinhamento, se isso resolver.
Na vertical pode querer encima, no meio ou embaixo.
Na horizontal pode querer no início, no meio ou no fim.

Não é tão complexo:
se for no início então inicio = 0, se for no meio inicio = ( total - largura ) / 2, e se for no fim inicio = total - tamanho
Alert( text, options, ALERT_STYLE_CENTER, ALERT_STYLE_CENTER )
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/
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

ALERT() posicionável

Mensagem por Hasse »

Boa noite Quintas.
Primeiramente, Obrigado pela atenção.

Qual a versão mínima necessária ?
Tenho instalado o Harbour 3.2.0 - Dev (r1601151502)
Uso o compilador MinGW GNU C 4.6.1 (32-bit)

Esta tua sugestão NÃO funcionou, apesar das dezenas de tentativas com alterações dos parâmetros.
Não apresentou qualquer erro.
A saída sempre foi a mesma, como se não existisse qualquer parâmetro.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

ALERT() posicionável

Mensagem por JoséQuintas »

Talvez pegar fonte do do Clipper.
Pelo que vi o do Harbour não é mais totalmente PRG.

Tem este exemplo do Clipper, só que usa enfeite demais, e talvez o fonte seja complicado.
Nota: é um exemplo que vinha com Clipper 5.2, de tbrowse.
cl52.png
sprdsht.zip
(12.16 KiB) Baixado 285 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/
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

ALERT() posicionável

Mensagem por Hasse »

Boa noite Quintas.

Você é incrível. Ajudando aos colegas SEMPRE. Obrigado.

Vamos aos fatos.

1)-A arquivo que você enviou não contém uma função Alert(). O serviço é feito de outra forma.

2)-Pesquisei nos fontes do xHarbour e encontrei na versão .1.2.1.
Lá o serviço é feito em 2 etapas. A primeira é em PRG normal (alert.prg), que por sua vez invoca uma rotina em C "HB_FUNC( HB_GTALERT )" no arquivo 'gtfunc.c'.
Aí ferrou para mim. Final de linha. Não entendo nadica de C.

Estou anexando os 2 arquivos, na esperança que haja alguma solução.

Alert.prg

Código: Selecionar todos

/*
 * $Id: alert.prg,v 1.28 2008/07/24 14:41:58 modalsist Exp $
 */

/*
 * Harbour Project source code:
 * ALERT() function
 *
 * Released to Public Domain by Vladimir Kazimirchik <v_kazimirchik@yahoo.com>
 * www - http://www.harbour-project.org
 *
 */

/*
 * The following parts are Copyright of the individual authors.
 * www - http://www.harbour-project.org
 *
 * Copyright 1999-2001 Viktor Szakats <viktor.szakats@syenar.hu>
 *    Changes for higher Clipper compatibility, console mode, extensions
 *    __NONOALERT()
 *
 * See doc/license.txt for licensing terms.
 *
 */

#include "box.ch"
#include "common.ch"
#include "inkey.ch"
#include "setcurs.ch"
#include "hbgtinfo.ch"

/* TOFIX: Clipper defines a clipped window for Alert() [vszakats] */

/* NOTE: Clipper will return NIL if the first parameter is not a string, but
         this is not documented. This implementation converts the first
         parameter to a string if another type was passed. You can switch back
         to Clipper compatible mode by undefining constant HB_EXTENSION. [vszakats] */

/* NOTE: Clipper handles these buttons { "Ok", "", "Cancel" } in a buggy way.
         This is fixed. [vszakats] */

/* NOTE: nDelay parameter is a Harbour extension. */

#ifdef HB_C52_UNDOC
STATIC s_lNoAlert
#endif

FUNCTION Alert( xMessage, aOptions, cColor, nDelay )
   LOCAL cMessage
   LOCAL cColorBox
   LOCAL cColorButton
   LOCAL aOptionsOK
   LOCAL nEval
   LOCAL nAt
#ifdef HB_EXTENSION
   LOCAL lFirst
   LOCAL cLine
#endif

#ifdef HB_C52_UNDOC

   DEFAULT s_lNoAlert TO hb_argCheck( "NOALERT" )

   IF s_lNoAlert
      RETURN NIL
   ENDIF

#endif

#ifdef HB_EXTENSION

   IF PCount() == 0
      RETURN NIL
   ENDIF

   cMessage := ""

   IF ISARRAY( xMessage )

      lFirst := .T.
      FOR nEval := 1 TO Len( xMessage )
         IF ISCHARACTER( cLine := xMessage[ nEval ] )
            cMessage += iif( lFirst, "", Chr( 10 ) ) + cLine
            lFirst := .F.
         ENDIF
      NEXT

   ELSE

      DO CASE
      CASE ValType( xMessage ) $ "CM" ; cMessage := StrTran( xMessage, ";", Chr( 10 ) )
      CASE ValType( xMessage ) == "N" ; cMessage := LTrim( Str( xMessage ) )
      CASE ValType( xMessage ) == "D" ; cMessage := DToC( xMessage )
      CASE ValType( xMessage ) == "L" ; cMessage := iif( xMessage, ".T.", ".F." )
      CASE ValType( xMessage ) == "O" ; cMessage := xMessage:className + " Object"
      CASE ValType( xMessage ) == "S" ; cMessage := "@" + xMessage:Name + "()"
      CASE ValType( xMessage ) == "B" ; cMessage := "{||...}"
      OTHERWISE                       ; cMessage := "NIL"
      ENDCASE

   ENDIF

#else

   IF !ISCHARACTER( xMessage )
      RETURN NIL
   ENDIF

   cMessage := StrTran( xMessage, ";", Chr( 10 ) )

#endif

   IF ! ISARRAY( aOptions )
      aOptions := {}
   ENDIF


   IF ! ISCHARACTER( cColor ) .or. EMPTY( cColor )
      cColorBox    := "W+/R"  // first color pair:  (Box)
      cColorButton := "W+/B"  // second color pair: (Buttons)
   ELSE
/*
      cColorButton := StrTran( StrTran( iif( At( "/", cColor ) == 0, "N", SubStr( cColor, At( "/", cColor ) + 1 ) ) + "/" +;
                                        iif( At( "/", cColor ) == 0, cColor, Left( cColor, At( "/", cColor ) - 1 ) ), "+", "" ), "*", "" )
*/  
      nAt := At(",",cColor)
      if nAt == 0
         cColorBox := cColor
         nAt := At("/",cColor)
         if nAt != 0
            cColorButton := SubStr( cColor, nAt+1 )+"/"+ SubStr( cColor, 1, nAt - 1 ) 
            cColorButton := StrTran( cColorButton, "+","") 
            cColorButton := StrTran( cColorButton, "*","") 
         else
            cColorButton := "W+/B" 
         endif
      else
         cColorBox    := Left( cColor, nAt - 1 )
         cColorButton := SubStr( cColor, nAt + 1 )
      endif

   ENDIF

   IF nDelay == NIL
      nDelay := 0
   ENDIF

   aOptionsOK := {}
   FOR nEval := 1 TO Len( aOptions )
      IF ISCHARACTER( aOptions[ nEval ] ) .AND. !Empty( aOptions[ nEval ] )
         AAdd( aOptionsOK, aOptions[ nEval ] )
      ENDIF
   NEXT

   IF Len( aOptionsOK ) == 0
      aOptionsOK := { 'Ok' }
#ifdef HB_C52_STRICT
   /* NOTE: Clipper allows only four options [vszakats] */
   ELSEIF Len( aOpitonsOK ) > 4
      ASize( aOptionsOK, 4 )
#endif
   ENDIF

   RETURN hb_gtAlert( cMessage, aOptionsOK, cColorBox, cColorButton, nDelay );

#ifdef HB_C52_UNDOC

PROCEDURE __NONOALERT()

   s_lNoAlert := .F.

   RETURN

#endif
gtfunc.c - a função HB_FUNC( HB_GTALERT ) está na linha 120

Código: Selecionar todos

/*
 * $Id: gtfunc.c,v 1.3 2008/12/01 11:45:00 marchuet Exp $
 */

/*
 * Harbour Project source code:
 * Harbour extended GT functions
 *
 * Copyright 2006 Przemyslaw Czerpak < druzus /at/ priv.onet.pl >
 * www - http://www.harbour-project.org
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this software; see the file COPYING.  If not, write to
 * the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
 *
 * As a special exception, the Harbour Project gives permission for
 * additional uses of the text contained in its release of Harbour.
 *
 * The exception is that, if you link the Harbour libraries with other
 * files to produce an executable, this does not by itself cause the
 * resulting executable to be covered by the GNU General Public License.
 * Your use of that executable is in no way restricted on account of
 * linking the Harbour library code into it.
 *
 * This exception does not however invalidate any other reasons why
 * the executable file might be covered by the GNU General Public License.
 *
 * This exception applies only to the code released by the Harbour
 * Project under the name Harbour.  If you copy code from other
 * Harbour Project or Free Software Foundation releases into a copy of
 * Harbour, as the General Public License permits, the exception does
 * not apply to the code that you add in this way.  To avoid misleading
 * anyone as to the status of such modified files, you must delete
 * this exception notice from them.
 *
 * If you write modifications of your own for Harbour, it is your choice
 * whether to permit this exception to apply to your modifications.
 * If you do not wish that, delete this exception notice.
 *
 */

#include "hbapigt.h"
#include "hbapiitm.h"
#include "hbapierr.h"

HB_FUNC( HB_SETDISPCP )
{
   if( ISCHAR( 1 ) )
   {
      if( hb_pcount() == 2 && ISLOG( 2 ) )
         hb_gtSetDispCP( hb_parc( 1 ), NULL, hb_parl( 2 ) );
      else
         hb_gtSetDispCP( hb_parc( 1 ), hb_parc( 2 ), hb_parl( 3 ) );
   }
   else
      hb_errRT_BASE_SubstR( EG_ARG, 1089, NULL, "HB_SETDISPCP", HB_ERR_ARGS_BASEPARAMS );
}

HB_FUNC( HB_SETKEYCP )
{
   if( ISCHAR( 1 ) )
      hb_gtSetKeyCP( hb_parc( 1 ), hb_parc( 2 ) );
   else
      hb_errRT_BASE_SubstR( EG_ARG, 1089, NULL, "HB_SETKEYCP", HB_ERR_ARGS_BASEPARAMS );
}

HB_FUNC( HB_SETTERMCP )
{
   if( ISCHAR( 1 ) )
   {
      if( hb_pcount() == 2 && ISLOG( 2 ) )
      {
         hb_gtSetDispCP( hb_parc( 1 ), NULL, hb_parl( 2 ) );
         hb_gtSetKeyCP( hb_parc( 1 ), NULL );
      }
      else
      {
         hb_gtSetDispCP( hb_parc( 1 ), hb_parc( 2 ), hb_parl( 3 ) );
         hb_gtSetKeyCP( hb_parc( 1 ), hb_parc( 2 ) );
      }
   }
   else
      hb_errRT_BASE_SubstR( EG_ARG, 1089, NULL, "HB_SETTERMCP", HB_ERR_ARGS_BASEPARAMS );
}

HB_FUNC( HB_GTINFO )
{
   if( ISNUM( 1 ) )
   {
      HB_GT_INFO gtInfo;

      gtInfo.pNewVal  = hb_param( 2, HB_IT_ANY );
      gtInfo.pNewVal2 = hb_param( 3, HB_IT_ANY );
      gtInfo.pResult  = NULL;

      hb_gtInfo( hb_parni( 1 ), &gtInfo );
      if( gtInfo.pResult )
         hb_itemReturnRelease( gtInfo.pResult );
   }
   else
      hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, "HB_GTINFO", HB_ERR_ARGS_BASEPARAMS );
}

HB_FUNC( HB_GTVERSION )
{
   hb_retc( hb_gtVersion( hb_parni( 1 ) ) );
}

HB_FUNC( HB_GTALERT )
{
   int iClrNorm = ISCHAR( 3 ) ? hb_gtColorToN( hb_parc( 3 ) ) : hb_parni( 3 ),
       iClrHigh = ISCHAR( 4 ) ? hb_gtColorToN( hb_parc( 4 ) ) : hb_parni( 4 );

   hb_retni( hb_gtAlert( hb_param( 1, HB_IT_ANY ), hb_param( 2, HB_IT_ANY ),
                         iClrNorm, iClrHigh, hb_parnd( 5 ) ) );
}

HB_FUNC( HB_GFXPRIMITIVE )
{
   PHB_ITEM pType   = hb_param( 1, HB_IT_NUMERIC );
   PHB_ITEM pTop    = hb_param( 2, HB_IT_NUMERIC );
   PHB_ITEM pLeft   = hb_param( 3, HB_IT_NUMERIC );
   PHB_ITEM pBottom = hb_param( 4, HB_IT_NUMERIC );
   PHB_ITEM pRight  = hb_param( 5, HB_IT_NUMERIC );
   PHB_ITEM pColor  = hb_param( 6, HB_IT_NUMERIC );

   hb_retni( hb_gtGfxPrimitive( hb_itemGetNI(pType),
                                hb_itemGetNI(pTop), hb_itemGetNI(pLeft),
                                hb_itemGetNI(pBottom), hb_itemGetNI(pRight),
                                hb_itemGetNI(pColor) ) );
}

HB_FUNC( HB_GFXTEXT )
{
   PHB_ITEM pTop    = hb_param( 1, HB_IT_NUMERIC );
   PHB_ITEM pLeft   = hb_param( 2, HB_IT_NUMERIC );
   char *cText      = hb_parc(3);
   PHB_ITEM pColor  = hb_param( 4, HB_IT_NUMERIC );
   PHB_ITEM pSize   = hb_param( 5, HB_IT_NUMERIC );
   PHB_ITEM pWidth  = hb_param( 6, HB_IT_NUMERIC );

   hb_gtGfxText( hb_itemGetNI(pTop),
                 hb_itemGetNI(pLeft), cText, hb_itemGetNI(pColor),
                 hb_itemGetNI(pSize), hb_itemGetNI(pWidth) );
}

Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Responder