Delphi XE com efeitos Aero causa problema de tinta

9

Eu atualizei para o Delphi XE a partir de 2009 e estou com um problema estranho.

Eu crio um novo projeto, coloco um controle TRibbon, compilo e executo. Mantendo o formulário em seu tamanho padrão, minimizo e restauro sem problemas. Em seguida, maximizo a forma, minimizo e restauro e a cor do formulário é alterada para preto.

Eu não tenho código aleatório para alterá-lo e estou usando todos os padrões Delphi XE vem com ele e faz isso sempre e sempre sem falhar.

Eu movi o exe compilado para um computador de amigos e o problema continua, então sei que não é o meu computador. Se eu desativar os efeitos do Aero, o problema desaparece, mas o Aero volta a funcionar e o problema retorna.

Alguma idéia? Estou com dificuldades para encontrar tópicos relevantes sobre esse problema nas interwebs.

Obrigado Seb

Editar (conforme solicitado, o DFM para o formulário que exibe esse comportamento. Observação: isso acontece em qualquer projeto que eu inicie):

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 555
  ClientWidth = 989
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poScreenCenter
  PrintScale = poNone
  Scaled = False
  PixelsPerInch = 96
  TextHeight = 13
  object Ribbon1: TRibbon
    Left = 0
    Top = 0
    Width = 989
    Height = 143
    Caption = 'Ribbon1'
    ExplicitLeft = 104
    ExplicitTop = 296
    ExplicitWidth = 0
    StyleName = 'Ribbon - Luna'
  end
end

Nada é fantástico, é apenas um novo projeto com uma única forma.

    
por Sebastien 27.06.2011 в 11:29
fonte

2 respostas

4

Eu posso reproduzir o bug, aqui estão alguns dos problemas que descobri. Talvez eles ajudem alguém a descobrir isso.

  • Se eu colocar um botão no formulário e chamar Invalidate do evento OnClick do botão, o formulário recuperará suas cores.
  • Se eu colocar um temporizador no formulário, ative o cronômetro em WndProc on WM_SIZE com wParam = SIZE_MAXIMIZED e, em seguida, chame Invalidate do cronômetro que o formulário recupera. Isso é essencialmente o mesmo que o primeiro método (chamando Invalidate de um botão), mas o cronômetro torna isso automático e garante que Invalidate seja chamado somente quando não houver mais mensagens a serem processadas. Eu tentei o mesmo com um simples PostMessage , mas não funcionou (ex .: eu provavelmente estava Invalidate -ing cedo demais, e isso provavelmente é uma outra pista)
  • Interessante : se eu fizer Application.MainFormOnTaskbar := False na origem do projeto, não vejo mais a forma preta.

Solução alternativa

A faixa de opções ocupa a parte superior do formulário. Coloque um TPanel no restante do formulário, coloque Align = alClient e coloque tudo no Painel. O preto atrás do painel não é mais visível!

    
por Cosmin Prund 27.06.2011 / 18:42
fonte
1

Você deve habilitar o quadro de vidro ao usar a Faixa de Opções, pois o controle da Faixa de Opções é especialmente projetado para trabalhar com quadros de vidro aerodinâmico. Em segundo lugar, você deve fazer um pouco mais de trabalho para configurar sua faixa de opções, adicionando um menu de aplicativos e alguns painéis, para que funcione conforme planejado. Eu não acredito que "fita por si só", sem quaisquer grupos de abas, ou um menu do sistema, vai renderizar corretamente em tempo de execução.

Se você quiser que a faixa de opções funcione em sistemas com o Aero glass habilitado, ative a propriedade de quadro de vidro (Form.GlassFrame.Enabled), ative a propriedade Form.DoubleBuffered, adicione algumas guias, adicione alguns grupos de guias, e adicione um menu do sistema. Muitos passos.

Por favor, experimente o projeto da lista de opções. (ribbonStarter.zip 88k)

Atualizar Se até mesmo o meu ribbonStarter produzir o mesmo resultado em seu sistema, talvez isso deva ser registrado no Quality Central. É possivelmente um bug no seu driver de vídeo, para o qual alguma solução alternativa de código na faixa de opções e código de formulário poderia ser feita.

    
por Warren P 27.06.2011 / 15:04
fonte