Windows带的框架:如何改变的字体面和尺寸?
-
27-09-2019 - |
题
你怎么变的字体、字体大小使用的 Windows带框架's UIRibbon?
字体使用的功能区不匹配的字体的用户已选择作为他们的窗户喜好-这是偏向我的应用程序使用。这意味着,作为字体在窗户变得更大,这带变得更小。
注意到如何的功能区变得更小,在每个截图:
Segoe UI9pt(Windows默认)
Segoe UI12磅(我用什么)
Segoe UI16点(什么样的客户使用)
你可以看到的时候,我们得到的16点,文本上的丝带很难阅读。
背景
用户可以配置Windows使用其首选的 字体大小, ,例如:
- 8pt
- 9pt
- 12磅
和他们的首选 字体, ,例如:
- 毫无衬线字体
- Microsoft无衬线字体
- 宋
- Segoe UI
- 宋体
但 Windows带框架 通过默认使用的字体 不 用户的优先选择。
编辑: 移动图片上抓到松鼠的吸引闪闪发光的东西。
编辑2: 增加的另一个丰富多彩的画面,以获得一个肿块。
编辑3: 编辑得到撞
编辑4: 增加的另一个不同的画面来得到一个撞
带不会允许自定义 颜色 的丝带。
以下代码碎片是用于设置 UI_PKEY_GlobalBackgroundColor
的丝带。在这种情况下,我使用的颜色是用户目前选择的航空的颜色方案:
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;
现在的功能区现在是彩色匹配颜色方案的窗口:
但是我找不到的字体/尺寸。
注: 而丝带 可 荣誉的用户的新闻部设置的,这不是 此 问题。
它的工作在2010年Outlook
这可能是有帮助的注意,Outlook2010年的带不幸的用户(菜单)的字体的偏好。你可以得到用户的菜单的字体通过调用 [SystemParametersInfo][6]
:
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));
ncm.lfMenuFont <---
9pt Outlook2010年
12磅Outlook2010年
12磅Outlook2010年
注意到色带的增加大小的字体大小?(其中,这些调整的截图,意味着带没有得到听觉较小。)
有两种可能性:
- Outlook2010知道如何调整的字体大小的窗户带框架
- Outlook2010年不使用Windows带框架
Windows7油漆不工作
它也有用,注意到窗户漆在窗户7 不 荣誉用户的字体的偏好。这使我相信,它(mspaint)不使用Windows带的框架,并Windows带框架不支持设置一个字体大小。如果如果你实际上想到是有益的,读到这里,你会意识到这是正确答案:这是不可能的。所以如果你想要一个免费的300名代表,添加作为一个答案。
编辑: 截张贴到Microsoft
关键词: Windows带的框架,改变字体大小、UIRibbon,字体,带ui、风景和ui、风带,流利的功能区,流利的ui,字体windows带,uiribbon.h
Microsoft具有一些丝带实现:
- Windows带框架 -司机
- CMFCRibbonBar MFC -MFC
- 带(WPF) -WPF
- ribbon.codeplex.com -它(不支持)
MS油漆不幸的菜单的字体的偏好
这里有一个截图显示我的配置Windows7 菜单的字体 设定的12磅,msPaint可见,与展望2010年可见的进行比较。
代码样本
type
TfrmRibbonTest = class(TForm, IUIApplication)
...
private
Fframework: IUIFramework;
{IUIApplication}
function OnViewChanged(viewId: SYSUINT; typeID: UI_VIEWTYPE; const view: IUnknown; verb: UI_VIEWVERB; uReasonCode: SYSINT): HResult; stdcall;
function OnCreateUICommand(commandId: SYSUINT; typeID: UI_COMMANDTYPE; out commandHandler: IUICommandHandler): HResult; stdcall;
function OnDestroyUICommand(commandId: SYSUINT; typeID: UI_COMMANDTYPE; const commandHandler: IUICommandHandler): HResult; stdcall;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hr: HRESULT;
begin
Fframework := CreateComObject(CLASS_UIRibbonFramework) as IUIFramework;
hr := Fframework.Initialize(Self.Handle, Self); //we implement IUIApplication
OleCheck(hr);
hr := Fframework.LoadUI(hInstance, 'APPLICATION_RIBBON');
OleCheck(hr);
end;
function TfrmRibbonTest.OnCreateUICommand(commandId: SYSUINT; typeID: UI_COMMANDTYPE; out commandHandler: IUICommandHandler): HResult;
begin
Result := S_OK;
end;
function TfrmRibbonTest.OnDestroyUICommand(commandId: SYSUINT; typeID: UI_COMMANDTYPE;
const commandHandler: IUICommandHandler): HResult;
begin
Result := S_OK;
end;
function TfrmRibbonTest.OnViewChanged(viewId: SYSUINT; typeID: UI_VIEWTYPE; const view: IUnknown; verb: UI_VIEWVERB; uReasonCode: SYSINT): HResult;
begin
Result := S_OK;
end;
Windows带框架14磅!= 14磅
这里是一个截Windows 菜单 字体配置14磅(在96dpi机)。展望2010年14磅,Photoshop CS3 14磅带是...少。
也参看
解决方案
根据行为的Windows7油漆,这似乎是不可能的。:)
其他提示
我不知道..你使用的Windows带的框架,在德尔斐,并得到了这个奇怪的行为吗?
我刚刚开始演奏的框架,但这丝带尊重我的首选项。
TUIApp = class(TInterfacedObject, IUIApplication)
...
gApp: TUIApp;
uiFrame: IUIFramework;
...
CoCreateInstance(CLSID_UIRibbonFramework, nil, CLSCTX_INPROC_SERVER, IUIFramework, uiFrame);
if Succeeded(uiFrame.Initialize(Handle, gApp)) then
begin
if not Succeeded(uiFrame.LoadUI(GetModuleHandle(nil), PChar('SIMPLERIBBON_RIBBON')))then
sleep(5);
end;
这是所有我做什么在我的试验项目。
与9pt:
和与14磅:
也许你改变错误的选择吗?我已经设置的字体大小的"菜单"的元素。
如果你有进一步的问题,只是问问...
我只是检查windows7资油漆。它不尊重用户的偏好。因此我猜测你没有的东西是错误的或真正改变错误的选择。
作为请求的截图:
它看起来喜欢我们这样做。这是很奇怪...
如果如果你真的想要 有用的,读到 在这里,你会意识到这是 正确答案:这是不可能的。所以 如果你想要一个免费的300名代表,你加入 作为一个答案。
因为我不能发布,作为一个答案(乔治我在那里第一次:)),并且因为你似乎迫切需要某种解决方案,我要发布 只 其他有用的答案或建议,我可以得到解决你的问题: 使用一个不同的丝带的控制。 你不说你们为什么使用这种执行而不是德尔福自己,或者甚至一个微软的。
两个选项是:
的 内德尔福TRibbon 控制。我没有用这在任何公开发的应用程序,但我有我自己的小型/试验项目,它是一个小小的越野车在地方。(我看见了奇怪的绘图问题的快捷酒吧的事情上的标题条例。) 此 可能会有已改善的,在德尔斐XE.它是可能的 患有一个类似的错误.然而,它的运用德尔菲,"免费"如果你有德尔斐,当地代码,VCL,并成为一个VCL部件来源,所以你可以解决的事情,如果有必要的。
的 TM带的控制.我没有用过它但是我有用 另一个TM控制.控制良好,并且他们的支持修复的错误迅速。(我已经确认信中的错误一天,所以"立即"计时区,并建立一个新的释放几天。)
我相信其他部件供应商可能会使带的组件,和我记得阅读的人做一个SpTBXLib修改含有带的控制,但我没有听到多少关于他们。我的建议是 使用TM带.