Pergunta

Como você muda o rosto e o tamanho da fonte da fonte usado pelo Windows Ribbon Framwork'S Uiribbon?

A fonte usada pela fita não corresponde à fonte que o usuário escolheu como suas preferências do Windows - que é a preferência que meu aplicativo usa. Isso significa que, à medida que a fonte no Windows aumenta, a fita fica menor.

Observe como a fita fica menor em cada captura de tela:

Segoe UI 9pt (padrão do Windows)

alt text

Segoe Ui 12pt (o que eu uso)

alt text

Segoe Ui 16pt (qual uso do cliente)

alt text

Você pode ver quando chegarmos a 16pt, o texto na fita é bastante difícil de ler.

Fundo

O usuário pode configurar o Windows para usar seu preferido tamanho da fonte, por exemplo:

  • 8pt
  • 9pt
  • 12pt

e o preferido deles Tipo de letra, por exemplo:

  • Senhora Sans Serif
  • Microsoft Sans Serif
  • Tahoma
  • Segoe Ui
  • Calibri

mas o Estrutura do Windows Ribbon Por padrão, usa uma fonte que é não a preferência do usuário.

Editar: Moveu uma foto no topo para pegar os esquilos atraídos por coisas brilhantes.
Editar 2: Adicionou outra imagem colorida, para obter um solavanco.
Editar 3: Editando para obter um solavanco
Edit 4: Adicionando outra imagem diferente para obter um solavanco


A fita permite personalizar o cores da fita.

O seguinte fragmento de código é usado para definir o UI_PKEY_GlobalBackgroundColor da fita. Nesse caso, eu uso uma cor que é o Usuário atualmente selecionado esquema de cores 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;

E agora a fita agora está colorida para corresponder ao esquema de cores das janelas:

alt text

Mas não consigo encontrar a opção de alterar a face/tamanho da fonte.

Observação: Enquanto a fita poderia Honre as configurações de DPI do usuário, isso não é isto pergunta.


Funciona no Outlook 2010

Pode ser útil observar que a fita do Outlook 2010 homenageia as preferências de fonte (menu) do usuário. Você pode obter a fonte do menu do usuário ligando [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

Observe que a fita aumenta de tamanho com o tamanho da fonte? (Que, nessas capturas de tela redimensionadas, significa que a fita não fica perceptivamente menor.)

Existem duas possibilidades:

  • O Outlook 2010 sabe como ajustar o tamanho da fonte na estrutura do Windows Ribbon
  • O Outlook 2010 não usa a estrutura do Windows Ribbon

A tinta do Windows 7 não funciona

Também é útil observar que o Windows Paint no Windows 7 faz não Honre as preferências da fonte do usuário. Isso me leva a acreditar que (MSPAINT) usa a estrutura da fita do Windows e que a estrutura do Windows Ribbon não suporta a configuração de um tamanho de fonte. Se você realmente tentou ser útil e leu até aqui, perceberá que essa é a resposta correta: não é possível. Então, se você deseja um representante de 300 gratuitos, adiciona isso como resposta.

Editar: Postado cruzado para a Microsoft

Palavras-chave: Estrutura de fita do Windows, tamanho de alteração do tamanho da fonte, uiribbon, face da fonte, interface do usuário da fita, interface do usuário cênica, fita cênica, fita fluente, interface do usuário fluente, fita de fonte de fonte, uiribbon.h

A Microsoft tem várias implementações de fita:


MS Paint não homenageia a preferência da fonte do menu

Aqui está uma captura de tela mostrando meu Windows 7 configurado Fonte do menu Configuração de 12pt, com Mspaint visível e Outlook 2010 visível para comparação.

alt text


Código de amostra

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 Ribbon Framework 14pt! = 14pt

Aqui está uma captura de tela com Windows Cardápio Fonte configurada para 14pt (em uma máquina de 96dpi). O Outlook 2010 é 14pt, o Photoshop CS3 é 14pt. A fita é ... menos.

alt text

Veja também

Foi útil?

Solução

Com base no comportamento da tinta Windows 7, isso parece não ser possível. :)

Outras dicas

Não tenho exatamente certeza .. você está usando a estrutura do Windows Ribbon em Delphi e conseguiu esse comportamento estranho?

Acabei de começar a brincar com a estrutura, mas a fita respeita minhas preferências.

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;

Isso é tudo o que eu faço no meu projeto de teste.

Com 9pt:alt text

E com 14pt:alt text

Talvez você mude a opção errada? Eu defini o tamanho da fonte do elemento "menu".

Se você tiver mais perguntas, basta fazer ...


Acabei de verificar a tinta win7. Ele respeita as preferências do usuário. Portanto, acho que você fez algo errado ou realmente mudou a opção errada.


Conforme solicitado a captura de tela:alt text

Parece que gostamos do mesmo. Isso é bem estranho ...

Se você realmente tentou ser útil e leu até aqui, perceberá que essa é a resposta correta: não é possível. Então, se você deseja um representante de 300 gratuitos, adiciona isso como resposta.

Como não posso postar isso como uma resposta (George entrou lá primeiro :)), e como você parece desesperadamente precisar de algum tipo de solução, vou postar o Outra resposta útil ou sugestão que posso dar para resolver seu problema: Use um controle de fita diferente. Você não diz por que está usando essa implementação em vez da própria Delphi, ou mesmo uma das outras Microsoft.

Duas opções são:

  • o Tribbon Delphi embutido ao controle. Não usei isso em nenhum aplicativo lançado publicamente, mas tenho em meus próprios programas de pequenos / testes e é um pequeno buggy em alguns lugares. (Eu já vi problemas de desenho estranhos na coisa de barra de atalho na barra de título, por exemplo.) Isso pode ter melhorado em Delphi Xe. É possível sofre de um bug semelhante. No entanto, ele é enviado com Delphi, "GRÁTIS" se você tiver Delphi, Código Nativo, VCL e um componente VCL vem com a fonte para que você possa consertar as coisas, se necessário.

  • o Controle de fita TMS. Eu não usei, mas usei Outro controle do TMS. Esse controle é bom e seu suporte corrige os bugs rapidamente. (Eu tive a confirmação de um bug em um dia, então "imediatamente" contagem de fusos horários e uma nova construção lançada em alguns dias.)

Acredito que outros fornecedores de componentes podem fazer componentes da fita e lembro -me de ler alguém fazendo uma modificação sptbxlib contendo controles de fita, mas não ouvi muito sobre eles. Minha sugestão é Use a fita TMS.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top