Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

hints

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: hints Responder citando

Hola

Alguien podria decirme como hago para colocarle un hint diferente a cada item de un treeview.

Gracias
Volver arriba
Mensaje    Asunto: Responder citando

Hola, por si te sirve, aquí tienes una "chapucilla" donde usamos el mismo texto del nodo como hint. Al menos como base te puede servir, solo tendrías que cambiar la parte donde se lee el texto y poner en ese momento el que te interese según el nodo...

Debes ponerlo en el evento OnMouseMove del TreeView y no te olvides de poner a 'true' la propiedad 'ShowHint' del mismo:
Código:
TTreeView* tv = static_cast<TTreeView*>(Sender);
static int oldX, oldY;

if (oldX != X || oldY != Y)
{
    // Comprobamos que estamos sobre la etiqueta o icono de un nodo
    if (tv->GetHitTestInfoAt(X, Y).Contains(htOnItem))
    {
        TMessage msg;

        // Simulamos la salida del cursor del raton del control
        msg.Msg = WM_MOUSEMOVE;
        msg.LParam = 0;
        Application->HintMouseMessage(this, msg);

        // Averiguamos sobre que nodo nos encontramos
        TTreeNode* node = tv->GetNodeAt(X, Y);

        // Cambiamos el valor de "Hint" segun nos interese
        // En este ejemplo usaramos la misma etiqueta del nodo
        tv->Hint = node->Text;

        // Simulamos la entrada del cursor en las coordenadas actuales
        msg.Msg = WM_MOUSEMOVE;
        msg.LParamLo = X;
        msg.LParamHi = Y;
        Application->HintMouseMessage(tv, msg);
    }
    else
        tv->Hint = "";

    oldX = X;
    oldY = Y;
}

Lo que hace es muy simple, como sabes el texto que pones en la propiedad 'Hint' solo se muestra al entrar al control, pues aquí lo que hacemos es simular que salimos y entramos al control y comprobamos sobre que nodo estamos para cambiar el 'Hint'.

Por supuesto hay mas formas de hacerlo, pero esta es la más sencilla que se me ocurre.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Funciona a la perfeccion, me ha venido genial a mi tambien.

Recomiendo este hilo para Tips&Tricks, sera muy util.

Magnifico _Leo.

Un saludo.
mopa
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Me gustaria hacer lo mismo con los distintos Panels de un status bar, pero no existe o no encuentro ningun metodo para saber sobre que Panel me encuentro dadas las coordenadas del raton.

¿Es posible?

Un saludo.
mopa
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Cita:
Me gustaria hacer lo mismo con los distintos Panels de un status bar, pero no existe o no encuentro ningun metodo para saber sobre que Panel me encuentro dadas las coordenadas del raton

StatusBar no tiene un método que nos indique sobre que panel se encuentra, pero lo podemos saber según el ancho de los mismos:
Código:
TStatusBar* sb = static_cast<TStatusBar*>(Sender);
TStatusPanel* panel = 0;
static int oldX, oldY;
int i = 0, total = 0;

if (oldX != X || oldY != Y)
{
    // Averiguamos sobre que panel estamos  <--
    while (i<sb->Panels->Count && total<X)
    {
        panel = sb->Panels->Items[i++];
        total += panel->Width;
    }

    if (panel)
    {
        TMessage msg;

        // Simulamos la salida del cursor del raton del control
        msg.Msg = WM_MOUSEMOVE;
        msg.LParam = 0;
        Application->HintMouseMessage(this, msg);

        ///////////////////////////////////////////////////////
        // Cambiamos el valor de "Hint" segun nos interese
        // En este ejemplo usaramos el indice y texto del panel
        sb->Hint = "Panel nº: " + IntToStr(panel->Index)
            + "\nTexto: " + panel->Text;
        ///////////////////////////////////////////////////////

        // Añadimos esta linea para evitar problemas con AutoHint
        sb->Hint = sb->Hint + "|";

        // Simulamos la entrada del cursor en las coordenadas actuales
        msg.Msg = WM_MOUSEMOVE;
        msg.LParamLo = X;
        msg.LParamHi = Y;
        Application->HintMouseMessage(sb, msg);
    }
    else
        sb->Hint = "";

    oldX = X;
    oldY = Y;
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

¡Muchisimas gracias!

Es justo lo que buscaba.

Un saludo, y gracias otra vez-
mopa
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

hola _Leo como puedo hacer lo siguiente
tengo varios labels y deseo que al darle clic derecho me salga un mensaje que diga ayuda (este mensaje ya lo tengo en un PopupMenu , cuando le doy clic sobre ayuda me debria mandar al hint del label seleccionado en este caso un text(ya esto esta solucionadao por el sender, pero si muevo el cursor no me sale en hint , como le hago para que aunque moueva el cursor me salga el mensaje del hint del label?
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.