Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Menu DropDown en Boton (https://www.clubdelphi.com/foros/showthread.php?t=13142)

lafirma 07-08-2004 01:51:42

Menu DropDown en Boton
 
Que tal grupo, estoy intentando desplegar un menu cuando hago clic en un boton (algo similar a lo que se consigue con los toolbutton de las toolbar), pero sucede que me aparece totalmente desalineado, quisiera alinear el popup menu para que aparezca justo arriba del boton, para que se vea mas 'pulido', pero el boton esta en un panel, asi que las propiedades Left y Top que uso para llamar al popup menu son relativas al panel y no al formulario por lo que aparece muy distante el menu del boton... como puedo solucionarlo?

jachguate 07-08-2004 02:27:53

boton.left + boton.parent.left
boton.top + boton.parent.top

¿no te serviria?

Hasta luego.

;)

Lepe 07-08-2004 10:41:04

Código Delphi [-]
var p:Tpoint;
begin
  p:= panel1.clienttoscreen(Point(boton.left,boton.top)); // pasamos coordenadas relativas a pantalla.
  popupmenu1.popup(p.x,p.y);
end;

saluditos

lafirma 07-08-2004 17:13:30

Cheke leke, agradezco a ambos, funciona bien, la verdad ya se me habia ocurrido algo como lo de Juan, pero queria corroborar otras posibles soluciones... :D

Lepe 09-08-2004 18:28:01

nada mejor que un foro para ese propósito no? :):d

DarkByte 10-08-2004 00:52:41

No vale poniendo el popupMenu en Left el TrackButton y asignando el Poppup al botón ???

roman 10-08-2004 01:26:51

Cita:

Empezado por DarkByte
No vale poniendo el popupMenu en Left el TrackButton y asignando el Poppup al botón ???

Según la ayuda de Delphi la propiedad TrackButton sólo funciona cuando el menú está asociado a un ToolBar Button. Por otro lado, aun suponiendo que funciona el problema es justo que el resultado no se vería muy 'pulido' ya que la posición del menú variaría según el punto específico donde el usuario presione el botón. Con la solución expuesta por Lepe el menú aparece siempre con su esquina superior izquierda alineada con la correspondiente esquina del botón, lo cual me parece era el objetivo original de lafirma.

// Saludos

lafirma 10-08-2004 18:13:04

En realidad lo que deseaba era que la esquina inferior izquierda del menu apareciera alineada con la esquina superior izquierda del boton, pero no lo he logrado, con las soluciones actuales aparece a veces, y a veces no, depende del numero de items (es que seran muchos botones con sus respectivos menus, es una clase). Supongo que deberia calcular el alto del menu para restarlo a la posicion del boton y que aparezca exactamente alineada, pero la propiedad height no existe en el popup menu.
Lo que busco es exactamente lo que se logra al asignar la propiedad PopupMenu del boton y activar dicho Popup mediante la tecla aplicacion de windows, de esa forma sale correctamente alineado (Solo cuando el boton tiene el enfoque). He estado explorando el codigo de la VCL y he visto que lo del popup menu es un mensaje de Windows, que Delphi captura en la clase TControl (no sé si se genera este mensaje al activar el popup mediante la tecla aplicacion :( ), pero no he encontrado nada de la tecla aplicacion y no he podido ver como lo logra al activar el menu mediante esta tecla.

Lepe 11-08-2004 11:51:24

Segun mis investigaciones un MenuItem tiene 20 pixeles de alto, y el popup menú es una ventana sin bordes, así que intenta partir de ahí, para contar los items y alinearlo como quieras.

Mis investigaciones han consistido en medir en tiempo de diseño el alto de un TmenuItem con un programa que realicé hace mucho tiempo, unas simples reglas horizontales y verticales en pixeles :D. No es nada científico, pero si un popup tiene 7 elementos, el alto final me daba 141 pixel, y el que tenia el foco, medía exactamente 20, useasé, que no va mal encaminado. Ojo: si utiliza las fuentes grandes pasa a ser 23 o 24 pixeles, esto no lo he corroborado "científicamente" :D por no querer reiniciar, si quieres pidemelo y te lo miro bien.

Comentas que a veces no sale bien.... la verdad, uso el ClientToScreen bastante y cuando no sale correctamente es porque he intercambiado los parámetros X e Y al pasarlo al método ClientToScreen :D .También puede que interfiera algo de lo que haces desde que calculas el punto y hasta que ordenas que salga el popup.

Saludos, espero te sirva de punto de partida.


La franja horaria es GMT +2. Ahora son las 03:19:58.

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