Clipper On Line • Ver Tópico - ALERT() posicionável

ALERT() posicionável

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

Moderador: Moderadores

 

ALERT() posicionável

Mensagempor Hasse » 15 Fev 2020 16:22

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

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

ALERT() posicionável

Mensagempor Hasse » 15 Fev 2020 17:55

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

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

ALERT() posicionável

Mensagempor tonicm » 16 Fev 2020 14:38

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

Pode encontrar mais info aqui:
http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=19647
tonicm
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 55
Data de registro: 08 Mar 2016 21:51
Cidade/Estado: Porto
Curtiu: 12 vezes
Mens.Curtidas: 1 vez

ALERT() posicionável

Mensagempor JoséQuintas » 16 Fev 2020 20:43

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, 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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

ALERT() posicionável

Mensagempor Hasse » 17 Fev 2020 22:33

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

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

ALERT() posicionável

Mensagempor JoséQuintas » 18 Fev 2020 08:24

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 153 vezes
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

ALERT() posicionável

Mensagempor Hasse » 18 Fev 2020 21:58

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

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 6 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