// 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)

Nach der Änderung
(siehe "Button2Click")

 

// 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; 
 

 


 

Zugriffe seit 6.9.2001 auf Delphi-Ecke