你怎么变的字体、字体大小使用的 Windows带框架's UIRibbon?

字体使用的功能区不匹配的字体的用户已选择作为他们的窗户喜好-这是偏向我的应用程序使用。这意味着,作为字体在窗户变得更大,这带变得更小。

注意到如何的功能区变得更小,在每个截图:

Segoe UI9pt(Windows默认)

alt text

Segoe UI12磅(我用什么)

alt text

Segoe UI16点(什么样的客户使用)

alt text

你可以看到的时候,我们得到的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;

现在的功能区现在是彩色匹配颜色方案的窗口:

alt text

但是我找不到的字体/尺寸。

注: 而丝带 荣誉的用户的新闻部设置的,这不是 问题。


它的工作在2010年Outlook

这可能是有帮助的注意,Outlook2010年的带不幸的用户(菜单)的字体的偏好。你可以得到用户的菜单的字体通过调用 [SystemParametersInfo][6]:

SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));

ncm.lfMenuFont <---

9pt Outlook2010年

alt text

12磅Outlook2010年

alt text

12磅Outlook2010年

alt text

注意到色带的增加大小的字体大小?(其中,这些调整的截图,意味着带没有得到听觉较小。)

有两种可能性:

  • Outlook2010知道如何调整的字体大小的窗户带框架
  • Outlook2010年不使用Windows带框架

Windows7油漆不工作

它也有用,注意到窗户漆在窗户7 荣誉用户的字体的偏好。这使我相信,它(mspaint)不使用Windows带的框架,并Windows带框架不支持设置一个字体大小。如果如果你实际上想到是有益的,读到这里,你会意识到这是正确答案:这是不可能的。所以如果你想要一个免费的300名代表,添加作为一个答案。

编辑: 截张贴到Microsoft

关键词: Windows带的框架,改变字体大小、UIRibbon,字体,带ui、风景和ui、风带,流利的功能区,流利的ui,字体windows带,uiribbon.h

Microsoft具有一些丝带实现:


MS油漆不幸的菜单的字体的偏好

这里有一个截图显示我的配置Windows7 菜单的字体 设定的12磅,msPaint可见,与展望2010年可见的进行比较。

alt text


代码样本

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磅带是...少。

alt text

也参看

有帮助吗?

解决方案

根据行为的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:alt text

和与14磅:alt text

也许你改变错误的选择吗?我已经设置的字体大小的"菜单"的元素。

如果你有进一步的问题,只是问问...


我只是检查windows7资油漆。它不尊重用户的偏好。因此我猜测你没有的东西是错误的或真正改变错误的选择。


作为请求的截图:alt text

它看起来喜欢我们这样做。这是很奇怪...

如果如果你真的想要 有用的,读到 在这里,你会意识到这是 正确答案:这是不可能的。所以 如果你想要一个免费的300名代表,你加入 作为一个答案。

因为我不能发布,作为一个答案(乔治我在那里第一次:)),并且因为你似乎迫切需要某种解决方案,我要发布 其他有用的答案或建议,我可以得到解决你的问题: 使用一个不同的丝带的控制。 你不说你们为什么使用这种执行而不是德尔福自己,或者甚至一个微软的。

两个选项是:

  • 内德尔福TRibbon 控制。我没有用这在任何公开发的应用程序,但我有我自己的小型/试验项目,它是一个小小的越野车在地方。(我看见了奇怪的绘图问题的快捷酒吧的事情上的标题条例。) 此 可能会有已改善的,在德尔斐XE.它是可能的 患有一个类似的错误.然而,它的运用德尔菲,"免费"如果你有德尔斐,当地代码,VCL,并成为一个VCL部件来源,所以你可以解决的事情,如果有必要的。

  • TM带的控制.我没有用过它但是我有用 另一个TM控制.控制良好,并且他们的支持修复的错误迅速。(我已经确认信中的错误一天,所以"立即"计时区,并建立一个新的释放几天。)

我相信其他部件供应商可能会使带的组件,和我记得阅读的人做一个SpTBXLib修改含有带的控制,但我没有听到多少关于他们。我的建议是 使用TM带.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top