Entwickler-Ecke

Windows API - Windows Desktop Grundfarbe


patmann2001 - Fr 05.11.04 17:42
Titel: Windows Desktop Grundfarbe
Hallo

Ich möchte gern die aktuelle Hintergrundfarbe meines Desktops ermitteln. Dazu möchte ich auf keinen Fall irgendwelche Zeichenoperationen auf dem Desktop durchführen, also mit Hilfe von GetPixel oder so. Dazu habe ich hier im Forum einiges an Stoff gelesen und das möchte ich nicht. Es gibt in der Registry einen Pfad welcher da heißt:
Zitat:
HKEY_CURRENT_USER\Control Panel\Appearance\Schemes

In diesem Schlüssel sind alle Schema gespeichert die man unter Eigenschaften von Anzeige erstellt hat. Im Pfad
Zitat:
HKEY_CURRENT_USER\Control Panel\Appearance

gibt es den Schlüssel
Zitat:
Current
in dem das aktuelle Schema eingestellt wird.
Ein Schema ist ein Binärschüssel, soviel weiss ich. Leider weiss ich nicht wie man

a) Diesen Schlüssel unter Delphi so laden kann, das man damit arbeiten kann.
b) Welche Positioinen in dem Schlüssel für die Desktopfarbe sind.

Unter Google habe ich für WinCE eine Beschreibung gefunden in der die zweite 4er Folge (also 8 Ziffern) für den Desktop sind. Sie beschreiben dort also eine Zahl im TColor Format. Leider habe ich für W2k dafür noch nichts gefunden.

Es währe mir schon geholfen, wenn mir jemand zeigen könnte, wie ich an die verschiedenen Zahlen komme um sie einfach an einen Canvas als TColor übergeben zu können.

Ich hoffe man versteht was ich sagen will.

Danke
Patmann

P.S. Hoffentlich das richtige Forum :?


blackbirdXXX - Fr 05.11.04 17:55

Also bei meine Delphi gibt es einen Farbcode der lautet: clBackground
Das ist die Desktopfarbe.
Ob es den aber bei D4 gibt, weiß ich nicht.


Radioactive - Fr 05.11.04 18:00
Titel: Es geht auch einfacher
Es geht auch einfacher:
Im Schlüssel "HKEY_CURRENT_USER\Control Panel\Colors" liegt unter dem Value "Background" die Hintergrundfarbe des Desktops in RGB-Farben mit Leerzeichen voneinander getrennt.

Die Werte ließt man in Delphi wie folgt aus:

1) Man vereinbart ein Objekt der Klasse TRegistry (Die muss noch bei uses hinzugefügt werden), also z.B.:

Delphi-Quelltext
1:
var myReg: TRegistry;                    


2) Man createt es in der FormCreate-Methode: myReg := TRegistry.Create;

3) Beim Click auf Button1 wird der Wert ausgelesen und im Label1 angezeigt:

Delphi-Quelltext
1:
2:
3:
4:
myReg.RootKey := HKEY_CURRENT_USER;
myReg.OpenKey('\Control Panel\Colors\');
Label1.Caption := myReg.ReadString('Background');
myReg.CloseKey;


Im Label1 steht jetzt z.B.: "167 3 3".

Ich hoffe, dir ist damit geholfen.


Delete - Fr 05.11.04 18:19

Das nennst du einfach? Na ja, jedem das seine ... ;)

Ich bin der Meinung, dass es die Systemfarben wie clXXXXX auch in Delphi 4 schon gibt/gab. Und wenn nicht, dann hilft vllt. die API-Funktion GetSysColor [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getsyscolor.asp] weiter, dort stehen die Konstanten für diverse Systemfarben, u.a. auch der Desktop: COLOR_DESKTOP.


patmann2001 - Sa 06.11.04 08:53

Danke Danke Danke :D

Ja, unter D4 gibt es clBackground womit mein Problem in einer Zeile gelöst ist.
Das mit dem Eintrag Color in der Registry und dem API GetSysColor wußte ich aber auch noch nicht. Ich werde mir das alles mal merken!

Vielen Dank für eure Hilfe

Patmann 8)