Office 2007/2010团队的功能区荣誉是用户的(菜单)字体大小.
在Windows功能区框架丝带(通过MS画图,和我的应用程序中使用)忽略了用户的(即我)字体的喜好.
截图显示:

如何获取Windows Ribbon Framework功能区以符合用户的字体大小?
没有单一的"Windows字体".允许用户配置六种不同的字体:
Office团队的功能区使用菜单字体,这是有道理的,因为功能区是一个菜单.您可以使用以下方式检索菜单字体:
//Win32
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, ref nonClientMetrics, 0);
nonClientMetrics.lfMenuFont;
//.NET
SystemFonts.MenuFont;
//Delphi
TScreen.MenuFont
Run Code Online (Sandbox Code Playgroud)
色带颜色:
默认情况下,功能区不符合用户的配色方案(请在我的屏幕截图中注明蓝色条带,我的棕色玻璃颜色).这里是一个API来改变颜色的色带,你可以在第三色带(一个在我的应用程序托管)看到.
//change ribbon background color
IPropertyStore(framework).SetValue(UI_PKEY_GlobalBackgroundColor, glassColor);
//change ribbon font color
IPropertyStore(framework).SetValue(UI_PKEY_GlobalTextColor, Color.Black);
Run Code Online (Sandbox Code Playgroud)
我们有一个使用Windows Ribbon Framework进行UI 的应用程序.该应用程序本身是用Delphi编写的,并使用Windows Ribbon Framework for Delphi与功能区API进行交互.
我们的功能区XML将很少的命令放入快速访问工具栏.然后,使用可以通过使用内置功能区机制(选择下拉/下拉按钮并单击命令名称)或选择More commands打开配置对话框的命令来删除/添加命令.
我遇到的问题是我无法找到一种方法来获取QA集合中的当前命令状态(无论它们是否可见).
在上面的示例(图片)中,我想检测前五个命令是否被检查,而最后一个命令不是这样,我可以相应地准备配置对话框.
枚举IUICollection和访问存储在里面的项目我没有问题.我也可以获得UI_PKEY_CommandId每个项目.但是,我无法找到读取已检查/未检查状态的方法.我尝试阅读UI_PKEY_BooleanValue和UI_PKEY_Enabled集合中的所有项目,但他们没有返回该状态.
我也尝试过监视,IUICommandHandler.UpdateProperty但是当选中/取消选中此项时,它不会被调用(除了用UI_PKEY_Label键调用它).
Ribbon API甚至支持此功能吗?
如何更改Windows Ribbon Framwork的UIRibbon 使用的字体和字体大小?
功能区使用的字体与用户选择的字体与Windows首选项不匹配 - 这是我的应用程序使用的首选项.这意味着随着Windows中的字体变大,功能区变小.
请注意每个屏幕截图中的功能区如何变小:



你可以看到,当我们到达16pt时,功能区上的文字很难阅读.
用户可以将Windows配置为使用其首选字体大小,例如:
和他们喜欢的字体,例如:
但Windows Ribbon Framework默认使用的字体不是用户的首选项.
编辑:将图片向上移动以捕捉被闪亮的东西吸引的松鼠.
编辑2:添加另一张彩色图片,以获得一个凹凸.
编辑3:编辑以获得凹凸
编辑4:添加另一张不同的图片以获得凹凸
功能区允许自定义功能区的颜色.
以下代码片段用于设置UI_PKEY_GlobalBackgroundColor功能区.在这种情况下,我使用的颜色是用户当前选择的Aero配色方案:
IUIFramework framework;
...
TColor glass = Dwm.GetColorizationColor();
VarCast(v, ColorToUIHSB(glass), UI_PKEY_GlobalBackgroundColor.pid);
IPropertyStore ps = framework as IPropertyStore;
ps.SetValue(UI_PKEY_GlobalBackgroundColor, PROPVARIANT(v));
ps.Commit;
Run Code Online (Sandbox Code Playgroud)
现在,色带现在已着色,以匹配Windows的配色方案: …
delphi winapi ribbon user-preferences windows-ribbon-framework
我有一个RibbonComboBox用于设置字体大小.它有一个RibbonGallery列出各种字体大小,显示在适当的FontSize:
<r:RibbonComboBox DataContext="{x:Static vm:RibbonDataModel.FontSizeComboBoxData}"
SelectionBoxWidth="30">
<r:RibbonGallery MaxColumnCount="1"
Command="{Binding Command}"
CommandParameter="{Binding SelectedItem}">
<r:RibbonGallery.GalleryItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding}"
FontSize="{Binding}" />
</Grid>
</DataTemplate>
</r:RibbonGallery.GalleryItemTemplate>
</r:RibbonGallery>
</r:RibbonComboBox>
Run Code Online (Sandbox Code Playgroud)
编辑这是我的ViewModel:
public static RibbonDataModel
{
public static GalleryData<object> FontSizeComboBoxData
{
get
{
lock (LockObject)
{
const string key = "Font Size";
if (!DataCollection.ContainsKey(key))
{
var value = new GalleryData<object>
{
Command = HtmlDocumentCommands.ChangeFontSize,
Label = "Change Font Size",
ToolTipDescription = "Set the font to a specific size.",
ToolTipTitle = "Change …Run Code Online (Sandbox Code Playgroud) wpf ribbon ribbon-control windows-ribbon-framework ribboncontrolslibrary
我在64位Windows机器(Win 7)和32位Windows机器(XP)上运行Delphi 2010.
我正在尝试学习如何使用TRibbon控件.
我一直在关注Marco Cantu的2009年手册中的例子并观看YouTube演示,但我的控制并没有像书中所解释的那样工作.
我通过右键单击控件添加了两个选项卡.然而,当我将它放在主窗体上时,它与我的截图中的TRibbon完全一样.它没有书本或youtube演示中那么高.
我在运行Windows Xp和Delphi 2010的Win 32笔记本电脑上尝试了相同的操作并获得了完全相同的结果
这是我的机器上的样子

这是在演示中看起来的样子

再来一次.当它放在表格上时,它不会像我在演示中看到的那样形状和高度.即使我添加标签.在我的Delphi 2010安装过程中,我做错了什么?
我正在Win32 API中创建一个使用现代Ribbon样式UI的应用程序.我已经成功测试了SampleRibbon程序.我遇到的唯一问题是,如何检测功能区栏的X和Y坐标?当我在(0,0)处绘制一个控件时,它会隐藏在功能区栏后面.但我不希望它隐藏在酒吧后面.是否有任何功能来获取功能区栏的坐标,以便我可以在功能区下方自动绘制控件.