Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TToolButton Height Grows with Style = tbsDropdown

Tags:

delphi

I noticed that the height of a TToolButton increases when you set the button's Style to tbsDropdown. I can understand the width increasing, so the button has space to draw the down arrow, but I'm not sure a height increase is necessary.

Steps to reproduce the issue (Delphi 2010, Windows 7 x64):

  • Add TToolbar to a form, ShowCaptions=True
  • Right click to add a button to the Toolbar
  • Set button Style=tbsDropDown and notice the button grows in height

The same height increase happens when there are images assigned to the toolbar, in which case there is already plenty more vertical space available in the button to draw the drop down.

Here's a visual example: alt text http://img440.imageshack.us/img440/1462/ttoolbar02.png alt text http://img291.imageshack.us/img291/966/ttoolbar01.png

Is there a workaround for this without hacking the VCL, or is this hardcoded into the Windows control?

like image 797
smartins Avatar asked Mar 26 '10 09:03

smartins


2 Answers

It's part of the underlying Windows control. A quick look into ComCtrls shows that changing the TToolButton.Style calls it's SetStyle method. If, in SetStyle, ShowCaptions is True then the TToolBar.ButtonWidth and ButtonHeight are both set to 0, and TToolButton.RecreateButtons is called.

RecreateButtons, in turn, calls TToolBar.ResizeButtons, which simply sends (posts) a message to the ToolBar using

Perform(TB_AUTOSIZE, 0, 0);

TB_AUTOSIZE is intended to be used, according to MSDN,

after causing the size of a toolbar to change either by setting the button or bitmap size or by adding strings for the first time.

Since SetStyle sets both the ButtonWidth and ButtonHeight to 0, this message would seem to be correctly sent.

like image 177
Ken White Avatar answered Sep 30 '22 13:09

Ken White


Looks like something is wrong with the theme support in underlying windows control. Switch off the runtime themes (Project/Options/Application, uncheck "Enable runtime themes" checkbox), ignore the increased button heights at design time (Delphi IDE uses themes) and run the application - you will see normal heights of the toolbar buttons.

like image 43
kludg Avatar answered Sep 30 '22 12:09

kludg