2010-03-26 4 views
7

Noté que la altura de un TToolButton aumenta cuando configura el estilo del botón en tbsDropdown. Puedo entender el aumento de ancho, por lo que el botón tiene espacio para dibujar la flecha hacia abajo, pero no estoy seguro de que sea necesario aumentar la altura.TTOolButton Height Grows with Style = tbsDropdown

Pasos para reproducir el problema (Delphi 2010, Windows 7 x64):

  • Añadir TToolBar a un formulario, showCaptions = True
  • Haga clic derecho para agregar un botón a la barra de herramientas
  • botón SET style = tbsDropDown y observe el botón crece en altura

el mismo aumento de la altura que sucede cuando hay imágenes asignadas a la barra de herramientas , en cuyo caso no es ALR con mucho más espacio vertical disponible en el botón para dibujar el menú desplegable. no alt text http://img440.imageshack.us/img440/1462/ttoolbar02.png alt text http://img291.imageshack.us/img291/966/ttoolbar01.png

es una solución para esto sin la piratería de la VCL, o se esta codificado en el control de Windows:

Aquí está un ejemplo visual?

Respuesta

3

Es parte del control subyacente de Windows. Una mirada rápida a ComCtrls muestra que al cambiar el TToolButton.Style se llama al método SetStyle. Si, en SetStyle, ShowCaptions es verdadero, entonces TToolBar.ButtonWidth y ButtonHeight se establecen en 0, y se llama a TToolButton.RecreateButtons.

RecreateButtons, a su vez, llama TToolBar.ResizeButtons, que simplemente envía (mensajes) un mensaje a la ToolBar usando

Perform(TB_AUTOSIZE, 0, 0); 

TB_AUTOSIZE está destinado a ser utilizado, de acuerdo con MSDN,

después de causar el tamaño de una barra de herramientas para cambiar configurando el botón o el tamaño del mapa de bits o agregando cadenas por primera vez.

Desde SetStyle conjuntos tanto la ButtonWidth y ButtonHeight a 0, este mensaje parecerían ser enviado correctamente.

1

Parece que algo está mal con la compatibilidad con el tema en el control de Windows subyacente. Desactive los temas de tiempo de ejecución (Proyecto/Opciones/Aplicación, desmarque la casilla "Habilitar temas de tiempo de ejecución"), ignore el aumento de alturas de botón en el momento del diseño (Delphi IDE usa temas) y ejecute la aplicación; verá alturas normales en los botones de la barra de herramientas.