Windowsリボンフレームワーク:フォントの顔とサイズを変更する方法は?
-
27-09-2019 - |
質問
フォントフェイスとフォントサイズをどのように変更しますか Windowsリボンフラムワーク'uiribbon?
リボンで使用されるフォントは、ユーザーがWindowsの好みとして選択したフォントと一致しません。これは、アプリケーションが使用する好みです。これは、Windowsのフォントが大きくなると、リボンが小さくなることを意味します。
各スクリーンショットでリボンがどのように小さくなるかに注意してください:
Segoe UI 9pt(Windowsデフォルト)
Segoe UI 12pt(私が使用しているもの)
Segoe UI 16pt(顧客の使用方法)
16ptに到達する頃には、リボンのテキストを読むのが非常に困難です。
バックグラウンド
ユーザーは、Windowsを設定するように設定することができます フォントサイズ, 、例:
- 8pt
- 9pt
- 12pt
そして彼らは好まれました フォントフェイス, 、例:
- Sans Serifさん
- Microsoft Sans Serif
- タホマ
- Segoe UI
- カリブリ
しかし Windowsリボンフレームワーク デフォルトでは、フォントを使用します いいえ ユーザーの好み。
編集: 写真に魅了されたリスをキャッチするために、上に写真を動かしました。
編集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;
そして今、リボンは、Windowsの配色に一致するように色付けされています。
しかし、フォントフェイス/サイズを変更するオプションが見つかりません。
ノート: リボン中 五月 ユーザーのDPI設定を尊重します。そうではありません これ 質問。
Outlook 2010で動作します
Outlook 2010のリボンは、ユーザーの(メニュー)フォントの設定を尊重することに注意するのに役立つかもしれません。呼び出してユーザーのメニューフォントを取得できます [SystemParametersInfo][6]
:
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));
ncm.lfMenuFont <---
9pt Outlook 2010
12pt Outlook 2010
12pt Outlook 2010
フォントサイズでリボンのサイズが増加することに注意してください。 (これは、これらのサイズ変更されたスクリーンショットでは、リボンが知覚的に小さくならないことを意味します。)
2つの可能性があります:
- Outlook 2010は、Windowsリボンフレームワークでフォントサイズを調整する方法を知っています
- Outlook 2010では、Windowsリボンフレームワークを使用していません
Windows 7ペイントが機能しません
また、Windows7のWindowsペイントが行っていることにも注意してください いいえ ユーザーのフォント設定を尊重します。これにより、IT(MSPANT)はWindowsリボンフレームワークを使用し、Windowsリボンフレームワークがフォントサイズの設定をサポートしていないと信じるようになります。あなたが実際に助けになろうとし、ここまでずっと読んでいた場合、あなたはこれが正しい答えであることに気付くでしょう:それは不可能です。したがって、300人の無料の担当者が必要な場合は、答えとして追加します。
編集: Microsoftにクロスポスト
キーワード: Windowsリボンフレームワーク、フォントサイズの変更、Uiribbon、フォントフェイス、リボンUI、シーニックUI、シーニックリボン、フルエントリボン、フルエントUI、変更フォントWindowsリボン、Uiribbon.h
Microsoftには多くのリボンの実装があります。
- Windowsリボンフレームワーク - ネイティブ
- MFC用のCMfcribbonbar -MFC
- リボン(WPF) -WPF
- ribbon.codeplex.com - winforms(サポートされていない)
MSペイントはメニューのフォントの好みを尊重しません
構成されたWindows 7を示すスクリーンショットです メニューフォント MSPAINTが表示された12ptの設定、およびOutlook 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リボンフレームワーク14pt!= 14pt
これがWindowsのスクリーンショットです メニュー 14ptで構成されたフォント(96DPIマシンで)。 Outlook 2010は14pt、Photoshop CS3は14ptです。リボンは...少ない。
参照してください
解決
Windows 7ペイントの動作に基づいて、これは不可能に見えます。 :)
他のヒント
私は正確にはわかりません..あなたはデルファイの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で:
そして14ptで:
おそらくあなたは間違ったオプションを変更しますか? 「メニュー」要素のフォントサイズを設定しました。
さらに質問がある場合は、聞いてください...
Win7ペイントをチェックしたばかりです。ユーザーの好みを尊重します。したがって、あなたは何か間違ったことをしたか、本当に間違ったオプションを変更したと思います。
スクリーンショットを要求したとおり:
私たちが同じことをしたのが好きです。これはかなり奇妙です...
あなたが実際に助けになろうとし、ここまでずっと読んでいた場合、あなたはこれが正しい答えであることに気付くでしょう:それは不可能です。したがって、300人の無料の担当者が必要な場合は、答えとして追加します。
私はそれを答えとして投稿できないので(ジョージは最初にそこに着きました:))、あなたは必死に何らかの解決策を必要としているように見えるので、私は投稿するつもりです それだけ あなたの問題を解決するために私が与えることができる他の有用な答えや提案: 別のリボンコントロールを使用します。 Delphiの独自ではなく、この実装を使用している理由、または他のMicrosoftのものの1つである理由は言うことではありません。
2つのオプションは次のとおりです。
組み込まれたデルファイ部族 コントロール。私はこれを公開されたアプリで使用していませんが、自分の小規模 /テストプログラムを持っていますが、それは場所に少しバギーです。 (たとえば、タイトルバーのショートカットバーで奇妙な描画の問題を見てきました。)これ Delphi XEで改善された可能性があります. 。可能です 同様のバグに苦しんでいます. 。ただし、Delphi、Native Code、VCL、およびVCLコンポーネントであることがソースに搭載されている場合は、Delphiが「無料」に出荷されているため、必要に応じて修正できます。
TMSリボンコントロール. 。私はそれを使用していませんが、私は使用しました 別のTMSコントロール. 。そのコントロールは良好であり、彼らのサポートはバグを迅速に修正します。 (私は1日でバグの確認があったので、タイムゾーンをカウントし、数日でリリースされた新しいビルドを「すぐに」しました。)
他のコンポーネントベンダーがリボンコンポーネントを作成する可能性があると思います。リボンコントロールを含むSPTBXLIB変更を行っている人を読んだことを覚えていますが、それらについてあまり聞いていません。私の提案はそうです TMSリボンを使用します.