Guten Morgen,
ich wollte einer Form die Farbe des Fenstertitels geben und dachte dabei sofort an die ganzen vordefinierten Farben, die ich bisher nie verwendet hatte (-;
Aber das war wohl nichts. Keine der Farben entspricht der Farbgebung unter Windows 11 dem aktuelllen Fenster.
Es wird sicher eine Möglichkeite geben, die Farbe zu ermitteln. Hast jemand vielleicht eine Handvoll Zeilen Code für mich ?
Danke !
Stefan
Windows Caption Color - Farbe des Fenstertitels
-
- Beiträge: 6955
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Windows Caption Color - Farbe des Fenstertitels
Müsste dies nicht in der Windows-Registry stehen ?
Dann würde man mit WinAPI Funktionen ran kommen.
Dann würde man mit WinAPI Funktionen ran kommen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 385
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: Windows Caption Color - Farbe des Fenstertitels
Hi!
Ich bin selber immer wieder überrascht, dass Windows scheinbar für wirklich alles einen eigenen API-Call hat.
Falls diese Win32-Hilfeseite die gemeinte Farbe beschreibt ... https://learn.microsoft.com/en-us/windo ... ationcolor
Mittels uses muss die in Laz enthaltene Unit DwmApi eingebunden werden, von der ich vorher noch nie gehört hatte.
Grüße, Jörg
Ich bin selber immer wieder überrascht, dass Windows scheinbar für wirklich alles einen eigenen API-Call hat.
Falls diese Win32-Hilfeseite die gemeinte Farbe beschreibt ... https://learn.microsoft.com/en-us/windo ... ationcolor
Code: Alles auswählen
function getWindowTitleColor(out AColor: TColor): Boolean;
var
R, G, B: Byte;
pfOpaqueBlend: BOOL;
pcrColorization: DWORD;
begin
Result := DwmApi.DwmGetColorizationColor({out}pcrColorization,{out}pfOpaqueBlend) = 0;
if Result then
begin
R := (pcrColorization and $FF0000) shr 16;
G := (pcrColorization and $00FF00) shr 8;
B := pcrColorization and $0000FF;
AColor := LCLIntf.RGB(R, G, B);
end;
end;
Grüße, Jörg