2011-02-03 19 views
5

Me gustaría resaltar los íconos de mi barra de herramientas cuando su acción asociada tiene su propiedad "marcada" establecida en verdadero. Me gustaría hacerlo de forma similar a como lo hizo Microsoft Office 2003, p. ver los iconos Negrita y alinear a la izquierda en esta imagen:¿Cómo puedo implementar los iconos resaltados de la barra de herramientas con Delphi?

Toolbar example

La imagen se dibuja con una caja alrededor de él y el fondo se ha cambiado a naranja.

¿Cómo podría implementar esto usando Delphi 2009?

Como beneficio adicional, ¿hay también una manera de hacer lo mismo con el icono en el menú para el elemento asociado? p.ej. como a continuación con las entradas de regla y de marcado:

Menu example


Seguimiento:

Gracias Andreas, por lo que es una respuesta sencilla y correcta a mi pregunta. Como programador de Delphi 4 convertido a Delphi 2009, no estaba lo suficientemente familiarizado con las adiciones de VCL de Delphi 5 a 7, por lo que el TActionManager, TActionToolbar y su funcionamiento no estaban en mi vocabulario Delphi. Y esto se basa en la capacidad de Delphi para usar un estilo similar al tema de Microsoft O/S.

Sin embargo, con su respuesta, y un poco de investigación utilizándola, confirmo que no quiero hacer esto de esta manera. Un hilo de Embarcadero iluminador: Menús emergentes: "Checked" items with icon no longer shown as sunken? con Peter Below aportando su experiencia, me hizo darme cuenta de que no quiero cambiar el tema de XP en absoluto, ya que eso hará las cosas bien a los usuarios de Vista y Windows 7, llevándolos regreso a la Edad de Bronce

El verdadero culpable aquí es que hay ciertas cosas que los temas de O/S quieren que respetes. Delphi intenta seguir las reglas. Puedo volver a XP, el estilo/tema XP y el XP Color Map. En este modo, los elementos marcados serán resaltados. Y esto es realmente todo lo que quería: resaltar los elementos marcados. Usé Office 2003 como ejemplo, porque era el tipo de hilighting que quería. Pero realmente no quería cambiar por completo los temas y forzar una nueva apariencia en mi programa. Especialmente haría que las cosas no parecieran naturales para los usuarios de Vista y Windows 7.

Lo que sería ideal es si pudiera tener otro conjunto de imágenes que se aplicarían cuando el objeto está controlado ... pero no hay una propiedad "CheckedImages". O una forma de modificar la imagen de forma programática o automática si está marcada (por ejemplo, como las imágenes desactivadas obtienen una versión en escala de grises de su imagen habilitada).

Todavía no me importaría escuchar de alguien si hay alguna forma de implementar esto u otra cosa que funcione igual de bien, sin cambiar el aspecto completo de mi programa.

+1

No TToolbar' el estándar '' y 'TMainMenu' TPopupMenu' hacer esto ya? ¡Y son incluso mejores que aquellos para los que tienes capturas de pantalla porque lo hacen de forma nativa! –

+0

Personalmente uso Toolbar2000 + SpTBX y los prefiero a los componentes de TToolbar y TActionManager. –

Respuesta

2

También se puede utilizar un ordinario TToolBar, con establecido en , me acabo de enterar.

Sample toolbar with dsGradient as DrawingStyle http://privat.rejbrand.se/toolbar2.png

+0

Esta es una solución mejor y más simple. No cambiará el tema general a XP como su otro método. Es una lástima que algunas de estas pequeñas características estén escondidas entre las aproximadamente 50 propiedades de una Barra Google y son tan difíciles de encontrar. – lkessler

13

Agregue TActionManager al formulario y cree algunas acciones (por ejemplo, negrita, cursiva y subrayado). Asegúrese de establecer la propiedad AutoCheck en verdadero para cada acción. A continuación, agregue un TActionToolbar. Haga doble clic en el administrador de acciones y arrastre las tres acciones a la barra de herramientas. Ahora agregue un TXPColorMap al formulario y asígnelo al administrador de acciones. Agregue también un TImageList y agregue iconos para negrita, cursiva y subrayado (de C:\Program Files (x86)\Common Files\CodeGear Shared\Images\GlyFX\Icons\BMP\16x16). Asigna la lista de imágenes al administrador de acciones.

Configure los iconos de la barra de herramientas para que muestren solo el glifo y no el título. Finalmente, establezca la propiedad Style del ActionManager en XP Style.El resultado final es lo que buscas.

Toolbar sample http://privat.rejbrand.se/toolbar.png

+1

+1 ¡Buen trabajo! ¡Algo sorprendido de ver que recomienda los componentes integrados en lugar de un componente personalizado! ;-) –

+0

@David: Yo también (o, los controles nativos de Windows). Pero esto responde su pregunta bastante bien, sin embargo. –

0

Sin cambiar todo el tema, creo que esto es algo que podría trabajar medio decentemente:

  1. Agregar imágenes adicionales a la ImageList, de manera que para una acción determinada, hay dos (o más) imágenes para elegir.

  2. En lugar de cambiar la propiedad "marcado" a verdadero o falso, cambie el ImageIndex a la imagen alternativa, por ejemplo:

    if WS = 1 then begin 
        ElTree.Align := alTop; 
    // TileTopBottomAction.Checked := true; --- take this out 
    // TileLeftRightAction.Checked := false; --- take this out 
        TileTopBottomAction.ImageIndex := 47; { hilighted image } 
        TileLeftRightAction.ImageIndex := 14; { regular image } 
    end 
    else begin 
        ElTree.Align := alLeft; 
    // TileTopBottomAction.Checked := false; --- take this out 
    // TileLeftRightAction.Checked := true; --- take this out 
        TileTopBottomAction.ImageIndex := 13; { regular image } 
        TileLeftRightAction.ImageIndex := 48; { hilighted image } 
    end; 
    

Ahora las imágenes se verá como esto en la barra de herramientas:

toolbar

y como esto en el menú:

menu

Lo bueno de este método es que también funciona en el menú y puede tener varias imágenes para representar lo que desea. Además, no arruinará el tema (XP, Vista, Windows 7, etc.) que el programa ha asumido.

La desventaja de este método es: Estás limitado a un área de imagen de 16x16 para jugar y no puedes dibujar un recuadro que esté fuera de esos límites como ocurre cuando configuras la propiedad "checked" como verdadera.

+1

No me gusta. Me gusta un rectángulo claro alrededor del elemento seleccionado/abajo. –

Cuestiones relacionadas