Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Standard-Fensterfarbe bei WinAPI-Fenstern? (https://www.delphipraxis.net/27190-standard-fensterfarbe-bei-winapi-fenstern.html)

CalganX 5. Aug 2004 15:53


Standard-Fensterfarbe bei WinAPI-Fenstern?
 
Hi,
noch ein kleines Farbproblem: was bitte ist die aus der VCL bekannte Farbe clBtnFace in der WinAPI?
Luckie schreibt in seinem Tutorial COLOR_APPWORKSPACE allerdings ist das nicht wirklich die Standardfarbe, sondern ein recht dunkles grau. ;) Ich habe vorrübergehend COLOR_APPWORKSPACE+1 genommen, aber das ist es auch nur fast.
Naheliegend wäre ja eigentlich COLOR_BTNFACE, aber das ist bei mir weiß (also die richtige Farbe der Buttons, aber das ist <> clBtnFace). :|

Chris

Luckie 5. Aug 2004 15:58

Re: Standard-Fensterfarbe bei WinAPI-Fenstern?
 
Also bei mir unter 2000 tut es das COLOR_APPWORKSPACE. Und in der aktuellen Version hat Mathias das für XP ergänzt:
Zitat:

Hinweis für Windows XP
Wie Ihnen das Bild links zeigt, wird unter Windows XP der Fensterhintergrund evtl. zu dunkel dargestellt. Das liegt an der Verwendung von COLOR_APPWORKSPACE (wie eingangs gezeigt) bei aktiven Themes. Als Abhilfe sollten Sie mit der Funktion "GetSysColorBrush" die Farbe für 3D-Elemente laden und benutzen:
wc.hbrBackground := GetSysColorBrush(COLOR_3DFACE);


Wie Sie im Bild rechts sehen können, wird dann der Hintergrund korrekt dargestellt:

*

Sie können diesen Befehl auch verwenden, wenn Sie keine Themes aktiviert haben bzw. ein anderes Betriebssystem als Windows XP benutzen (9x, ME, NT und 2000). Eine Übersicht über die möglichen Farbwerte finden Sie unter dem Befehl "GetSysColor" im PSDK.
Der Unterschied zwischen beiden Befehlen ist, dass "GetSysColorBrush" die gewünschte Farbe gleich als so genannten Brush zurückliefert, der sofort mit der Membervariablen hbrBackground (s. TWndClassEx-Record) benutzt werden kann. Dagegen müssten Sie das Ergebnis von "GetSysColor" (ein dword-Wert mit den RGB-Informationen der Farbe) erst bspw. mit "CreateSolidBrush" umwandeln, um ihn für den Fensterhintergrund nutzen zu können.
Nicht umsonst ist bei den Demos noch das Tutorial dabei. ;)

CalganX 5. Aug 2004 16:01

Re: Standard-Fensterfarbe bei WinAPI-Fenstern?
 
Hi,
danke dir Luckie. :) Funktioniert einwandfrei, was auch sonst? ;)

Allerdings habe ich die Demos nicht mal installiert. :tongue:

Chris

MathiasSimmack 5. Aug 2004 16:04

Re: Standard-Fensterfarbe bei WinAPI-Fenstern?
 
Zitat:

Zitat von Luckie
Also bei mir unter 2000 tut es das COLOR_APPWORKSPACE.

Ja, aber wie gesagt: Wenn du dein Win2000-Programm dann unter XP laufen lässt, hast du das gleiche Farbproblem. Deswegen ja auch die Ergänzung. :)

Und nun noch einen kleinen Strich für den Luckie:
Generell gilt: Alles in den Tutorials, das irgendwie mit Windows XP zu tun, ist von mir - mir - mir; weil: Luckie hat gar kein XP.
;)

mirage228 5. Aug 2004 16:41

Re: Standard-Fensterfarbe bei WinAPI-Fenstern?
 
Hi,

in einem nonVCL Programm von mir, habe ich einfach

Delphi-Quellcode:
COLOR_BACKGROUND + 15; // = clBtnFace
verwendet. Das ist zwar nicht sehr schön, funktioniert aber.

mfG
mirage228

Luckie 5. Aug 2004 16:43

Re: Standard-Fensterfarbe bei WinAPI-Fenstern?
 
Und warum gibstdu dann nicht gleich COLOR_BTNFACE an? das dürfte clBtnFace entsprechen. Und damit wären wir wieder bei obigen Problem.

MathiasSimmack 5. Aug 2004 19:05

Re: Standard-Fensterfarbe bei WinAPI-Fenstern?
 
Ja, das ist sehr umständlich, @mirage. Im PSDK stehen COLOR_3DFACE und COLOR_BTNFACE in der gleichen Zeile, s. [msdn]"GetSysColor"[/msdn], also bezeichnen sie auch den selben Farbwert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz