| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
manat Invitado
|
Publicado: Dom 29 May, 2005 4:48 pm Asunto: hints |
|
|
Hola
Alguien podria decirme como hago para colocarle un hint diferente a cada item de un treeview.
Gracias |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 29 May, 2005 6:17 pm Asunto: |
|
|
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 |
|
 |
mopa Cmdr

Registrado: 29 Jun 2004Mensajes: 145
|
Publicado: Lun 30 May, 2005 6:41 pm Asunto: |
|
|
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 |
|
 |
mopa Cmdr

Registrado: 29 Jun 2004Mensajes: 145
|
Publicado: Lun 30 May, 2005 6:43 pm Asunto: |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 31 May, 2005 1:48 pm Asunto: |
|
|
| 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 |
|
 |
mopa Cmdr

Registrado: 29 Jun 2004Mensajes: 145
|
Publicado: Mie 01 Jun, 2005 9:29 am Asunto: |
|
|
¡Muchisimas gracias!
Es justo lo que buscaba.
Un saludo, y gracias otra vez-
mopa |
|
| Volver arriba |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Lun 08 Dic, 2008 2:03 am Asunto: |
|
|
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 |
|
 |
|