TRibbon does not show tabs
Asked Answered
R

1

7

I am running Delphi 2010 on both a 64 bit windows machine (Win 7), and a 32 bit windows machine (XP).

I am trying to learn how to use the TRibbon control.

I have been following the example in Marco Cantu's 2009 Handbook and watching YouTube Demos, but my control is not working like that as explained in the book or demos.

I added two tabs, by right clicking the control. However, the TRibbon looked as exactly as it does in my screenshot, when i drop it on the main form. It is not as high as the ones in the books or youtube demos.

I have tried the same thing on my Win 32 laptop running Windows Xp and Delphi 2010 and get the exact same results

here is what it looks like on my machine

64 bit laptop screenshot

here is what it is suppose to look like in a demo

from youtube video demo

Once again. When it drop it on the form, it does not take the shape and height as that as i see in the demos. Even when i add tabs. Did i do something wrong during my Delphi 2010 installation?

Riot answered 7/12, 2011 at 19:22 Comment(4)
Sounds odd. I just did exactly what you described and it behaved perfectly.Armoured
Ya, i kinda figured that would be the case for most people, since i see it in the demos work! However, it does not work for me. Its almost like i have a flawed version of Delphi 2010. I did a complete uninstall and re-install of Delphi 2010 and it still is acting the same wayRiot
I've never seen this happen before, it should not do that.Kight
+1. Took a while to reproduce, but it's a well-written question, and the included images helped visualize the problem. :) Should have upvoted earlier, but got lost in trying to figure out what caused it. Don't reinstall Delphi; you've found a real bug, AFAICT. See my answer below.Maladminister
M
8

I managed finally to reproduce the problem in Delphi XE (Update 1) on Win7 64 with Aero enabled. It seems that the size gets set wrong in the .DFM file, and because the Ribbon doesn't support manual resizing you can't visually fix it in the IDE (although it appears correctly at runtime) or in the Object Inspector. It occasionally appears correctly at runtime, but it seems that's sporadic as well.

It's a nasty bug, because it makes it impossible to design the Ribbon. You can add RibbonGroup items, and assign the ActionManager, and try and design it completely using the Structure Pane, but of course that's not a practical solution.

Fortunately, there's a pretty easy workaround, although it's annoying to have to do. :)

I managed twice to get the following workaround to function, but starting over it failed to work several times, so it's a possible way around it (no promises - worked in XE, consistently failed in XE2 Update 2):

  • Right-click on the Ribbon and add at least one tab.
  • Right click on the form in the IDE, and choose View as Text from the context (pop-up) menu.
  • Find the Ribbon control in the .dfm text, and change the Height from the 26 that the IDE assigned to 200. (The next step will adjust it, but that's fine - the 200 fixes the immediate problem.)
  • Right-click again, and choose View as Form, and the Ribbon should display correctly.

(I reported it in QC against XE2 Update 2, as the problem also exists there - QC #101642)

I traced it to TCustomRibbon.GetCaptionHeight, specifically

FCaptionHeight := Max(GetSystemMetrics(SM_CYCAPTION), 26);

It seems like the GetSystemMetrics call is returning something less than 26 on certain Win7 configurations (although I can't figure out why yet). There are a couple of commented lines in that method that seem to alter the result, but as I said they've been commented out.

The strange part is that in the TCustomRibbon.Create, the Height is set by a call to GetRibbonMetric(rmFullHeight), which sets the Result := cRibbonHeight + GetCaptionHeight;, and cRibbonHeight is a constant defined as cRibbonHeight = 117;.

Finally think I've tracked this down. In the declaration of TRibbon, there's a published property declaration:

published
   ...
  property Height default TCustomRibbon.cRibbonHeight;

Because this is the default, it appears that any other value means that the call to GetRibbonMetric mentioned above doesn't happen (see the TCustomRibbon.Create mentioned above), and the strange result from the call to GetSystemMetric causes the erroneous value 26 to be saved as the 'other value`. Wierd; will update the QC in the AM.

Addendum: Updated QC report with additional details.

Addendum: QC report opened in May 2012, but does not appear to have been resolved as of XE5 Update 1 (checked Jan 2014).

Maladminister answered 8/12, 2011 at 1:35 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.