Club Delphi  
    FTP   CCD     Enlaces   Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Desplegado
  #1  
Antiguo 17-04-2005
Avatar de Sotrono
Sotrono Sotrono is offline
Miembro
 
Registrado: abr 2004
Ubicación: Berisso - Buenos Aires - Argentina
Posts: 394
Sotrono Va por buen camino
Problema con PopupMenu

Hola, como va?
Tengo un problema con un Popup: con el evento OnMouseUp o Down del form o cualquier otro componente muestro el Popup en las coordenadas X e Y del mouse.
El problema es que el el Popup me sale en cualquier lado: Cuando el Form esta a maximizado me sale un poquito mas arriba del puntero del mouse, pero cuando la ventana es mas chica me sale mucho mas a la izquierda y arriba.
Probe haciendo lo mismo pero en vez de mostrar el PopupMenu muevo un Edit a las coordenadas X e Y y funciona bien, asique el problema esta en el PopupMenu.
__________________
No hagas hoy lo que puedes dejar para mañana!!!
Responder Con Cita
  #2  
Antiguo 17-04-2005
dec dec is offline
Moderador
 
Registrado: dic 2004
Posts: 11.428
dec Va por buen camino
¿Y si lo asignas a la propiedad PopupMenu ?

Hola,

Esto es una obviedad, así que no puedo sino pensar que algo se me escapa: me disculpo de antemano contigo, pero, ¿porqué no asignas el PopupMenu a la propiedad correspondiente del formulario y/o componente en cuestión?

En todo caso, y, aunque creo recordar que en algún sitio he visto lo mismo hecho de otro modo (tal vez mejor) puedes probar con esto:

Código Delphi [-]
  
  procedure TForm.FormMouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
  begin
    // if(Button = mbRight) then
    PopupMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
  end;

Última edición por dec fecha: 17-04-2005 a las 23:39:55. Razón: (Ampliación del texto)
Responder Con Cita
  #3  
Antiguo 18-04-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 18.445
roman Va por buen camino
No es que el menú salga en cualquier lado sino que sale desplazado de la posición donde esperas que aparezca. Prueba haciendo click sucesivamente en distintos puntos y verás que el desplazamiento siempre es el mismo.

Lo que sucede es que los eventos OnMouseDown y OnMouseUp te pasan las coordenadas relativas al control mientras que el método Popup del menú espera coordenadas relativas a la pantalla.

Así, si das el click en las coordenadas (10, 10) del control, el menú aparecerá en las coordenadas (10, 10) pero de la pantalla.

Para remediar esto basta que conviertas las coordenadas.

Por ejemplo, si el control es un ListBox:


Código Delphi [-]
procedure ListBox1MouseUp(...);
var
  Pt: TPoint;

begin
  Pt := Point(X, Y);
  Pt := ListBox1.ClientToScreen(Pt);

  PopupMenu1.PopUp(Pt.X, Pt.Y);
end;

// Saludos
__________________

Menos reyes y más elefantes
http://clubdelphi.com/correo_contacto_clubdelphi.png
Responder Con Cita
  #4  
Antiguo 18-04-2005
dec dec is offline
Moderador
 
Registrado: dic 2004
Posts: 11.428
dec Va por buen camino
Así es como roman dice

Hola,

Antes me referí a otra forma de conseguir lo mismo acaso más acertada y que no recordaba exactamente. Pues bien, lo que no recordaba era justamente lo que roman ha indicado en el código que ha escrito y se puede ver más arriba.
Responder Con Cita
Respuesta


Herramientas
Desplegado

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


La franja horaria es GMT +2. Ahora son las 08:19:52.


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