2010-01-06 11 views
9

Microsoft User Experience Interaction Guidelines de dar algunas directrices de interfaz de usuario para cuándo utilizar un botón de menú:Creación de un botón de menú en Windows

http://i.msdn.microsoft.com/Aa511453.command51(en-us,MSDN.10).png

Cómo creo uno de estos botones de menú? He encontrado información sobre

  • cómo crear un botón de división en Vista y, sobre
  • cómo crear un botón de barra de herramientas con un menú desplegable
  • cómo crear un pulsador manual regular y cablear un OnClick controlador de eventos que muestra un menú

Pero, ¿hay alguna manera estándar de crear un botón, no en una barra de herramientas, con el pequeño triángulo descendente, que automáticamente aparece un menú cuando se hace clic?

(estoy usando Delphi/C++ Builder, pero otras soluciones son bienvenidos.)

Respuesta

11

Puede utilizar el OnClick para forzar la ventana emergente, y por coherencia no utilizar la posición del cursor, sino más bien la posición de control.

procedure TForm1.Button1Click(Sender: TObject); 
var 
    pt : TPoint; 
begin 
    Pt.X := Button1.Left; 
    Pt.Y := Button1.Top+Button1.Height; 
    pt := ClientToScreen(Pt); 
    PopupMenu1.Popup(pt.x,pt.y); 
end; 

A continuación, puede añadir el "glifo" utilizando un botón de Delphi 2010, o una versión anterior TBitBtn y asignar la propiedad de mapa de bits/glifo a una imagen adecuada y alinear a la derecha.

+3

También es posible usar el pequeño triángulo carácter ▾ que apunta hacia abajo (http://www.fileformat.info/info/unicode/char/25be/index.htm) –

+0

Qué tengo que hacer nada especial para conseguir que el triángulo para mostrar ¿arriba? Se presenta como una casilla (carácter no reconocido) cuando lo intento en mis controles. –

+0

Si no puede estar seguro de tener una fuente con el carácter deseado, entonces la mejor idea es un botón de bit con un glifo alineado a la derecha. Es posible que pueda solicitar al sistema operativo una imagen integrada apropiada, pero ese es un tema para una pregunta por separado. –

4

Usted no menciona la versión de Delphi que está utilizando, pero en Delphi 2010 TButton tiene nuevas propiedades de este : DropDownList que se puede asociar con un TPopupMenu para definir los elementos del menú, y Style que se puede establecer en bsSplitButton.

Esto produce un botón que puede presionar que también tiene una flecha desplegable a la derecha del mismo. Para hacer que el menú emergente al hacer clic a la izquierda de la flecha este código en el botón haga clic en manejar debería hacer el trabajo.

procedure TForm1.Button1Click(Sender: TObject); 
var 
    CursorPos: TPoint; 
begin 
    GetCursorPos(CursorPos); 
    PopupMenu1.Popup(CursorPos.X, CursorPos.Y); 
end; 

en versiones anteriores de Delphi Creo que tenía que usar TToolBar.

+0

bsSplitButton hace el desplegable, pero no cuando se hace clic en el botón a la izquierda del divisor. Más fácil de manejar en onclick para procesar ambos métodos. – skamradt

+0

vi cómo hacer botones de división (también disponibles en Delphi 2009, que estamos utilizando), pero documentos de Microsoft describir botones de menú a diferencia de los dos botones de división y botones, y parece muy extraño que la única manera de hacer una el botón de menú es para simular uno con OnClick. –

+1

No es una * simulación *, Josh. ¿Qué piensas que hacen los botones de menú "reales", si no muestran un menú cuando se les hace clic? Quiero decir, podrías hacer un componente TMenuButton, pero todo lo que haría es anular su método 'Click' para mostrar su propiedad' PopupMenu' en lugar de llamar al manejador de eventos 'OnClick'. Entonces, solo guardarías una llamada a función. –

Cuestiones relacionadas