Página 2 de 3

Enviado: 07 Jun 2007 15:27
por Gelson
Eolo,

Desta forma aqui, fiz aqueles três lançamentos, R$ -10, R$ +5,00 e R$ -45,01, e deu certo. Aparece o alerta de limite estourado, e enquanto for negativo vai aparecendo a caixa de alerta. Porém fazendo outros testes quando o valor de sal_limite torna-se positivo, não é exibida a caixa de limite bom.

tentei abrir outra condição, do tipo IF SAL_LIMITE > 0.00, depois mas não deu. deve ser o comando vou ver na apostila e já posto o retorno.

Código: Selecionar todos

IF SAL_LIMITE < 0.00
 IF (abs(SAL_LIMITE)) > LIMITE
 ALERT ("    LIMITE ESTOURADO !!!     ")
 ELSE
 ALERT ("     LIMITE  BOM !!!   ")
 ENDIF
 ENDIF
 ENDDO
CLEAR
CLOSE ALL       
RETURN

Enviado: 07 Jun 2007 15:40
por Gelson
Eolo,

realmente não aparece o alerta quando o saldo é bom, ou seja, quando o sal_limite é positivo.

Código: Selecionar todos

IF SAL_LIMITE < 0.00
 IF (abs(SAL_LIMITE)) > LIMITE
 ALERT ("    LIMITE ESTOURADO !!!     ")
 ELSE
 IF SAL_LIMITE > 0.00
 IF LIMITE  < SAL_LIMITE 
 ALERT ("     LIMITE  BOM !!!   ")
 ENDIF
 ENDIF
 ENDIF
 ENDIF
 ENDDO
CLEAR
CLOSE ALL       
RETURN]

Enviado: 07 Jun 2007 18:12
por Eolo
Ponteiro é um "dedo" imaginário apontando para um registro do DBF.

Quando vc abre o DBF, o ponteiro fica no recno()=1, registro 1. Então, se vc quer pegar o limite do "EOLO", vc tem que mover o ponteiro até o registro do "EOLO" (com o SEEK)...

Aliás, o ponteiro fica no registro 1 se o DBF for aberto sem nenhum NTX ou se a ordem do índice ativo for coincidentemente igual à ordem natural...

Enviado: 07 Jun 2007 18:15
por Eolo
Porém fazendo outros testes quando o valor de sal_limite torna-se positivo, não é exibida a caixa de limite bom.
Não achei que vc fosse precisar disso. Veja abaixo as linhas "OPERAÇÂO BEM SUCEDIDA"...

Código: Selecionar todos

* Lançamento 1 
limite=50.00 
usado=0,00 
novo=-10.00 Débito (sinal negativo) 
if novo<0 // Débito 
  if (abs(novo)>(limite+usado)) // (10.00 > (50.00+0.00)) = .F. 
    ?"limite estourado" 
  else 
    * CAI AQUI ************************************* 
    usado=usado+novo // usado = 0.00+-10.00 = -10.00 
    ?"operação bem sucedida!"
  endi 
else // Crédito 
  usado=usado+novo 
  ?"operação bem sucedida!"
endi 



* Lançamento 2 
limite=50.00 
usado=-10,00 
novo=5.00 Crédito (sinal positivo) 
if novo<0 
  if (abs(novo)>(limite+usado)) 
    ?"limite estourado" 
  else 
    usado=usado+novo 
    ?"operação bem sucedida!"
  endi 
else 
  * CAI AQUI ************************************* 
  usado=usado+novo // usado = -10,00+5.00 = -5.00 
  ?"operação bem sucedida!"
endi 



* Lançamento 3 
limite=50.00 
usado=-5,00 
novo=-45.01 Débito (sinal negativo) 
if novo<0 
  if (abs(novo)>(limite+usado)) // (45.01 > (50.00+-5.00)) = .T. 
    * CAI AQUI ************************************* 
    ?"limite estourado" 
  else 
    usado=usado+novo 
    ?"operação bem sucedida!"
  endi 
else 
  usado=usado+novo 
  ?"operação bem sucedida!"
endi 

Enviado: 07 Jun 2007 20:06
por Gelson
Problema resolvido,

Código: Selecionar todos

IF VAL(CONTA) > 30000
  IF SAL_LIMITE < 0.00
 IF (abs(SAL_LIMITE)) > LIMITE
 ALERT ("    LIMITE ESTOURADO !!!     ")
         ENDIF
         ENDIF
         ENDIF
IF SAL_LIMITE > 0.00
 IF LIMITE  < SAL_LIMITE 
 ALERT ("     LIMITE  BOM !!!   ")
 ENDIF
 ENDIF
 ENDDO
CLEAR
CLOSE ALL       
RETURN
Queiro deixar aqui meus agradecimentos ao Eolo, pela paciência e persistência e igualmente ao sygecom. :)Pos

Quanto a caixa de alerta peguei o fonte e no momento da compilação esta reclamando de um simbolo não definido apos a biblioteca de pesquisa :
"clearbuffe"

Do que preciso para compilar este prg e ver como fica ?

Enviado: 07 Jun 2007 20:23
por Eolo
Gelson,

Legal! Mas dá uma olhada numa coisa: vc faz "SAL_LIMITE>0.00" e "SAL_LIMITE<0.00", certo? E quando for "=0"?

Quanto ao símbolo faltando, talvez seja uma LIB que precisa incluir na compilação/linkedição... Ela diz respeito ao tal ALERT()?

Enviado: 07 Jun 2007 21:34
por Gelson
É mesmo, Eolo!

vou fazer mais um teste, acrescentando >=

quanto ao prg peguei aqui:

http://www.karland.com/code/clipper/files/alert.zip

Enviado: 07 Jun 2007 22:40
por Eolo
Tenta usar a função ALERT() do próprio Clipper...
Vc tem o Norton Guide (NG)? Lá explica como usar...
Qual versão do Clipper vc usa? E qual linkador? É o Rtlink?

Enviado: 07 Jun 2007 22:56
por sygecom
Tche, como fui eu que mostrei o link pra vc ....e não uso a Tal função fui dar uma olhada nah tal....e fiz ela funcionar....

1º-)Desculpa Não ter testado antes.....mas vamos lah...com essa função vc consegue movimentar o ALERT....e ainda colocar um TIME para ela ficar aparecendo e depois sair....

Obs:Essa Função Não é Minha....soh dei uma alterada.....para o colega Gelson poder usar...

Código: Selecionar todos

ALERT2("Mensagem que vc Deseja",,15,,.T.,3)
Nesse acima é como eu usei para chamar a Função...onde "Mensagem que vc Deseja" é o Texto da Mensagem....15 é a LINHA onde ele deve começar a aparecer.... .T. é para ele usar os SONS de TONE() e 3 é os Segundos que o mesmo deve ficar aparecendo...

Abaixo o Codigo Alterada e Funcionando.......preste atenção no INCLUDE

Código: Selecionar todos

#include "inkey.ch"
*******************************************************************
FUNC Alert2( cMessage, aChoices, nTopRow, cColor, lBell, nTime )
*******************************************************************
/*
 - Alert() substitude
 - John E. Graceland ( 3-23-94 )
 - Replacement for Clipper's ALERT() Function
 - Clipper 5.n
 - Syntax: Alert( <cMessage> [,<aChoices>, <nTopRow>, <cColor>, <lBell>] )
 - Features: Emulates Clipper's ALERT(), additional options are
             Starting row position of box, set color, sound bell
             Invoke Clippers dbugger from within Alert(), time out a
             message, displays vertically when cannot fit horizontally.
 - Returns a numeric value equal to the option selected, <Esc> = 0
*/

LOCAL;
n,;
nCol,;
nRow,;
cScreen,;
nPromLeft,;
nBoxLeft,;
nBoxRight,;
nMsgLen,;
nBoxLen    := 0,;
nPromLen   := 0,;
cOldColor  := SETCOLOR(),;
cOldWrap   := SET( 35, "ON" ),;
lOldCenter := SET( 37, .F. ),;
lOldBlink  := SETBLINK(.F.),;
aMessage   := {},;
bPgUp      := SETKEY(K_PGUP, {||NIL} ),;
bPgDn      := SETKEY(K_PGDN, {||NIL} ),;
nChoice    := 0,;
lVertical  := (.F.),;
nBoxWidth  := 0,;
nMaxBottom,;
cCur

IF aChoices==NIL
   // force "OK" if no choices are passed
   aChoices:={}
   AADD(aChoices,IF(nTime==NIL,"OK","<Esc>"))
END

// set length of prompt line
AEVAL( aChoices, {|aArray| nPromLen += LEN(aArray)+2 })

// load message array
WHILE ";" $ cMessage
   // test for multiple line message
   AADD(aMessage, SUBSTR(cMessage,1,AT(";",cMessage)-1 ) )
   cMessage := STUFF(cMessage,1,AT(";",cMessage), "" )
END
IF "" != cMessage
   // add remaining message string to array
   AADD(aMessage,cMessage)
END
nMsgLen := LEN(aMessage)

// determine box length based on largest message line
AEVAL( aMessage, {|aArray| nBoxLen := MAX(nBoxLen,LEN(aArray)+4) })

nPromLen  += ( (LEN(aChoices)+1) * 2 )
cColor    := IIF( ISCOLOR(), IIF( cColor == NIL,"W+/BG,N/W+",cColor),"N/W,W+/N")
lBell     := IIF( lBell == NIL, .F., lBell )
nTopRow   := IIF( nTopRow == NIL, 10, nTopRow )

// test for the larger of box length vs. length of prompt line
nBoxWidth := IIF( nBoxLen > nPromLen, nBoxLen, nPromLen + 4 )
lVertical := ( MAXCOL() - nBoxWidth ) / 2 < 0

IF lVertical
   nBoxWidth:=nBoxLen
   AEVAL( aChoices, {|aArray| nBoxWidth := MAX( nBoxWidth,LEN(aArray)) })
   nBoxLeft  := ( MAXCOL() - nBoxWidth ) / 2
   nBoxRight := nBoxLeft + nBoxWidth + 2
   nPromLeft := nBoxLeft 
ELSE
   nBoxLeft  := ( MAXCOL() - nBoxWidth ) / 2
   nBoxRight := nBoxLeft + nBoxWidth
   nPromLeft := ( ( MAXCOL()-nPromLen ) / 2) 
END

// save the original screen
DISPBEGIN()

SETCOLOR( cColor )
// display Alert box

nMaxBottom := nTopRow+nMsgLen+IF(lVertical,LEN(aChoices)+1,2)+1
IF nMaxBottom > MAXROW()-1
   nTopRow -= nMaxBottom - MAXROW()
   nMaxBottom := MAXROW()
END

cScreen:=SAVESCREEN(nTopRow, nBoxLeft, nMaxBottom, nBoxRight+1)
@ nTopRow, nBoxLeft, nMaxBottom, nBoxRight+1 BOX "ÚÄ¿³ÙÄÀ³ " 

FOR n:=1 TO nMsgLen
   @ nTopRow+n,nBoxLeft+1 SAY PADC( aMessage[n], nBoxWidth, SPACE(1) )
NEXT

nCol       := nPromLeft + IF(lVertical,1,3 )
cOldWrap   := SET( 35, "ON" )
lOldCenter := SET( 37, .F. )

// Display the prompt line
nRow:=ROW()+2
FOR n:=1 TO LEN( aChoices )
   IF lVertical
      IF nTime==NIL
         @ nRow+n-1, nCol PROMPT SPACE(1)+aChoices[n]+SPACE(1)
      ELSE
         @ nRow+n-1, nCol SAY SPACE(1)+aChoices[n]+SPACE(1)
      END
   ELSE
      IF nTime==NIL
         @ nRow, nCol PROMPT SPACE(1)+aChoices[n]+SPACE(1)
      ELSE
         @ nRow, nCol SAY SPACE(1)+aChoices[n]+SPACE(1)
      END
      nCol += LEN(aChoices[n])+4
   END
NEXT
DISPEND()

IF lBell
   // sound bell
   TONE(499,2)
   TONE(299,1)
ENDIF
IF nTime == NIL
   MENU TO nChoice
ELSE
   nCur:=SETCURSOR(0)
   INKEY( nTime )
   //KEYBOARD CHR(K_ESC)
   //MENU TO nChoice
   SETCURSOR(nCur)
*   ClearBuffer()
END
// restore some settings here
SET( 35, cOldWrap )
SET( 37, lOldCenter )
SETBLINK( lOldBlink )
RESTSCREEN(nTopRow, nBoxLeft, nMaxBottom, nBoxRight+1,cScreen)
SETCOLOR( cOldColor )
SETKEY(K_PGUP, bPgUp )
SETKEY(K_PGDN, bPgDn )
RETURN IF( (LASTKEY()=K_ESC.OR.LASTKEY()=K_PGUP.OR.LASTKEY()=K_PGDN),0,nChoice)
Abraços
Leonardo Machado

Enviado: 07 Jun 2007 23:10
por Eolo
Fala, Gaúcho!
Po, 4 dias de feriado, passa das 11 da noite, eu pensei que era o único doido no ar... mas pelo jeito tem mais gente. eh eh eh

Enviado: 07 Jun 2007 23:23
por sygecom
Fala, Gaúcho!
Po, 4 dias de feriado, passa das 11 da noite, eu pensei que era o único doido no ar... mas pelo jeito tem mais gente. eh eh eh
Vô Fica Tranquilo....tem mais doido por ai sim....,Trabalhei o dia todo.....pior não é.......o dia rendeu mais que no dia a dia normal..... pq não tem ninguem ligando, ou chamando no MSN..... :P
Fui...

Abraços
Leonardo Machado

Enviado: 08 Jun 2007 07:53
por Gelson
Olá, sygecom e amigos do forum .

Tentei compilar e Win98 travou mas não mostou o problema (Tela Azul de Morte) então reinicei pelo DOS, e olhando NG ele me disse a mesma coisa que você havia dito "olha o include" achei o inkey.ch e coloquei na pasta que criei para testar o alert.

Fiz o seguinte:
MD alert // coloquei o alertcd, alert2 = da forma como você postou, inkey.ch

crei um alert.lnk // # SCRIPT PARA FAZER O LINK DO PROGS DE CAIXA DE ALERTA

FILE ALERTCD,ALERT2

Uso clipper 5.2 e rtlink. Falta algo mais para testar a caixa de alerta ?

Enviado: 08 Jun 2007 09:45
por sygecom
Tche, eu nunca usei o RTLINK....eu uso o BLINKER....me mande um email....seu que te mando o exemplo que montei....usei o EXOXPACE...

Abraços
Leonardo Machado

Enviado: 08 Jun 2007 16:31
por Gelson
Olá, sygecom. tudo bem ?


gelson@progressnet.com.br.


obrigado pela atenção.

Enviado: 08 Jun 2007 16:35
por sygecom
Jah recebi seu email.....mais tarde te mando....não toh no me micro agora....

Abraços
Leonardo Machado