سؤال

كيف يمكنك تغيير وجه الخط وحجم الخط المستخدم من قبل إطار الشريط Windowsuiribbon؟

لا يتطابق الخط الذي يستخدمه الشريط مع الخط الذي اختاره المستخدم كتفضيلات Windows الخاصة بهم - وهو التفضيل الذي يستخدمه التطبيق الخاص بي. هذا يعني أنه مع تقدم الخط في Windows ، يصبح الشريط أصغر.

لاحظ كيف يصبح الشريط أصغر في كل لقطة شاشة:

Segoe UI 9PT (Windows Default)

alt text

Segoe UI 12pt (ما أستخدمه)

alt text

Segoe UI 16pt (ما استخدام العميل)

alt text

يمكنك أن ترى بحلول الوقت الذي نصل فيه إلى 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;

والآن أصبح الشريط ملونًا الآن لتتناسب مع نظام ألوان النوافذ:

alt text

لكن لا يمكنني العثور على خيار تغيير وجه الخط/الحجم.

ملحوظة: بينما الشريط مايو تكريم إعدادات DPI الخاصة بالمستخدم ، هذا ليس كذلك هذه سؤال.


إنه يعمل في Outlook 2010

قد يكون من المفيد ملاحظة أن شريط Outlook 2010 يكرم تفضيلات خط المستخدم (القائمة). يمكنك الحصول على خط قائمة المستخدم عن طريق الاتصال [SystemParametersInfo][6]:

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

ncm.lfMenuFont <---

9pt Outlook 2010

alt text

12pt Outlook 2010

alt text

12pt Outlook 2010

alt text

لاحظ أن الشريط يزداد في الحجم مع حجم الخط؟ (والتي ، في لقطات الشاشة المقيدة هذه ، تعني أن الشريط لا يصبح أصغر بشكل إدراكي.)

هناك احتمالان:

  • تعرف 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 عدد من تطبيقات الشريط:


MS Paint لا يكرم تفضيل الخطوط

إليك لقطة شاشة توضح Windows 7 الخاصة بي خط القائمة تحديد 12pt ، مع مرئية mspaint ، و Outlook 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;

Framework Windows Ribbork 14pt! = 14pt

فيما يلي لقطة شاشة مع Windows قائمة الطعام تم تكوين الخط لـ 14pt (على جهاز 96dpi). Outlook 2010 هو 14pt ، Photoshop CS3 هو 14pt. الشريط ... أقل.

alt text

أنظر أيضا

هل كانت مفيدة؟

المحلول

بناءً على سلوك طلاء 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:alt text

ومع 14pt:alt text

ربما تقوم بتغيير الخيار الخاطئ؟ لقد قمت بتعيين حجم الخط لعنصر "القائمة".

إذا كان لديك أسئلة أخرى فقط اطرح ...


لقد راجعت للتو طلاء Win7. إنه يحترم تفضيلات المستخدم. لذلك أعتقد أنك فعلت شيئًا خاطئًا أو غيرت الخيار الخاطئ حقًا.


حسب طلب لقطة الشاشة:alt text

يبدو أننا فعلنا نفس الشيء. هذا غريب جدا ...

إذا كنت قد حاولت بالفعل أن تكون مفيدًا ، وقراءة طوال الطريق إلى هنا ، فستدرك أن هذه هي الإجابة الصحيحة: هذا غير ممكن. لذلك إذا كنت تريد 300 ممثل مجاني ، فأنت تضيف ذلك كإجابة.

بما أنني لا أستطيع نشر ذلك كإجابة (وصل جورج إلى هناك أولاً :)) ، وبما أنك يبدو أنك بحاجة ماسة إلى نوع من الحلول ، فسوف أقوم بنشر فقط إجابة أو اقتراح مفيدة أخرى يمكنني تقديمها لحل مشكلتك: استخدام التحكم في الشريط مختلف. لا تقل لماذا تستخدم هذا التنفيذ بدلاً من Delphi's Own ، أو حتى واحدة من Microsoft الأخرى.

خياران هما:

  • ال قبيلة دلفي في ثناياه عوامل مراقبة. لم أستخدم هذا في أي تطبيقات تم إصدارها للجمهور ، لكن لديّ برامج صغيرة / اختبارية ، وهي عربات التي تجرها الدواب قليلاً في الأماكن. (لقد رأيت مشكلات غريبة في الرسم في شريط الاختصار على شريط العنوان ، على سبيل المثال.) هذا قد تحسن في Delphi XE. من الممكن ذلك يعاني من خطأ مماثل. ومع ذلك ، يتم شحنها باستخدام Delphi ، "مجاني" إذا كان لديك Delphi ، الرمز الأصلي ، VCL ، وكونك مكون VCL يأتي مع المصدر حتى تتمكن من إصلاح الأشياء إذا لزم الأمر.

  • ال TMS الشريط التحكم. لم أستخدمها لكني استخدمت تحكم TMS آخر. هذا التحكم جيد ، ودعمها يعمل على إصلاح الأخطاء بسرعة. (كان لدي تأكيد لخط في يوم واحد ، لذلك "على الفور" في المناطق الزمنية ، وبناء جديد تم إصداره في غضون أيام قليلة.)

أعتقد أن البائعين الآخرين قد يصنعون مكونات الشريط ، وأتذكر قراءة شخص يقوم بتعديل SPTBXLIB الذي يحتوي على أدوات تحكم في الشريط ، لكنني لم أسمع الكثير عنها. اقتراحي هو استخدم شريط TMS.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top