Controlar los ToolTips

Controlar los ToolTips

Postby manuelcalerosolis » Fri Jul 28, 2006 10:56 am

Me gustaria saber si puedo mostrar el ToolTip de un contro sin necesidad de que el ratón este sobre el.

Algo asi

Redefine Get oGetCodigo ...

oGetCodigo:cToolTip := "Código obligatorio"

...

if Empty( oGetCodigo:VarGet() )
oGetCodigo:showToolTip()
end if


Este código ahora no funciona.

Gracias, Manuel Calero.
User avatar
manuelcalerosolis
 
Posts: 149
Joined: Mon Oct 10, 2005 9:30 am
Location: Huelva - Spain

Postby joseluisysturiz » Fri Jul 28, 2006 4:25 pm

Nose, si es complicarte, pero yo lo trabajo en un VALID() que llama una funcion y le doy el mensaje que quiera y sirve para cualquier oGET que no cumpla la condicion de que que de vacio, claro imagino que con un tooltip debe verse mas coqueto, pero debes crear 1 tooltip para cada oGET, eso creo, te doy mi ejmplo.

FUNCTION novacio(variable) // VALIDA CAMPO NO QUEDE VACIO
IF EMPTY(variable)
MSGALERT("Campo no puede quedar vacio"," ATENCIÓN")
RETURN .F.
ENDIF
RETURN .T. // FIN VALIDA CAMPO NO QUEDE VACIO

y llamo la funcion desde el VALID del oGET.

REDEFINE GET oGET1 VAR oDbf:ben_codigo ID 103 OF oDlgDatBen PICTURE "@!";
VALID(novacio(oDbf:ben_codigo), vcodigo(oDbf:ben_codigo, lAPPEND));
WHEN(lAPPEND) UPDATE

espero te sirva, aclare o de nuevas ideas para tu pregunta...
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Postby manuelcalerosolis » Fri Jul 28, 2006 6:01 pm

El tema de MsgAlert y MsgStop es como lo tengo en la actualidad pero asi, estamos obligando al usuario a pulsar INTRO por cada mensaje, mi idea es mostrar el tootip para informar al usuario de por que no se valida el formulario, y puede seguir trabajando sin darle a INTRO.

Saludos
User avatar
manuelcalerosolis
 
Posts: 149
Joined: Mon Oct 10, 2005 9:30 am
Location: Huelva - Spain

Postby Maurilio Viana » Fri Jul 28, 2006 7:51 pm

Manuel,

Tengo el mismo problema que usted: o sea no quiero que el usuario tenga que pulsar OK.
Yo hice una funcion que pone una caja amarilla en el get con dato incorrecto.
Mira se puede ayudarte:
Code: Select all  Expand view

*** Ejemplo:
...
if ! "NB" $ cSit
   WinInfo("Situacion debe ser:"+CRLF+;
               "N=Normal"+CRLF+;
               "B=Bloqueado", oGetSit)
endif

Se tienes problema con focus cuando llamar WinInfo intenta:
WinInfo("Texto", oGet, .F.)

*** La funcion:

//-----------------------------------------------------------------------------
// WinInfo : Cria ventana estilo tooltip
// <cText>        : Texto o bloco de texto
// <oObj >        : Objeto (get, button, say, etc) de la ventana
// <lLetLostFocus>: Debe cerrar cuando perder el focus?
//----------------------------------------------------------------------------
function WinInfo(cText, oObj, lLetLostFocus)
local oFont, oWnd, aPos, hOldFont
local aText, nLenText, hWnd, oClose, oTempo
local nRow      := oObj:nHeight()
local nCol      := 7
local nTxtWidth := 0
local nTxtHeight:= 0

DEFAULT lLetLostFocus := .T.

if ValType( cText ) == "B"
    cText := Eval( cText )
endif
cText := strtran(cText,"\n", chr(13)+chr(10))  // \n = CRLF  cText := ""+CRLF+cText+CRLF+" "

define window oWnd from 0, 0 to 1, 5     ;
        style  nOr( WS_POPUP, WS_BORDER ) ;
        color  0, nRGB(255,255,164) of oObj

define font oFont name GetSysFont() size 0, -8

aPos := {nRow-1, -1}   
aPos := ClientToScreen( oObj:hWnd, aPos )

nTxtHeight := max(14, GetTextHeight( oWnd:hWnd )-2)
aText      := array( nLenText := mlcount( cText, 254 ) )

aeval( aText, {|c, n| aText[ n ] := trim(memoline( cText, 252, n )), ;
                       nTxtWidth  := max(nTxtWidth, GetTextWidth( 0, aText[ n ], oFont:hFont ) + 7 ) })

if aPos[ 2 ] + nTxtWidth + 3 > GetSysMetrics(0)   //0 = SM_CXSCREEN
    aPos[ 2 ] = GetSysMetrics( 0 ) - nTxtWidth - 3
endif

oWnd:bRClicked := oWnd:bLClicked := {|a, b, c, Me| Me:End() }

//-----------------------------------------------------------------------------------
// Truco: Boton fuera de la ventana. Cierra la ventana se pulsa enter
//-----------------------------------------------------------------------------------
@ -10, -10 button oClose of oWnd action (if(oTempo # Nil, oTempo:End(),), oWnd:End())

oWnd:Move( aPos[ 1 ], aPos[ 2 ], nTxtWidth, nTxtHeight * nLenText + 3 )
oWnd:Show()

SysRefresh()
if oWnd != Nil
    SetBkMode( oWnd:GetDC(), 1 )
    SetTextColor( oWnd:hDC, 0 )

    hOldFont := SelectObject( oWnd:hDC, oFont:hFont )

    aeval( aText, {| c, n | TextOut( oWnd:hDC, n * nTxtHeight - (nTxtHeight-1), 2, aText[ n ] ) })
    SelectObject( oWnd:hDC, hOldFont )
    oWnd:ReleaseDC()
endif
oWnd:Setfocus()
if lLetLostFocus
    oWnd:bLostFocus := {|| oWnd:End() }
else
    // Cierra la ventana despues de 2600 milisegundos
    define timer oTempo interval 2600 of oWnd action (oWnd:End(), oTempo:End())
    oTempo:Activate()
endif

oFont:End()
return( Nil )


Saludos de Brasil
Maurilio
User avatar
Maurilio Viana
 
Posts: 252
Joined: Tue Oct 25, 2005 2:48 pm
Location: Garça/Garza/Heron City - Brazil

Postby manuramos » Fri Jul 28, 2006 8:18 pm

No sería más sencillo diseñar la pantalla directamente, de forma que al lado de cada GET (u otro CONTROL) coloques un pequeño GRAFICO (o un simple SAY) donde des una pequeña explicación de lo que hace/tiene que hacer el GET (o CONTROL)

Si esa explicación tiene que aparecer al entrar en el GET (o activar el CONTROL) pon los comentarios en HIDE() al iniciar el DIALOGO, despUES los "enseñas" con SHOW() en el WHEN y los "escondes" HIDE() en el VALID de cada GET/CONTROL.

A falta de que desarrolles el algoritmo pertinente esto te podría servir.

Un saludo
Nos Gusta Programar
manuramos
 
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Postby joseluisysturiz » Sun Jul 30, 2006 8:35 pm

analizando tu idea, termine probando y creo que con msgwait() te ayudaria, prueba ver, muestra el mensaje y no obliga al usuario usar ENTER, espero te ayude, es mas cambie mis mensajes a ese estylo, saludos desde Venezuela...
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Horizon, nnicanor and 23 guests