Framework Windows Ribbor: كيفية تغيير وجه الخط والحجم؟
-
27-09-2019 - |
سؤال
كيف يمكنك تغيير وجه الخط وحجم الخط المستخدم من قبل إطار الشريط Windowsuiribbon؟
لا يتطابق الخط الذي يستخدمه الشريط مع الخط الذي اختاره المستخدم كتفضيلات Windows الخاصة بهم - وهو التفضيل الذي يستخدمه التطبيق الخاص بي. هذا يعني أنه مع تقدم الخط في Windows ، يصبح الشريط أصغر.
لاحظ كيف يصبح الشريط أصغر في كل لقطة شاشة:
Segoe UI 9PT (Windows Default)
Segoe UI 12pt (ما أستخدمه)
Segoe UI 16pt (ما استخدام العميل)
يمكنك أن ترى بحلول الوقت الذي نصل فيه إلى 16pt ، من الصعب القراءة النص الموجود على الشريط.
خلفية
يمكن للمستخدم تكوين Windows لاستخدامه المفضل حجم الخط, ، على سبيل المثال:
- 8pt
- 9pt
- 12pt
وفضلهم وجه الخط, ، على سبيل المثال:
- MS Sans Serif
- Microsoft Sans Serif
- تاهوما
- Segoe UI
- Calibri
لكن ال إطار الشريط 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;
والآن أصبح الشريط ملونًا الآن لتتناسب مع نظام ألوان النوافذ:
لكن لا يمكنني العثور على خيار تغيير وجه الخط/الحجم.
ملحوظة: بينما الشريط مايو تكريم إعدادات 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
لاحظ أن الشريط يزداد في الحجم مع حجم الخط؟ (والتي ، في لقطات الشاشة المقيدة هذه ، تعني أن الشريط لا يصبح أصغر بشكل إدراكي.)
هناك احتمالان:
- تعرف Outlook 2010 كيفية ضبط حجم الخط في إطار عمل Windows Ribbon
- لا يستخدم Outlook 2010 إطار عمل Windows Ribbon
لا يعمل طلاء Windows 7
من المفيد أيضًا ملاحظة أن Windows Paint في Windows 7 يفعل ليس احترم تفضيلات خط المستخدم. يقودني هذا إلى الاعتقاد بأنه (MSPAINT) يستخدم إطار عمل Windows Ribbon ، وأن إطار عمل Windows Ribbon لا يدعم تحديد حجم الخط. إذا كنت قد حاولت بالفعل أن تكون مفيدًا ، وقراءة طوال الطريق إلى هنا ، فستدرك أن هذه هي الإجابة الصحيحة: هذا غير ممكن. لذلك إذا كنت تريد 300 ممثل مجاني ، فأنت تضيف ذلك كإجابة.
يحرر: متقاطع مع Microsoft
الكلمات الدالة: Framework Windows Ribbon ، تغيير حجم الخط ، uiribbon ، وجه الخط ، واجهة المستخدم الشريط ، واجهة المستخدم ذات المناظر الخلابة ، الشريط المناظر الطبيعية الخلابة ، الشريط بطلاقة ، واجهة المستخدم بطلاقة ، شريط نوافذ الخط ، uiribbon.h
لدى Microsoft عدد من تطبيقات الشريط:
- إطار الشريط Windows - محلي
- cmfcribbonbar ل MFC - MFC
- الشريط (WPF) - WPF
- ribbon.codeplex.com - Winforms (غير مدعوم)
MS Paint لا يكرم تفضيل الخطوط
إليك لقطة شاشة توضح Windows 7 الخاصة بي خط القائمة تحديد 12pt ، مع مرئية mspaint ، و 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;
Framework Windows Ribbork 14pt! = 14pt
فيما يلي لقطة شاشة مع Windows قائمة الطعام تم تكوين الخط لـ 14pt (على جهاز 96dpi). Outlook 2010 هو 14pt ، Photoshop CS3 هو 14pt. الشريط ... أقل.
أنظر أيضا
المحلول
بناءً على سلوك طلاء Windows 7 ، يبدو أن هذا غير ممكن. قون
نصائح أخرى
لست متأكدًا تمامًا .. أنت تستخدم Framework Windows Ribbon في Delphi وحصلت على هذا السلوك الغريب؟
لقد بدأت للتو اللعب مع الإطار ولكن الشريط يحترم تفضيلاتي.
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's Own ، أو حتى واحدة من Microsoft الأخرى.
خياران هما:
ال قبيلة دلفي في ثناياه عوامل مراقبة. لم أستخدم هذا في أي تطبيقات تم إصدارها للجمهور ، لكن لديّ برامج صغيرة / اختبارية ، وهي عربات التي تجرها الدواب قليلاً في الأماكن. (لقد رأيت مشكلات غريبة في الرسم في شريط الاختصار على شريط العنوان ، على سبيل المثال.) هذا قد تحسن في Delphi XE. من الممكن ذلك يعاني من خطأ مماثل. ومع ذلك ، يتم شحنها باستخدام Delphi ، "مجاني" إذا كان لديك Delphi ، الرمز الأصلي ، VCL ، وكونك مكون VCL يأتي مع المصدر حتى تتمكن من إصلاح الأشياء إذا لزم الأمر.
ال TMS الشريط التحكم. لم أستخدمها لكني استخدمت تحكم TMS آخر. هذا التحكم جيد ، ودعمها يعمل على إصلاح الأخطاء بسرعة. (كان لدي تأكيد لخط في يوم واحد ، لذلك "على الفور" في المناطق الزمنية ، وبناء جديد تم إصداره في غضون أيام قليلة.)
أعتقد أن البائعين الآخرين قد يصنعون مكونات الشريط ، وأتذكر قراءة شخص يقوم بتعديل SPTBXLIB الذي يحتوي على أدوات تحكم في الشريط ، لكنني لم أسمع الكثير عنها. اقتراحي هو استخدم شريط TMS.