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 

que hago mal?

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

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Gracias Enrique Responder citando

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
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: vaya despiste Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

si ya te entiendo, lo que pasa es que no encuentro la propiedad OnMouseOver, veo OnMuiseMove,OnmouseUp,onMouse down
Volver arriba
Mensaje    Asunto: Responder citando

Lo siento, lo escribí mal, se trata de OnMouseMove, evidentemente.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
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.