ToolTip Text al recibir el enfoque

750 views
Skip to first unread message

Carlos Hidalgo

unread,
Nov 17, 2016, 10:29:00 PM11/17/16
to publice...@googlegroups.com

Que tal amigos...
Alguien que me ayude...  Hay alguna forma de mostrar la informacion ToolTip Text  cuando un control tiene el enfoque.. No solo al mover el mouse sobre el.

Saludos.. 

Fidel Charny

unread,
Nov 18, 2016, 7:30:12 AM11/18/16
to Comunidad de Visual Foxpro en Español
Lo previsto es StatusBarText. Pero si no muestras la Status Bar no se verá nada.
Puedes emular el efecto de Tooltiptext con una clase label que se muestre en el When o en el GotFocus y se oculte en el LostFocus.
Lo mejor sería utilizar clases. Pero también lo puedes hacer por BindEvent con un código como el siguiente:
* Method Recursive_box
LPARAMETERS toObject
,  tlREcursive
* Método recursivo
* Llamada: en el INit del form (in fine)
* This.Recursive_box(this)

LOCAL loControl
as Object


IF
!m.tlREcursive AND !PEMSTATUS(thisform,"lbl_ToolTiptext",5)
    thisform
.NewObject("lbl_ToolTipText","Label")
    WITH
this.lbl_toolTipText
       
.caption = ""
       
.backcolor = RGB(255,247,230)
       
.Autosize = .t.
       
.visible = .f.
    ENDWITH
ENDIF
DO CASE
    CASE toObject
.baseClass="Form"
        FOR EACH locontrol IN toObject
.Controls
           
this.recursive_box(loControl,.t.)
        ENDFOR

    CASE toObject
.baseClass="Container"
        FOR EACH locontrol IN toObject
.Controls
           
this.recursive_box(loControl,.t.)
        ENDFOR    
    CASE toObject
.baseclass="Pageframe"
        FOR EACH locontrol IN toObject
.Pages
           
this.recursive_box(loControl,.t.)
        ENDFOR    
   
    CASE toObject
.baseclass="Page"

       
        FOR EACH locontrol IN toObject
.Controls
           
this.recursive_box(loControl,.t.)
        ENDFOR    
       
       
    CASE INLIST
(toObject.baseclass,"Textbox","Editbox","Listbox","Combobox","Spinner","Checkbox")
        BINDEVENT
(toObject,"GotFocus",thisform,"dlg_label_show")
        BINDEVENT
(toObject,"LostFocus",thisform,"dlg_label_Hide")

   
ENDCASE


*METHOD dlg_label_show
lnEvents
= AEVENTS(laEvents,0)
IF m
.lnEvents > 0
    loObj
= laEvents[1]
    IF
!EMPTY(loObj.toolTipTExt)
        WITH
this.lbl_tooltiptext
           
.caption = loObj.ToolTipTExt
           
.top = OBJTOCLIENT(loObj,1) + 1
           
.left = OBJTOCLIENT(loObj,2) + OBJTOCLIENT(loObj,3) + 1
           
.Visible = .t.
        ENDWITH
    ENDIF
ENDIF

* Method dlg_label_Hide
this.lbl_tooltiptext.Visible = .f.

Carlos Hidalgo

unread,
Nov 18, 2016, 12:19:02 PM11/18/16
to publice...@googlegroups.com
Gracias..
Uso Fox7  no me funciona el BINDEVENT 
Hare lo otro que me sugeriste.

Carlos Hidalgo

unread,
Nov 18, 2016, 1:45:08 PM11/18/16
to publice...@googlegroups.com

Lo hice de esta forma 
inserte un label 
visible=.F.
name=Ayuda
Autsize=.t. etc etc

Cree un procedimiento y lo agregue a mi form

PROCEDURE Ayuda(loThis as Object,cMensaje as Character)
loThis.Parent.ayuda.Left=loThis.Left+1
loThis.Parent.ayuda.top=loThis.top+loThis.Height+1
loThis.Parent.ayuda.Caption=cMensaje
loThis.Parent.ayuda.Visible= .T.
ENDPROC

y en Gotfocus del objeto que quiero que apareza

Ayuda(This,"F3 Consultar, F4 Agregar")

Y en LostFocus del mismo objeto

This.Parent.Ayuda.Visible= .F. 

Funciona como lo quería...
Alguna sugerencia o comentario es bien recibido. (en aras de seguir aprendiendo)

Saludos

Carlos Hidalgo

unread,
Nov 18, 2016, 2:14:17 PM11/18/16
to publice...@googlegroups.com
Imágenes integradas 1

Fidel Charny

unread,
Nov 18, 2016, 4:11:00 PM11/18/16
to Comunidad de Visual Foxpro en Español
Con ese código tendrás problemas si los controles están sobre un container o page de pageframe.
En primer lugar, la referencia al label que muestra ayuda, es Thisform.ayuda, indudablemente, pues ahí es donde lo agregas. Si tu objeto está en un contenedor, obj.parent.ayuda te dará error.
En segundo lugar, la posición relativa al form te la dará ObjToClient(). La posición que tu tomas es respecto del objeto contenedor, que puede ser el form, un container, un container de container, un page de pageframe, un container en un page de pageframe, etc.

Dos cosas más: en la nomenclatura de variables, la "L" a la izquierda, significa variable Local. Distinguimos a los parámetros con la letra "t".
La segunda letra contando desde la izquierda, te da el tipo de dato. o:object, c:character, n:numeric, l:logical, d:date, t:datetime, x:indeterminado
Por otra parte, no es bueno colocar como nombre de variable This o thisform, porque resulta confusa la lectura.
PROCEDURE AYUDA
LPARAMETERS toControl, tcMensaje

Carlos Hidalgo

unread,
Nov 18, 2016, 4:34:09 PM11/18/16
to publice...@googlegroups.com
Analizando........
Analizando..................
Analizando.....................
Arreglando ......................
Reestructurando...........................

😀😀
Gracias... con eso tengo para divertirme el fin de semana...

Muy amable...

Carlos Hidalgo

unread,
Nov 18, 2016, 5:26:37 PM11/18/16
to publice...@googlegroups.com
Bueno..
Con la funcion ObjToClient() me ahorre el trabajo.. Gracias
Asi me quedo..

Ahora no importa desde donde se ejecute, siempre funcionara... (eso creo :-)


PROCEDURE MitoolTipText
LPARAMETERS toAyuda, toControl, tcMensaje
*toAyuda= Es el label insertado en el form1 con sus propiedades
* asemejando el texto que se muestra como TooltipText
* propiedad Visible= .F.
*toControl = es el control (Textbox,Combox,...) que en su evento
* SetFocus llama a este procedimiento
* --->MitoolTipText (thisform.ayuda,this," F3 Consultar, F4 Agregar ")
* y en su LostFocus lo oculta
* --->Thisfom.Ayuda.Visible= .F. 
*tcMensaje= Es el mensaje que quiero que aparezca

toAyuda.left=OBJTOCLIENT(toControl,2)+1
toAyuda.top=OBJTOCLIENT(toControl,1)+toControl.height+1
toAyuda.caption=TcMensaje
toAyuda.visible=.T.

ENDPROC





Fidel Charny

unread,
Nov 19, 2016, 9:16:47 AM11/19/16
to Comunidad de Visual Foxpro en Español
Una más y cerramos:
Escríbelo de este modo, porque con una sola referencia de objeto armás todo. No es solo un tema de comodidad de escritura.
WITH toAyuda
   
.left=OBJTOCLIENT(toControl,2)+1
   
.top=OBJTOCLIENT(toControl,1)+toControl.height+1
   
.caption=TcMensaje
   
.visible=.T.
ENDWITH

Carlos Hidalgo

unread,
Nov 19, 2016, 9:35:49 AM11/19/16
to publice...@googlegroups.com
Cierto, perdón.... Se me fue por alto el With...Endwith
Ahí estamos... 
Gracias Fidel por la ayuda..




Douglas Sánchez

unread,
Nov 19, 2016, 11:58:03 AM11/19/16
to publice...@googlegroups.com
Buena idea yo lo ampliaria si a funcion y le agrego otro parametro oForms,

Me copiaré la idea, esta wena. wena  buena..

El 18 de noviembre de 2016, 6:30, Fidel Charny <fjch...@gmail.com> escribió:

Carlos Hidalgo

unread,
Nov 19, 2016, 12:11:36 PM11/19/16
to publice...@googlegroups.com
👍

Hola Douglas
Si la puedes ampliar me la compartes... 

Saludos

Elides Paredes

unread,
Nov 20, 2016, 1:15:05 PM11/20/16
to Comunidad de Visual Foxpro en Español

Amigo   Carlos


Aunque solo lo tomé como ejemplo y no lo aplique, me sigue gustando ésto que conseguí hace tiempo en internet. Es muy simple crea una ventana pequeña que muestra un texto.

A ver si te sirve / Lo tomé de la siguiente dirección y lo traduje al cristiano..
Jajaja.


*!* Ventana de Ayuda al estilo de Window 
*!* Cuando creamos la ayuda de nuestra aplicación siempre queremos agregarle 
*!* ayuda personalizada..bueno este te puede servir y muy fácil.

*!* Ejemplo No 1

Declare integer Sleep in "kernel32" ;
Long dwMilliseconds


DEFINE WINDOW wAyuda ;
FROM 5,20 TO 9,45 ;
FONT 'MS SANS SERIF',8 ;
STYLE 'BN'  COLOR RGB(0,255,0,250,0,25)   && Define la ventana con fuente y estilo

ACTIVATE WINDOW wAyuda 
?'  Ventana en la posición'
?'     5,20 TO 9,45'
=sleep(3000)

* WAIT WINDOW "" TIMEOUT 15
RELEASE WINDOWS wAyuda

*!* Ejemplo No 2

DEFINE WINDOW wAyuda ;
FROM 2,20 TO 7,50 ;
FONT 'MS SANS SERIF',8 ;
STYLE 'BN' COLOR RGB(255,255,255,0,0,255)&&  Define la ventana con fuente y estilo
ACTIVATE WINDOW wAyuda 
?'  Otra ventanita'
?'    posición 2,20 TO 7,50'

=sleep(3000)
* WAIT  WINDOW ' ' TIMEOUT 15
RELEASE WINDOWS wAyuda  

Saludos 
Espero haber sido útil
Elides Paredes
Barquisimeto Venezuela

integral

unread,
Nov 20, 2016, 3:21:50 PM11/20/16
to Comunidad de Visual Foxpro en Español

Que tal Amigos :

Sin animo de desmerecer el trabajo aquí mostrado sobre el tema...

Les muestro en la imagen adjunta una nueva forma desde mi punto de vista mas actual en mostrar mensajes relacionados a un determinado control...

Saludos,

INTEGRAL
TIPO_MENSAJE_GLOBO.jpg

Carlos Hidalgo

unread,
Nov 20, 2016, 4:47:55 PM11/20/16
to publice...@googlegroups.com

Gracias por las sugerencias...
Amigo Elides.  Esa ventana la estoy usando en algunos casos... Ya la habia encontrado tambien.. :-)

Integral.
Esta interesante..  El detalle es el tamaño.  Para ese formulario (password) se ve bien..
Para mi form No muy se ajustaria porque tengo poco espacio en pantalla. Por eso estoy usando el tooltip text.
Gracias
Saludos

Edwin Duran

unread,
Nov 20, 2016, 8:51:27 PM11/20/16
to Comunidad de Visual Foxpro en Español
Saludos prueben la clase ctl32_balloontip.vcx de ctl32

Edwin Duran

unread,
Nov 20, 2016, 10:38:34 PM11/20/16
to Comunidad de Visual Foxpro en Español
miren esta otra clase
SysBalloon._zip
Reply all
Reply to author
Forward
0 new messages