FUNÇÃO ALERT

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

FUNÇÃO ALERT

Mensagem 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
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
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 »

Use ";" para separar as linhas:
ALERT("LINHA1;A linha2;Esta vai ser a linha 3")
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem 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.
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 »

Leo, manda pra mim? Pergunta: dá pra alinhar à esquerda ou só é mesmo centralizado?
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, Eolo eu não uso ela...mas vou te mandar.....outra coisa dah pra definir um Time tmb.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem 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...
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem 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)
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

ALERT

Mensagem 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
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

ALERT

Mensagem 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.
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
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 »

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.
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem 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
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

ALERT

Mensagem 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
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Tente assim:

Alert("Atenção!;Este CNPJ já está cadastrado para o cliente nº "+STR(cli_cod,3)+";"+Alltrim(cli_nom))
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Responder