Página 1 de 1

Posible Bug con evento OnContextMenu

Publicado: Vie Abr 08, 2011 11:35 am
por Shadax
Buenos dí­as a todos.
He estado trasteando con el Evento "OnContextMenu" de un objeto y me he dado cuenta que, o bien la ayuda no está bien matizada o el cálculo de coordenadas para situar el objeto "oPopupMenu" es incorrecto.
Para exponer el problema voy a explicar ví­a imágenes y comentarios paso a paso cómo reproducirlo. Para los interesados, también voy a adjuntar un simple proyecto para que lo puedan descargar y testear en casa.
1. Objetos del formulario
Para empezar he creado un nuevo proyecto, he agregado un formulario y en él he agregado por este orden: Panel1, Splitter, Panel2 Y PopupMenu. El Panel1 tiene un "nAlign := alLEFT" y el Panel2 tiene un "nAlign := alCLIENT"

2. OnContextMenu sobre Panel1
Como se muestra en la imagen he cargado el evento "OnContextMenu" del Panel1 con la instrucción: "::ShowPopupMenu(::oPopupMenu1, nPosX, nPosY)" y lanza perfectamente el menú contextual.

3. OnContextMenu sobre Panel2
He cargado el evento "OnContextMenu" del Panel2 al igual que hice con el Panel1: "::ShowPopupMenu(::oPopupMenu1, nPosX, nPosY)" y lanza el menú contextual, pero erróneo. Véase que el clic derecho lo hice donde se aprecia el punto ROJO.

4. OnContextMenu sobre Panel1 con StatusBar Coordenadas
He repetido el punto 2, pero he agregado un objeto StatusBar en el que muestro las coordenadas actuales sobre el objeto que me muevo. Como puede apreciarse en la siguiente imagen, las coordenadas en las que hago clic derecho son X:11, Y:11 en el Panel1:

5. OnContextMenu sobre Panel2 con StatusBar Coordenadas
Ahora me voy desplazando por el Panel2 y la StatusBar me va pintando las coordenadas del Eje X y Eje Y por las que me encuentro. Puede apreciarse que las coordenadas X e Y son relativas al objeto por el que me desplazo ( algo lógico ). Pero al hacer clic derecho sobre el objeto para mostrar el menú contextual no deberí­a tomar esas coordenadas para mostrar el menú y si que lo hace:

Impresiones
El "problema" viene a raí­z del Splitter, puesto que al utilizarlo para crear 2 áreas los objetos del área de la derecha toman sus posiciones de manera relativa al área ( el "nLeft" y "nTop" del objeto en el área de la derecha sigue siendo 0 y 0, pese a estar en mitad del formulario ). Este hecho es correcto en sí­ mismo, pero invalida el comportamiento del método "ShowPopupMenu(oObjeto, nCoordenadaX, nCoordenadaY)" en cuanto utilices Splitters.
Nada, espero que sirva de algo esta información y os adjunto el proyecto que he usado para la demostración:

Attached files Test.zip (15.8 KB)Â

Posible Bug con evento OnContextMenu

Publicado: Jue Jul 07, 2011 11:54 am
por jose.luis
José, José, Ignacio,
¿Os ha dado tiempo a mirar esto? Me pasa exactamente lo mismo.
Saludos,
José Luis Capel
"Joan Ramón" escribió en el mensaje de
noticias:4d9ed6d7$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Buenos díƒÂ­as a todos.
He estado trasteando con el Evento "OnContextMenu" de un
objeto y me he dado cuenta que, o bien la ayuda no est탡
bien matizada o el c탡lculo de coordenadas para situar el
objeto "oPopupMenu" es incorrecto.
Para exponer el problema voy a explicar víƒÂ­a im탡genes y
comentarios paso a paso cíƒÂ³mo reproducirlo. Para los
interesados, tambiíƒÂ©n voy a adjuntar un simple proyecto para
que lo puedan descargar y testear en casa.
1. Objetos del formulario
Para empezar he creado un nuevo proyecto, he agregado un
formulario y en íƒÂ©l he agregado por este orden: Panel1,
Splitter, Panel2 Y PopupMenu. El Panel1 tiene un "nAlign :=
alLEFT" y el Panel2 tiene un "nAlign := alCLIENT"
2. OnContextMenu sobre Panel1
Como se muestra en la imagen he cargado el evento
"OnContextMenu" del Panel1 con la instrucciíƒÂ³n:
"::ShowPopupMenu(::oPopupMenu1, nPosX, nPosY)" y lanza
perfectamente el meníƒÂº contextual.
3. OnContextMenu sobre Panel2
He cargado el evento "OnContextMenu" del Panel2 al igual que
hice con el Panel1: "::ShowPopupMenu(::oPopupMenu1, nPosX,
nPosY)" y lanza el meníƒÂº contextual, pero erríƒÂ³neo. VíƒÂ©ase
que el clic derecho lo hice donde se aprecia el punto ROJO.
4. OnContextMenu sobre Panel1 con StatusBar Coordenadas
He repetido el punto 2, pero he agregado un objeto StatusBar
en el que muestro las coordenadas actuales sobre el objeto
que me muevo. Como puede apreciarse en la siguiente imagen,
las coordenadas en las que hago clic derecho son X:11, Y:11
en el Panel1:
5. OnContextMenu sobre Panel2 con StatusBar Coordenadas
Ahora me voy desplazando por el Panel2 y la StatusBar me va
pintando las coordenadas del Eje X y Eje Y por las que me
encuentro. Puede apreciarse que las coordenadas X e Y son
relativas al objeto por el que me desplazo ( algo líƒÂ³gico ).
Pero al hacer clic derecho sobre el objeto para mostrar el
meníƒÂº contextual no deberíƒÂ­a tomar esas coordenadas para
mostrar el meníƒÂº y si que lo hace:
Impresiones
El "problema" viene a raíƒÂ­z del Splitter, puesto que al
utilizarlo para crear 2 탡reas los objetos del 탡rea de la
derecha toman sus posiciones de manera relativa al 탡rea (
el "nLeft" y "nTop" del objeto en el 탡rea de la derecha
sigue siendo 0 y 0, pese a estar en mitad del formulario ).
Este hecho es correcto en síƒÂ­ mismo, pero invalida el
comportamiento del míƒÂ©todo "ShowPopupMenu(oObjeto,
nCoordenadaX, nCoordenadaY)" en cuanto utilices Splitters.
Nada, espero que sirva de algo esta informaciíƒÂ³n y os
adjunto el proyecto que he usado para la demostraciíƒÂ³n:

Posible Bug con evento OnContextMenu

Publicado: Jue Jul 07, 2011 2:30 pm
por ignacio
Falta simplemente la palabra 'oSender'
METHOD Panel2ContextMenu( oSender, nPosX, nPosY ) CLASS TForm1
oSender:ShowPopupMenu(::oPopupMenu1, nPosX, nPosY)
RETURN Nil
METHOD Panel1ContextMenu( oSender, nPosX, nPosY ) CLASS TForm1
oSender:ShowPopupMenu(::oPopupMenu1, nPosX, nPosY)
RETURN Nil