Question

Comment changer le visage de la police et taille de la police utilisée par le ruban de Windows Framwork 's UIRibbon?

La police utilisée par le ruban ne correspond pas à la police que l'utilisateur a choisi comme leurs préférences Windows - ce qui est la préférence mes utilisations d'application. Cela signifie que la police dans Windows devient de plus, le ruban devient plus petit.

Remarquez comment le ruban devient plus petit dans chaque capture d'écran:

Segoe UI 9pt (par défaut Windows)

text alt

Segoe UI 12pt (ce que j'utilise)

text alt

16pt Segoe UI (l'utilisation de ce client)

text alt

Vous pouvez voir le temps que nous arrivons à 16pt, le texte sur le ruban est assez difficile à lire.

Arrière-plan

L'utilisateur peut configurer Windows pour utiliser leur taille préférée police , par exemple:.

  • 8pt
  • 9pt
  • 12pt

et leur préféré visage police , par exemple:.

  • MS Sans Serif
  • Microsoft Sans Serif
  • Tahoma
  • Segoe UI
  • Calibri

Windows Framework Ruban par défaut utilise une police qui est pas préférence de l'utilisateur.

Edit:. Déplacés image vers le haut à haut écureuils prises attirés par les choses brillantes
Edit 2: Ajout d'une autre image colorée, pour obtenir une bosse
. Edit 3: Modification pour obtenir une bosse
Modifier 4: Ajout d'une autre image différente pour obtenir une bosse


Le ruban ne permet de personnaliser les couleurs du ruban.

Le fragment de code suivant est utilisé pour définir la UI_PKEY_GlobalBackgroundColor du ruban. Dans ce cas, j'utilise une couleur qui est l'utilisateur sélectionnons actuellement schéma de couleurs 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;

Et maintenant, le ruban est maintenant coloré pour correspondre à la palette de couleurs de Windows:

Mais je ne peux pas trouver la possibilité de changer la face / taille de la police.

Remarque:. Alors que le ruban peut honorer les paramètres DPI de l'utilisateur, qui ne sont pas ce question


Il fonctionne dans Outlook 2010

Il pourrait être utile de noter que le ruban d'Outlook 2010 fait honneur aux préférences de police de l'utilisateur (menu). Vous pouvez obtenir la police du menu de l'utilisateur en appelant [SystemParametersInfo][6]:

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

ncm.lfMenuFont <---

9pt Outlook 2010

text alt

12pt Outlook 2010

text alt

12pt Outlook 2010

text alt

Notez le ruban augmente en taille avec la taille de la police? (Ce qui, dans ces captures d'écran redimensionnées, signifie que le ruban ne soit pas plus petit perceptuel.)

Il y a deux possibilités:

  • Outlook 2010 sait comment ajuster la taille de la police dans le cadre du ruban de Windows
  • Outlook 2010 ne pas utiliser le cadre ruban de Windows

Windows 7 Paint ne fonctionne pas

Il est également utile de noter que Windows Peinture dans Windows 7 ne pas honneur des préférences de police de l'utilisateur. Cela conduit à me croire qu'il (mspaint) emploie le cadre ruban Windows et que le cadre ruban Windows ne prend pas en charge la mise en une taille de la police. Si si vous avez réellement essayé d'être utile, et lire tout le long ici, vous vous rendrez compte que c'est la bonne réponse: il est impossible. Donc, si vous voulez un représentant 300 libre, vous ajoutez que comme une réponse.

Modifier permuté à Microsoft

Mots-clés: Cadre ruban de Windows, la taille de la police de changement, UIRibbon, font face, ruban ui, ui scénique, ruban scénique, ruban fluide, ui fluide, changement ruban de fenêtres de police, uiribbon.h

Microsoft a un certain nombre d'implémentations ruban:


MS Paint ne fait pas honneur préférence de la police de menu

Voici une capture d'écran montrant mon configuré Windows 7 Menu Police de la mise en 12pt, avec MSPaint visible et Outlook 2010 visible pour la comparaison.

text alt


Exemple de code

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;

14pt cadre ruban de Windows! = 14pt

Voici une capture d'écran avec Windows Menu police configurée pour 14pt (sur une machine à 96 ppp). Outlook 2010 est 14pt, Photoshop CS3 est 14pt. Le ruban est ... moins.

text alt

Voir aussi

Était-ce utile?

La solution

Basé sur le comportement de la peinture Windows 7, cela semble ne pas être possible. :)

Autres conseils

Je ne suis pas sûr .. Vous utilisez le cadre ruban Windows dans Delphi et ai eu ce comportement étrange?

Je viens de commencer à jouer avec le cadre, mais le ruban respecte mes préférences.

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;

Ceci est tout ce que je fais dans mon projet de test.

Avec 9 points: text alt

Et avec 14pt: text alt

Peut-être vous changer la mauvaise option? Je me suis fixé la taille de la police de l'élément « Menu ».

Si vous avez des questions il suffit de demander ...


Je viens de vérifier la peinture Win7. Il ne respecte les préférences de l'utilisateur. Par conséquent, je suppose que vous avez fait quelque chose de mal ou vraiment changé la mauvaise option.


Comme demandé la capture d'écran: text alt

Il semble aime que nous avons fait la même chose. Ceci est assez étrange ...

  

Si si vous avez réellement essayé d'être   utile et lire tout le chemin jusqu'à   Ici, vous vous rendrez compte que c'est la   bonne réponse: il est impossible. Alors   si vous voulez un représentant 300 libre, vous ajoutez   que comme une réponse.

Depuis que je ne peux pas poster que comme une réponse (George a là d'abord :)), et puisque vous semblez avoir besoin désespérément une sorte de solution, je vais poster le uniquement autre réponse ou suggestion utile que je peux donner pour résoudre votre problème: utiliser un contrôle ruban différent vous ne dites pas pourquoi vous utilisez cette implémentation au lieu de Delphi propre, ou même l'un de l'autre Microsoft. les.

Deux options sont:

  • Delphi TRibbon intégré contrôle. Je n'ai pas utilisé dans toutes les applications diffusées publiquement, mais j'ai dans mes propres petits programmes / test et il est un peu buggé dans les lieux. (Je l'ai vu des problèmes de dessin bizarres dans la chose la barre de raccourci sur la barre de titre, par exemple.) Ce peut-être amélioré dans Delphi XE . Il est possible, il souffre d'un bug similaire . Cependant, il est livré avec Delphi, « libre » si vous avez Delphi, le code natif, VCL, et d'être un composant VCL est livré avec la source afin que vous puissiez arranger les choses si nécessaire.

  • TMS de contrôle ruban. Je ne l'ai pas utilisé, mais je l'ai utilisé un autre contrôle de TMS . Ce contrôle est bon, et leur soutien corrige des bugs rapidement. (Je l'ai eu la confirmation d'un bug dans une journée, donc « immédiatement » timezones de comptage, et une nouvelle construction publié dans quelques jours.)

Je crois que d'autres fournisseurs de composants peuvent fabriquer des composants de ruban, et je ne me souviens avoir lu de quelqu'un qui fait un contrôle de ruban contenant une modification SpTBXLib, mais je n'ai pas beaucoup entendu parler. Ma suggestion est de utiliser le ruban TMS .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top