Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-10-2011
jumasuro jumasuro is offline
Registrado
 
Registrado: feb 2007
Posts: 7
Poder: 0
jumasuro Va por buen camino
Problema con "MouseLeave" de un frame

Hola compañeros,
tengo un pequeño problema que no consigo solucionar y es el siguiente:
estoy intentando hacer una aplicación que despliegue un menú lateral en el escritorio, con varias opciones y que al pasar el ratón por cada opción se muestre otro formulario simulando un submenú con varias opciones más. Sería algo parecido al menú que aparece por ejemplo al pulsar la opción "Marcadores" del firefox, pero desplegado desde el lateral del escritorio.
En mi caso presento un formulario principal, con varias opciones desplegadas en vertical (cada una de esas opciones es un frame compuesto por una imagen (que mostrará un icono) y una label (para el nombre de la opción). Cuando paso el ratón por encima del frame (sin necesidad de hacer click) muestro una ventana que simula a un submenú con varias opciones más y alineado a la derecha del frame.
Para saber cuando el ratón sale de un frame y entra en otro frame (se debe ocultar el submenú del frame antiguo y mostrarse el submenú del nuevo frame) he añadido a la declaración del frame los procedimientos "MouseEnter" y "MouseLeave" siguiendo varios ejemplos del foro (no se si es la mejor solución, pero de todo lo que he probado esta es la que me ha parecido más óptima).
Cuando el ratón entra en el frame salta correctamente el evento "MouseEnter" y se muestra el "submenú", pero mi problema es que si el ratón pasa sobre la imagen o la label de ese frame, creo que salta el evento "MouseLeave" del frame, porque se cierra el submenú.
Como es lógico, el submenú sólo debería cerrarse una vez se sale totalmente del frame y no por pasar sobre cualquier componente contenido en el mismo.
Había pensado añadir un MouseEnter y un MouseLeave en la imagen y la label del componente para que hagan lo mismo que el frame, pero no lo he conseguido, y además imagino que se produciría un parpadeo molesto al cerrarse el "submenú" (por saltar el MouseLeave del frame) y abrirse de nuevo (por saltar el MouseEnter de la imagen o la label).
¿Como podría solucionar este problema?.

Como siempre muchas gracias por adelantado y un saludo.
Responder Con Cita
  #2  
Antiguo 31-10-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El siguiente código hará un beep solo si sales del formulario. Si el ratón se coloca sobre una imagen o un control en dicho formulario, no sonará:
Código Delphi [-]
type
  TForm1 = class(TForm)
  private
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
//......................................
 end;


procedure TForm1.CMMouseLeave(var Message: TMessage);
var
  P: TPoint;
  H: cardinal;
begin
  GetCursorPos(P);
  H:= WindowFromPoint(P);
  if not ((H = Handle) or (GetParent(H) = Handle)) then beep;
end;

Saludos.
Responder Con Cita
  #3  
Antiguo 02-11-2011
jumasuro jumasuro is offline
Registrado
 
Registrado: feb 2007
Posts: 7
Poder: 0
jumasuro Va por buen camino
Muchas gracias escafandra,
funciona de maravilla.

Un saludo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
"Me Gusta", "Compartir", "Gracias" movorack La Taberna 4 24-10-2010 14:45:59
El programa se queda "colgado" mientras copia y luego "despierta" NeWsP OOP 5 10-03-2010 22:05:40
"OBJECT OR CLASS TYPE REQUIRED" en "APPLICATION EXENAME" Xavierator Varios 3 27-10-2008 09:09:50
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53


La franja horaria es GMT +2. Ahora son las 18:43:09.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi