Página 1 de 2

FUNÇÃO ALERT

Enviado: 13 Ago 2007 18:14
por Netavin
Olá amigos clipermaníacos !

... Como poderia mostrar um alerta ao usuário, usando 2 linhas de texto ??
Por exemplo: 1ª LINHA "Este CNPJ já está cadastrado para o cliente nº 0123"
2ª LINHA "CERÂMICA SUDOESTE LTDA"

Forte abraço a todos !

Netavin

Enviado: 13 Ago 2007 18:19
por Eolo
Use ";" para separar as linhas:
ALERT("LINHA1;A linha2;Esta vai ser a linha 3")

Enviado: 13 Ago 2007 19:40
por sygecom
Só complementando....o que o Eolo disse ...tenho um Alert() modificado aqui que foi tirado da Net e se quiser posso te enviar ele...ele pode mudar de coluna e linha de inicio ou ainda mudar de cor.

Enviado: 13 Ago 2007 19:52
por Eolo
Leo, manda pra mim? Pergunta: dá pra alinhar à esquerda ou só é mesmo centralizado?

Enviado: 13 Ago 2007 19:55
por sygecom
Tche, Eolo eu não uso ela...mas vou te mandar.....outra coisa dah pra definir um Time tmb.

Enviado: 13 Ago 2007 20:01
por sygecom
É pequeno e dah pra postar aqui mesmo !!! segue abaixo...

Código: Selecionar todos

#include "inkey.ch"

ALERT2("Mensagem que vc Deseja",,15,,.T.,3)  //faz a chamada da função

*******************************************************************
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)
Esse exemplo foi pego da Net...

Enviado: 13 Ago 2007 22:32
por Maligno
Você também poderia dar uma pesquisada no site "The Oasis". Tem muita coisa boa por lá. Não duvido que tenha algo melhor.

Enviado: 14 Ago 2007 07:48
por ederxc
A unica coisa que falta no alert comum é o time e posicionamento , do resto ele faz a mesma coisa que esse faz !

alert("funcionarios excluido ;contratar novo?",{"sim","nao"},"n/gb")


Obs: isso é apenas um exemplo do que da pra fazer ! ´o)

ALERT

Enviado: 14 Ago 2007 11:26
por Netavin
Bom dia turma!
... o modo como exemplificaram está ótimo! Mas assim eu já uso. Vou ser mais claro ainda.
Eu estou usando o seguinte:

Alert("CNJ já cadastrado para o cliente "+Str(cli_cod,3)+" "+Alltrim(cli_nom))

... então o que eu gostaria é formatar esta mensagem para fique com um visual adequado. É possível ?

Obrigado!!!

Netavin

Enviado: 14 Ago 2007 11:29
por Maligno
Use ";" para separar as linhas:
A dica acima, do colega Eolo, não funcionou como esperado? Detalhe: não testei porque nunca uso Alert.

ALERT

Enviado: 14 Ago 2007 12:47
por Netavin
... Malígno, companaheiros..
Quando se trata de texto simples como o exemplo a que vc se referiu, fica fácil. Minha dificuldade estava em fazer essa separação, uma vez que eu "pesco" o código e o nome do cliente. Porém com o método "tentativas, erros e acertos" eu consegui fazer isso:
Alert("CNPJ já cadastrado p/ o cliente "+STR(cli_cod,3), {Alltrim(cli_nom)}).
Deu certo, Ufa !!!
Bom, valeu pela discussão. Quém sabe há alguém esteja com o mesmo problema...!!?

Um grande abraço para todos!
Obrigado !!! :{

Netavin.

Enviado: 14 Ago 2007 14:04
por Eolo
Netavin, a função ALERT() tem 2 argumentos e você "misturou" os dois. O primeiro serve para vc colocar N linhas com a mensagem desejada e pode sim conter texto + valores de campos/variáveis. O segundo, é uma matriz que monta um ACHOICE() abaixo das linhas de mensagem, com opções (ao usuário) que vc pode controlar depois (veja o exemplo do EDERX, acima).

Então, a janela de mensagem pode ter por exemplo 2 linhas com a mensagem e 3 opções, como no seguinte exemplo:
"Você alterou informações"
"e está saindo sem gravar"

"Sair sem Gravar" "Gravar e Sair" "Voltar à Edição"
O cursor vai estar no "Sair em Gravar". O usuário, então, pode usar as setas de direção para se movimentar entre as opções (do Achoice). Na saída, o seu programa encaminha as coisas de acordo com a opção escolhida...


Agora, se a sua intenção é mudar cores no Alert(), dá uma olhada no Alert2() postado pelo Leo. Lá dá pra alterar a forma da função trabalhar.

Enviado: 14 Ago 2007 14:33
por ederxc
Tambem costumo usar esse alert genérico !

Código: Selecionar todos

tela_sav=""
tela_sav=savescreen(18,29,21,47,tela_sav)
set color to ('n/gb','gb/n')
@18,29 clear to 21,47
dispbox(18,29,21,47)
priv opc:=0
@19,30 SAY('confirma inclusao')
@20,32 prompt(" sim ")
@20,40 prompt(" nao ")
Menu to opc
set color to ('n/gb','b-/g-')
if opc=1      
     apend blank 
     repla bla with vblabla
     restscreen(18,29,21,47,tela_sav)      
elseif opc=2
     restscreen(18,29,21,47,tela_sav)      
endif

ALERT

Enviado: 14 Ago 2007 16:21
por Netavin
Olá Eolo!
... rapaz, agora verificando direito, misturei mesmo né !! É porisso que a segunda linha está em destaque então!!! É uma coincidência estar funcionando então.
E como eu poderia resolver isso ? Tem uma sugestão ?
Veja o texto que postei acima. Note que preciso mostrar ao usuário, a mensagem, o código e o nome do cliente. E a questão é que não consigo a sintaxe que faça isso aparecer em duas linhas.

[]´s

Netavin

Enviado: 14 Ago 2007 16:26
por Maligno
Tente assim:

Alert("Atenção!;Este CNPJ já está cadastrado para o cliente nº "+STR(cli_cod,3)+";"+Alltrim(cli_nom))