| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Lun 17 Nov, 2008 4:21 pm Asunto: Cambiar el color del hint de un listview no de la aplicación |
|
|
Pues eso, me gustaría saber si alguien conoce el código para cambiar el color del Hint de un TListView, en la aplicación hay otros hints que deben quedar igual, únicamente debe cambiar el color de fondo de los hints del TlistView. Si el ItemIndex es par un color y si es impar otro color. El código para combrobar si el index es par o impar ya lo controlo, únicamente necesito el código para cambiar el color de fondo. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 17 Nov, 2008 5:57 pm Asunto: |
|
|
Puedes usar el evento OnShowHint del componente TApplicationEvents:
| Código: | void __fastcall TForm1::ApplicationEvents1ShowHint(AnsiString &HintStr,
bool &CanShow, THintInfo &HintInfo)
{
if (HintInfo.HintControl->ClassNameIs("TListView"))
HintInfo.HintColor = clRed;
}
|
|
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Lun 17 Nov, 2008 6:32 pm Asunto: |
|
|
Muchas gracias _Leo por tu interés, me funciona correctamente pero sólo cuando quiere, este es el código que utilizo:
| Código: |
void __fastcall TForm1::ApplicationEvents1ShowHint(AnsiString &HintStr,
bool &CanShow, THintInfo &HintInfo)
{
if (ListView1->Items->Count>0){
if (HintInfo.HintControl->ClassNameIs("TListView")){
if (ListView1->ItemIndex & 1){ //comprobar si el index es par
HintInfo.HintColor = clRed;
}
else {
HintInfo.HintColor = clSilver;
}
}
}
}
|
Tal vez el fallo esté en la línea en la que compruebo si el index es par o impar. No lo se, en fin si no te importa en volver a hecharme una mano te estaré muy agradecido. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 17 Nov, 2008 8:11 pm Asunto: |
|
|
Yo lo veo correcto, aunque supongo que quizás no es el comportamiento que buscas. Si lo que quieres es que al pasar el cursor por encima de las líneas sin tener que seleccionarlas cambie el contenido y el color del hint puedes usar lo siguiente en el evento OnMouseMove del TListView:
| Código: | void __fastcall TForm1::ListView1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
TListView* lv = static_cast<TListView*>(Sender);
static int oldX, oldY;
if (oldX != X || oldY != Y)
{
LVHITTESTINFO hti;
hti.pt = Point(X, Y);
ListView_SubItemHitTest(lv->Handle, &hti);
// En hti.iItem tenemos el número de item/línea sobre el que estamos
// Como ejemplo mostramos en el hint su contenido:
if (hti.iItem > -1)
lv->Hint = lv->Items->Item[hti.iItem]->Caption;
else
lv->Hint = "";
// Ponemos en la propiedad Tag el item sobre el que esta
// el ratón para usarlo luego en el evento OnShowHint
lv->Tag = hti.iItem;
// Mostramos el Hint con retardo
TMessage msg = {0};
Application->HintMouseMessage(this, msg);
msg.LParamLo = X;
msg.LParamHi = Y;
Application->HintMouseMessage(lv, msg);
// y si lo queremos sin retardo:
// Application->ActivateHint(Mouse->CursorPos);
oldX = X;
oldY = Y;
}
} |
Y lo siguiente en el evento OnShowHint del TApplicationEvents:
| Código: | void __fastcall TForm1::ApplicationEvents1ShowHint(AnsiString &HintStr,
bool &CanShow, THintInfo &HintInfo)
{
if (HintInfo.HintControl->ClassNameIs("TListView"))
{
// Podemos usar la siguiente línea para
// que el hint tarde más en ocultarse
//HintInfo.HideTimeout = 50000;
// Comprobar si el index es par o impar
if (ListView1->Tag & 1)
HintInfo.HintColor = clRed;
else
HintInfo.HintColor = clSilver;
}
} |
Si no es esto dime realmente como quieres que se comporte y al hacer que, y modifico el ejemplo.. |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Lun 17 Nov, 2008 9:05 pm Asunto: |
|
|
Ahora si, eres el mejor. Sólo que en el evento OnInfoTip de mi ListView ya establezco el caption de mi hint en dos líneas (una encima de otra), ¿Se podría simplificar el código que me mandas quitando los caption de los hint? lo pregunto porque en tu ejemplo pones "Como ejemplo mostramos en el hint su contenido ". Si no lo dejo así que me funciona ok. Gracias otra vez. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 17 Nov, 2008 9:23 pm Asunto: |
|
|
En las versiones viejas no existe el OnInfoTip.. pero si estas usando una versión que si lo tiene también podrías hacer lo siguiente:
- No uses el evento OnMouseMove que puse anteriormente. En su lugar en el evento OnInfoTip podríamos poner algo así:
| Código: | void __fastcall TForm1::ListView1InfoTip(TObject *Sender, TListItem *Item,
AnsiString &InfoTip)
{
// Ponemos en la propiedad Tag el item sobre el que esta
// el ratón para usarlo luego en el evento OnShowHint
Item->ListView->Tag = Item->Index;
InfoTip = Item->Caption;
} |
El OnMouseMove te da la ventaja de que tienes mas control, por ejemplo si necesitaras detectar cuando el cursor esta sobre una columna en contreto, etc... |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mar 18 Nov, 2008 10:54 am Asunto: |
|
|
Muchas gracias _Leo. Doy por cerrado el tema. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
|