vertical sublime menus horizontal hacer ejemplos desplegable crear como codigo delphi button popupmenu

delphi - sublime - menu desplegable vertical html



¿Cómo crear un botón con el menú desplegable? (4)

¿Hay alguna manera de mostrar el estilo del botón Atrás de IE / Firefox, botón de menú desplegable?


Por supuesto. Pon una barra de herramientas en la página. Haga clic derecho en la barra de herramientas, agregue un botón. Establezca el estilo del botón en tbsDropDown. Pon un PopupMenu en la página. Haga doble clic en PopupMenu para definir los elementos del menú. Luego, regrese al botón que creó y establezca su propiedad DropdownMenu para señalar el PopupMenu que acaba de crear.


Si no desea utilizar una barra de herramientas, las bibliotecas de raize (www.raize.com) y de editores exprés (www.DevExpress.com) tienen componentes que pueden hacer esto.


Supongo que te refieres a un botón que se despliega en un menú cuando se hace clic.

También puede simplemente codificar manualmente su botón hacer clic para desplegar un TPopupMenu debajo de él.

Ejemplo : elimine cualquier cosa con un TClickEvent (quizás un TButton) y un TPopupMenu en su formulario. Agregue algunos elementos de menú. A continuación, agregue el siguiente controlador de eventos OnClick:

procedure TForm86.Button1Click(Sender: TObject); var button: TControl; lowerLeft: TPoint; begin if Sender is TControl then begin button := TControl(Sender); lowerLeft := Point(button.Left, button.Top + Button.Height); lowerLeft := ClientToScreen(lowerLeft); PopupMenu1.Popup(lowerLeft.X, lowerLeft.Y); end; end;

Y viola! Como la magia. Podría incluirlo todo en un componente si planea reutilizarlo. Tal vez incluso venderlo en línea.

Nota: Si desea una demora, extraiga ese código en otro método y luego configure un temporizador OnClick y active el temporizador de OnMouseLeave. Luego, si el temporizador se dispara, puede llamar al método extraído. No estoy seguro de cómo lo haría con un clic en el teclado. No sé si Firefox, etc. lo admite.


La respuesta de Jim es genial, pero al principio no funcionó para mí. ClientToScreen usa el método de Form86, que solo es correcto si el botón está directamente en el formulario. Debería llamarse al método ClientToScreen del botón, así:

procedure TForm86.Button1Click(Sender: TObject); var button: TControl; lowerLeft: TPoint; begin if Sender is TControl then begin button := TControl(Sender); lowerLeft := Point(0, button.Height); lowerLeft := button.ClientToScreen(lowerLeft); PopupMenu1.Popup(lowerLeft.X, lowerLeft.Y); end; end;

Esto funciona sin importar dónde está el botón.