Hach, meine alte Routine. Ich habe die nochmal später umgebaut, damit diese nicht immer ein ganzen TBrush "verbraucht".
Delphi-Quellcode:
Procedure TfrmXXX.SetMainMenuBGColor;
Var
lMenuInfo: TMenuInfo;
lMenuColor: TColor;
Begin
// if ( Win32Platform = VER_PLATFORM_WIN32_NT ) and
// ( $100*Win32MajorVersion + Win32MinorVersion >= $501 ) then
// lMenuColor := clMenuBar // erst ab XP (und D7) verfügbar
// else
// lMenuColor := clMenu;
lMenuColor := clRed {gewünschte Farbe};
DeleteObject(fMenuBrushHandle);
fMenuBrushHandle := CreateSolidBrush(ColorToRGB(lMenuColor));
FillChar(lMenuInfo, SizeOf(lMenuInfo), 0);
lMenuInfo.cbSize := SizeOf(lMenuInfo);
lMenuInfo.hbrBack := fMenuBrushHandle;
lMenuInfo.fMask := MIM_BACKGROUND;
SetMenuInfo(mnu_MainMenu.Handle, lMenuInfo);
End;
Vor allem lief diese Version "stabiler", da das Menu zwischenzeitlich auch mal die Farbe verloren hatte mit einem TBrush. Ich glaube da hat das
GDI Handle-sparen von der
VCL zugeschlagen gehabt. Mit dem diesem Code tritt der Fehler nicht mehr auf und es läuft stabil. Vllt. mal in die CodeLibrary eintragen?