problemas com DO WHILE e ALERT

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Gelson
Usuário Nível 3
Usuário Nível 3
Mensagens: 170
Registrado em: 16 Abr 2005 17:04

Mensagem 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
Editado pela última vez por Gelson em 08 Jun 2007 16:33, em um total de 2 vezes.
Gelson
Usuário Nível 3
Usuário Nível 3
Mensagens: 170
Registrado em: 16 Abr 2005 17:04

Mensagem 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]
Editado pela última vez por Gelson em 08 Jun 2007 16:34, em um total de 2 vezes.
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem 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...
Editado pela última vez por Eolo em 07 Jun 2007 18:25, em um total de 1 vez.
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem 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 
Gelson
Usuário Nível 3
Usuário Nível 3
Mensagens: 170
Registrado em: 16 Abr 2005 17:04

Mensagem 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 ?
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem 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()?
Gelson
Usuário Nível 3
Usuário Nível 3
Mensagens: 170
Registrado em: 16 Abr 2005 17:04

Mensagem por Gelson »

É mesmo, Eolo!

vou fazer mais um teste, acrescentando >=

quanto ao prg peguei aqui:

http://www.karland.com/code/clipper/files/alert.zip
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem 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?
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem 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
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Gelson
Usuário Nível 3
Usuário Nível 3
Mensagens: 170
Registrado em: 16 Abr 2005 17:04

Mensagem 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 ?
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Gelson
Usuário Nível 3
Usuário Nível 3
Mensagens: 170
Registrado em: 16 Abr 2005 17:04

Mensagem por Gelson »

Olá, sygecom. tudo bem ?


gelson@progressnet.com.br.


obrigado pela atenção.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Jah recebi seu email.....mais tarde te mando....não toh no me micro agora....

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder