Pessoal estou tendo problemas com a funcao alert() do clipper que em computadores com win 2000, xp tb acredito, aparece no rodape da tela (não no meio), penso que é pq o 2000 é 50 linhas, alguem ja modificou a funcão alert para nã dar este problema
Grande abraço
Função alert que funcione em win 2000 2 nos outros tb
Moderador: Moderadores
Paulao eu uso esta.
Código: Selecionar todos
#Include "inkey.ch"
*******************************************************************
FUNCTION Alert1( cMessage, aChoices, nTopRow, cColor, lBell, nTime )
*******************************************************************
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+/R+,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)
Daniel
Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Tem essa outra também!
Janio
Código: Selecionar todos
********************************************************
*ALERTA("Texto Centralizado na Linha Escolhida !",05)
*ALERTA("Um Texto Menor !",10)
*ALERTA(" Data Atual.: "+ DTOC(DATE()) + " ",12)
*ALERTA(" Final da fun‡„o ! ",12)
FUNCTION ALERTA
PARAMETERS TEXTO,LIN
SAVE SCREEN TO TELANT2
CORANT=SETCOLOR()
CURSTAT=SETCURSOR()
SETCURSOR(0)
SET CURSOR OFF
IF LEN(TEXTO) < 14
TAMMOLD = 16
ELSE
TAMMOLD = LEN(TEXTO)+2
ENDIF
IF LIN > 22
LIN = 22
ENDIF
SET COLOR TO
@LIN+1, ((80-LEN(TEXTO))/2) CLEAR TO LIN+3, (((80-LEN(TEXTO))/2)+TAMMOLD+1)
SETCOLOR("W+/R")
@LIN,(((80-LEN(TEXTO))/2)-1) CLEAR TO LIN+2, ((((80-LEN(TEXTO))/2)-1)+TAMMOLD+1)
@LIN,(((80-LEN(TEXTO))/2)-1) TO LIN+2, ((((80-LEN(TEXTO))/2)-1)+TAMMOLD+1) //DOUBLE
* SETCOLOR("W*+/R")
SETCOLOR("W+/R")
@LIN+1,(((80-LEN(TEXTO))/2)+1) SAY TEXTO
INKEY(05)
RESTORE SCREEN FROM TELANT2
SETCOLOR(CORANT)
SET CURSOR ON
SETCURSOR(CURSTAT)
RETURN NIL
RETURN NIL
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
Isso acontece alguma vezes (nao sei se é o seu caso) por que foi definido o SET MESSAGE TO 23
...
Alias se você não usa mensagens coloca uma outra linha, por que o padrão é 23 mesmo...
No meu programa tinha isso e eu mudei pra 10 e funcionou normal o alert...
Mas nunca se sabe, XP é XP né ??
Alias se você não usa mensagens coloca uma outra linha, por que o padrão é 23 mesmo...
No meu programa tinha isso e eu mudei pra 10 e funcionou normal o alert...
Mas nunca se sabe, XP é XP né ??
Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Eu uso a função ALERT em WIN 95, WIN 98 e XP e nunca tive
qualquer problema do tipo relatado.
Eu não uso SET MESSAGE TO..., então é provável que o
problema resida alí.
Hasse.
qualquer problema do tipo relatado.
Eu não uso SET MESSAGE TO..., então é provável que o
problema resida alí.
Hasse.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)

