// Mit dem
folgenden Code kann man systemweit beim Design "Windows-klassisch"
// die Anfangs- und Endfarbe der Captionbar ermitteln bzw. setzen, wenn
ein
// Farbverlauf vorliegt.
// Getestet mit D4 unter XP
(siehe aber weiter unten W7)
// ermitteln
var
Gradient: Boolean = False;
clActiveCaptionGradient: TColor;
clInactiveCaptionGradient: TColor;
procedure TForm1.Button1Click(Sender: TObject);
begin
SystemParametersInfo(SPI_GETGRADIENTCAPTIONS, 0, @Gradient, 0);
if Gradient then begin
clActiveCaptionGradient := GetSysColor(COLOR_GRADIENTACTIVECAPTION);
clInactiveCaptionGradient := GetSysColor(COLOR_GRADIENTINACTIVECAPTION);
Panel1.Color := clActiveCaption;
Panel2.Color := clActiveCaptionGradient;
Panel3.Color := clInactiveCaption;
Panel4.Color := clInactiveCaptionGradient;
end else showmessage('Kein Verlauf');
end;
// neu setzen
const
count = 4;
var
NewColors: array[0..count - 1] of TColor =
(clMaroon, clYellow, clBlack, clWhite);
DisplayElements: array[0..count - 1] of DWord =
(COLOR_ACTIVECAPTION, COLOR_GRADIENTACTIVECAPTION,
COLOR_INACTIVECAPTION, COLOR_GRADIENTINACTIVECAPTION);
procedure TForm1.Button2Click(Sender: TObject);
begin
setsyscolors(count, DisplayElements, NewColors);
end;
//------------------------------------------------------------------
// Für Windows 7 funktioniert das aber nur, wenn
Windows-Theme abgeschaltet wird
// Beispiel mit Delphi 2010:
uses UxTheme;
const
count = 4;
var
NewColors: array[0..count - 1] of TColor =
(clBlue, clLime, clBlack, clWhite);
DisplayElements: array[0..count - 1] of DWord =
(COLOR_ACTIVECAPTION, COLOR_GRADIENTACTIVECAPTION,
COLOR_INACTIVECAPTION, COLOR_GRADIENTINACTIVECAPTION);
procedure TForm2.FormActivate(Sender: TObject);
begin
SetWindowTheme(Handle, '', '');
setsyscolors(count, DisplayElements, NewColors);
end;
|