FUNÇÃO ALERT
Moderador: Moderadores
FUNÇÃO ALERT
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
... 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 !! "
" Sem saber que era impossível, foi lá e fez !! "
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
É pequeno e dah pra postar aqui mesmo !!! segue abaixo...
Esse exemplo foi pego da Net...
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)
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
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!
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!
ALERT
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
... 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 !! "
" Sem saber que era impossível, foi lá e fez !! "
A dica acima, do colega Eolo, não funcionou como esperado? Detalhe: não testei porque nunca uso Alert.Use ";" para separar as linhas:
[]'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!
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!
ALERT
... 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.
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 !! "
" Sem saber que era impossível, foi lá e fez !! "
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:
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.
Então, a janela de mensagem pode ter por exemplo 2 linhas com a mensagem e 3 opções, como no seguinte exemplo:
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..."Você alterou informações"
"e está saindo sem gravar"
"Sair sem Gravar" "Gravar e Sair" "Voltar à Edição"
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.
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
ALERT
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
... 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 !! "
" Sem saber que era impossível, foi lá e fez !! "
Tente assim:
Alert("Atenção!;Este CNPJ já está cadastrado para o cliente nº "+STR(cli_cod,3)+";"+Alltrim(cli_nom))
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!
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!



