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


Registrado: 18 Ene 2004Mensajes: 218Ubicación: Palamos (Girona) España
|
Publicado: Vie 12 Nov, 2004 3:18 pm Asunto: que hago mal? |
|
|
hola compaeros/as intento cambiar la apariencia de unos TSpeedButton que tengo en mi aplicacion, al pasar el mouse sobre cualquiera de ellos.pero no obtengo el efecto deseado
hago lo siguiente:
| Código: |
void __fastcall TfrmPloteo::AparienciaNormal (int ControlActual)
{
if(cmdSistema->Tag != ControlActual)
cmdCerrar->Font->Color = clRed;
if(cmdRutas->Tag != ControlActual)
cmdRutas->Font->Color = clRed;
if(cmdMarcas->Tag != ControlActual)
cmdMarcas->Font->Color = clRed;
if(cmdAcercar->Tag != ControlActual)
cmdAcercar->Font->Color = clRed;
if(cmdVolver->Tag != ControlActual)
cmdVolver->Font->Color = clRed;
if(cmdAlejar->Tag != ControlActual)
cmdAlejar->Font->Color = clRed;
}
//---------------------------------------------------------------------------
void __fastcall TfrmPloteo::PanelMenuMouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
switch( ((TSpeedButton*)Sender)->Tag)
{
case 101:
cmdSistema->Font->Color = clMaroon;
AparienciaNormal(101);
break;
case 102:
cmdRutas->Font->Color = clMaroon;
AparienciaNormal(102);
break;
case 103:
cmdMarcas->Font->Color = clMaroon;
AparienciaNormal(103);
break;
case 104:
cmdAcercar->Font->Color = clMaroon;
AparienciaNormal(104);
break;
case 105:
cmdVolver->Font->Color = clMaroon;
AparienciaNormal(105);
break;
case 106:
cmdAlejar->Font->Color = clMaroon;
AparienciaNormal(106);
break;
}
}
|
_________________ El hombre es el unico ser que tropieza dos veces en la misma piedra ( en mi caso infinitas veces) |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Vie 12 Nov, 2004 4:58 pm Asunto: |
|
|
Hola, Picard, me temo que te complicas en exceso la vida.
Lo primero es: ¿Tienes asociado el evento PanelMenuMouseMove() a los 6 eventos OnMouseMove de cada uno de los 6 TSpeedButton? (Como no dices en tu mensaje qué es PanelMenu no puedo hacerme una idea de cómo lo tienes).
Segundo: es mejor hacer un nuevo TSpeedButton que apunte al que tenga el ratón encima en ese momento, ese será el que pintemos de marrón. Así te evitas el uso de etiquetas.
Además es mejor que en la función AparienciaNormal() pongas todo a rojo y después hagas el cambio a marrón.
La cosa quedaría así: | Código: | void __fastcall TForm1::AparienciaNormal (void)
{
SpeedButton1->Font->Color = clRed;
SpeedButton2->Font->Color = clRed;
SpeedButton3->Font->Color = clRed;
SpeedButton4->Font->Color = clRed;
SpeedButton5->Font->Color = clRed;
SpeedButton6->Font->Color = clRed;
}
//--------------------------------------------------------------------------- |
y el evento al que apuntan los 6 OnMouseMove: | Código: | void __fastcall TForm1::SpeedButton1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
AparienciaNormal();
TSpeedButton *sb = (TSpeedButton *)Sender;
sb->Font->Color = clMaroon;
}
//--------------------------------------------------------------------------- |
Todo ello, claro está, con los nombres que tú tienes.
Suerte. |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Vie 12 Nov, 2004 6:04 pm Asunto: Gracias Enrique |
|
|
Perdona, por no explicarme correctamente,en un TForm tengo un TPanel(PanelMenu lo utilizo en lugar de un TmainMenu por cuestiones esteticas y pq TmainMenu no puede ofrecerme unas funcionalidades que necesito)
el cual contiene una serie de TSpeedButton,yo, con ese codigo, pretendia que mediante la propiedad Tag de cada TSpeedButton capturase la tecla por la que pasaba el mouse y asi cambiara de color el caption,con este ejemplo que me has dado, solo consigo que al pasar por un TSpeedButton este si cambia el color del caption, pero no regresa al color original cuando dejo de estar sobre el con el mouse. yo recuerdo hacer hecho esto de esta forma en un mini curso de c++builder,pero ahora no me funciona.y el caso es que el codigo lo adapto correctamente.
gracias |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Vie 12 Nov, 2004 6:22 pm Asunto: |
|
|
No entiendo que no te funcione, a mí me va bien con el código tal cual te lo he mandado.
Un detalle: el evento OnMouseMove del PanelMenu no necesita estar asociado a la función PanelMenuMouseMove(), aunque esto no provoca el problema que propones.
Asegúrate de que los 6 botones tienen asociada la función PanelMouseMove() (yo le cambiaría el nombre a BotonesMouseMove() o algo que te despiste menos) y vuelve a postear el código que tienes ahora, a ver si vemos algo que tú no ves. |
|
| Volver arriba |
|
 |
Picard Master


Registrado: 18 Ene 2004Mensajes: 218Ubicación: Palamos (Girona) España
|
Publicado: Dom 14 Nov, 2004 12:23 pm Asunto: vaya despiste |
|
|
gracias Enrique funciona correctamente, adivina,jajaja no asocié los demas botones al evento OnMouseMove,pero por otra parte quisiera preguntarte si hay alguna forma de conseguir que al retirar el raton de un boton este vuelva a su estado original, ya que cuando por ejemplo salgo de encima de un boton sin ponerme sobre otro, este sigue con la apariencia que ha de tener cuando estoy sobre el.
gracias _________________ El hombre es el unico ser que tropieza dos veces en la misma piedra ( en mi caso infinitas veces) |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Dom 14 Nov, 2004 11:08 pm Asunto: |
|
|
Sólo se me ocurre que, ya que tienes los botones sobre un TPanel aproveches su evento OnMouseOver y pongas en él únicamente la función AparienciaNormal(), así, como al salir de los botones pasas sobre el panel (¿o no es así?) recuperarían todos ellos la apariencia normal.
Suerte. |
|
| Volver arriba |
|
 |
Picard Master


Registrado: 18 Ene 2004Mensajes: 218Ubicación: Palamos (Girona) España
|
Publicado: Lun 15 Nov, 2004 8:50 am Asunto: |
|
|
OnMouseOver O en OnmouseDonw? _________________ El hombre es el unico ser que tropieza dos veces en la misma piedra ( en mi caso infinitas veces) |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Lun 15 Nov, 2004 8:56 am Asunto: |
|
|
| Si lo colocas en OnMouseOver y el TPanel es algo más ancho y alto que los botones, al salirte de cualquier botón pasarás sobre el TPanel y provocarás el cambio de apariencia. Si lo colocas en OnMouseDown el usuario tendría que hacer un click sobre el TPanel para que se llevara a cabo el cambio. |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Lun 15 Nov, 2004 9:00 am Asunto: |
|
|
| si ya te entiendo, lo que pasa es que no encuentro la propiedad OnMouseOver, veo OnMuiseMove,OnmouseUp,onMouse down |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Lun 15 Nov, 2004 3:29 pm Asunto: |
|
|
| Lo siento, lo escribí mal, se trata de OnMouseMove, evidentemente. |
|
| Volver arriba |
|
 |
|