TToolButton Height Grows with Style = tbsDropdown
I noticed that the height of a TToolButton increases when you set the button's Style to tbsDro开发者_C百科pdown. 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?
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.
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.
精彩评论