![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
PopupMenu con SpeedButton
Este es un viejo problema que nunca he podido resolver.
Tengo un SpeedButton y quiero desplegar un PopupMenu al oprimirlo. Con exactitud lo que deseo es lo siguiente: 1. Al oprimir el botón éste debe aparecer sumido y el menú desplegado 2. Al cancelar el menú o seleccionar una opción el botón debe volver a su posicion normal 3. Si el menú está desplegado y se hace click sobre el botón entonces el menú debe cerrarse y el botón regresar a su posición normal. Los resultados que obtengo son: 1. Si uso el evento OnClick del botón para desplegar el menú, el botón se sume pero recupera inmediatamente su posición normal mientras el menú está desplegado. 2. Si uso el evento OnMouseDown el botón no se sume y cuando cierro el menú el botón se queda sumido. 3. Si uso el evento OnMouseUp el botón se sume mienras se despliega el menú y recupera su posición al cerrarse el menú pero si el menú está desplegado y hago click en el botón entonces el menú se cierra pero se abre inmediatamente de nuevo. En otras palabras, quiero que el comportamiento sea como el de un ToolButton en una ToolBar pero no me apetece usar una ToolBar. // Gracias |
#2
|
|||
|
|||
Cita:
![]() A ver, lo máximo que he conseguido es esto, a lo mejor te ayuda Código:
procedure TForm1.SpeedButton1Click(Sender: TObject); begin if SpeedButton1.GroupIndex = 0 then SpeedButton1.GroupIndex := 1 else begin PopupMenu1.Popup(Self.Left + SpeedButton1.Left, Self.Top + SpeedButton1.Top + (SpeedButton1.Height*2)); SpeedButton1.GroupIndex := 0; end; end; ![]() |
#3
|
||||
|
||||
Cita:
Cita:
Bueno, seguiré intentando. Te mando un saludo |
#4
|
|||
|
|||
Cita:
![]() |
#5
|
||||
|
||||
Gracias Amilius
Verás, intenté algo similar usado una variable booleana: Código:
if not MenuAbierto then begin MenuAbierto := true; PopupMenu.Popup(...); MenuAbierto := false; end; // Saludos |
#6
|
||||
|
||||
Ya sé que es un hilo un poco antiguo, pero me he topado con él buscando sobre algo parecido a lo que plantea Roman... y yo lo tengo resuelto (creo).
Si tenemos un formulario (wPrincipal), un SpeedButton (btPruebas) y un PopupMenu (pmPruebas) al que le he añadido un par de Items..
Creo que esto es lo que se busca... Yo, partiendo de aquí, tengo otro problemilla... pero primero intentaré buscar (¡lo que se aprende buscando!) y si no consigo nada ya postearé un hilo para buscar ayuda ![]()
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin) |
#7
|
||||
|
||||
![]() Bueno, pues ya está
![]() ¿Porqué todo esto? Tenía, como Román, un SpeedButton que me despliega un Popup y lo que quería: si no se seleccionaba nada en el menú, levantar el botón. Y si se seleccionaba algo que saliera un formulario pero que se viera que el botón seguía abajo... Al principio, sin el ProcessMessages, puse un btPrueba.Down := False antes del ShowMessage del click del menu, pero eso causaba que se viera al botón levantarse y volverse a presionar... y no me gustaba. Pues esa es la historia... espero que no haya aburrido a nadie ![]() ![]() Saludos,
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin) |
![]() |
|
|
![]() |
|