Delphi XE mit Aero-Effekten verursacht Farbprobleme

9

Ich habe von 2009 auf Delphi XE aktualisiert und habe ein seltsames Problem.

Ich erstelle ein neues Projekt, setze ein TRibbon-Steuerelement, kompiliere und führe es aus. Wenn ich das Formular in seiner Standardgröße belasse, minimiere und stelle ich es ohne Probleme wieder her. Ich maximiere dann die Form, minimiere und restauriere und die Formfarbe wird in Schwarz geändert.

Ich habe keinen zufälligen Code, um es zu ändern, und verwende alle Standardeinstellungen, die Delphi XE mitbringt, und es tut es jedes Mal, ohne Fehler.

Ich habe die kompilierte exe auf einen Computer von Freunden verschoben, und das Problem bleibt bestehen, so dass ich weiß, dass es nicht mein Computer ist. Wenn ich Aero-Effekte abstelle, verschwindet das Problem, aber setze Aero wieder ein und das Problem kehrt zurück.

Irgendwelche Ideen? Ich habe Probleme, relevante Threads bezüglich dieses Problems in den Interwebs zu finden.

Danke, Seb

Bearbeiten Sie (wie gewünscht, den DFM für das Formular, das dieses Verhalten anzeigt. Hinweis: Dies passiert bei jedem Projekt, das ich starte):

%Vor%

Nichts fantasievolles, es ist nur ein neues Projekt mit einer einzigen Form.

    
Sebastien 27.06.2011, 09:29
quelle

2 Antworten

4

Ich kann den Fehler reproduzieren, hier sind einige der Probleme, die ich entdeckt habe. Vielleicht helfen sie jemandem, dieses Ding herauszufinden.

  • Wenn ich eine Schaltfläche auf das Formular setze und Invalidate aus dem% code% -Ereignis der Schaltfläche anrufe, erhält das Formular seine Farben zurück.
  • Wenn ich einen Timer auf das Formular setze, aktiviere den Timer von OnClick auf WndProc mit WM_SIZE = wParam , dann rufe SIZE_MAXIMIZED vom Timer an, das Formular erhält seine Farben zurück. Dies entspricht im Wesentlichen der ersten Methode (Aufruf von Invalidate von einer Schaltfläche aus), aber der Timer macht dies automatisch und stellt sicher, dass Invalidate nur dann aufgerufen wird, wenn keine weiteren Nachrichten mehr verarbeitet werden. Ich habe das gleiche mit einem einfachen Invalidate versucht, aber nicht funktioniert (dh ich war wahrscheinlich PostMessage -ing zu früh, und das ist wahrscheinlich ein anderer Hinweis)
  • Interessant : Wenn ich Invalidate in der Quelle des Projekts mache, sehe ich das schwarze Formular nicht mehr.

Abhilfe

Das Farbband nimmt den oberen Teil des Formulars auf. Platziere einen Application.MainFormOnTaskbar := False auf dem Rest des Formulars, mach es TPanel und lege alles auf das Panel. Das Schwarz hinter dem Panel ist nicht mehr sichtbar!

    
Cosmin Prund 27.06.2011, 16:42
quelle
1

Sie sollten den Glasrahmen aktivieren, wenn Sie das Farbband verwenden, da das Farbband-Steuerelement speziell für die Arbeit mit Aero-Glasrahmen ausgelegt ist. Zweitens sollten Sie etwas mehr Arbeit leisten, um das Menüband zu konfigurieren, ein Anwendungsmenü hinzuzufügen und einige Fenster zu öffnen, damit es wie vorgesehen funktioniert. Ich glaube nicht, dass "Ribbon für sich" ohne Tab-Gruppen oder ein Systemmenü zur Laufzeit richtig dargestellt wird.

Wenn die Multifunktionsleiste auf Systemen mit aktiviertem Aero-Glas funktionieren soll, sollten Sie die Glasrahmeneigenschaft (Form.GlassFrame.Enabled) aktivieren und die Form.DoubleBuffered-Eigenschaft aktivieren, einige Registerkarten hinzufügen, einige Registerkartengruppen hinzufügen, und fügen Sie ein Systemmenü hinzu. Viele Schritte.

Bitte versuchen Sie das beigefügte Bandstarter Projekt . (ribbonStarter.zip 88k)

Update Wenn sogar mein RibbonStarter das gleiche Ergebnis auf Ihrem System erzeugt, sollte dies möglicherweise in Quality Central protokolliert werden. Möglicherweise handelt es sich um einen Fehler in Ihrem Grafiktreiber, für den eine Codeumgehung im Band- und Formularcode vorgenommen werden kann.

    
Warren P 27.06.2011 13:04
quelle