XBPSYSCLR_ACTIVEBORDER [erledigt]

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

XBPSYSCLR_ACTIVEBORDER [erledigt]

Beitrag von AUGE_OHR »

wenn ich das Demo c:\ALASKA\XPPW32\SOURCE\samples\basics\PRESPARA\panel.prg unter Win8.1 laufen lasse dann hat das aktive Fenster zwar die richtige Farbe aber die Darstellung von XBPSYSCLR_ACTIVEBORDER im 2nd Fenster ist nicht ok ... oder gab es dafür einen Hotfix ?
ACTIVEBORDER.PNG
ACTIVEBORDER.PNG (68.77 KiB) 5370 mal betrachtet
üblicherweise wird der visual Style ja durch das eingestellte Theme dargestellt.
nun verwende ich Codejock Skinframework so das meine Xbase++ Application ein eigenes Theme haben kann.

nun ist, auch unter Win7/8/10, immer noch in einigen Bereichen im alten "Grau" gehalten (z.b. Menu) was ich mit Gradient aufgehübscht habe. Ich möchte dazu die "Farbe" (?) von einem Theme, den der User einstellen kann, nehmen und dachte ich könnte die Xbase++ Konstante XBPSYSCLR_ACTIVEBORDER verwenden ...
Zuletzt geändert von AUGE_OHR am Do, 05. Mär 2015 5:24, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: XBPSYSCLR_ACTIVEBORDER

Beitrag von AUGE_OHR »

ich habe mal probiert die Windows API Function GetSysColor() zu benutzen
https://msdn.microsoft.com/en-us/librar ... 85%29.aspx

Code: Alles auswählen

C:\ALASKA\XPPW32\SOURCE\samples\basics\PRESPARA\panel.prg

// neu dazu
METHOD ColorDialog:RGB(nColor)
LOCAL nRet1
LOCAL nRet2
LOCAL nRet3

*EnableTheming(.F.)
   nRet1 := GetSysColor(nColor)
   nRet2 := AutomationTranslateColor( nRet1, .T. ) 
   nRet3 := GraGetRGBIntensity(nRet2)

   ondummy("RGB",nRet1,nRet2,nRet3,nColor)
*EnableTheming(.T.)

RETURN (nRet3)
damit bekomme ich dann folgenden Ergebnisse ( letzte Reihe die Konstanten von o.g. Link )

Code: Alles auswählen


RGB	15790320	32567536	{240, 240, 240}	15
RGB	0		    16777216	{0, 0, 0}	      18
RGB	0		    16777216	{0, 0, 0}	      1
RGB	0		    16777216	{0, 0, 0}	      8
RGB	16777215	33554431	{255, 255, 255}	5
RGB	0		    16777216	{0, 0, 0}	      8
RGB	11250603	28027819	{171, 171, 171}	12
RGB	16750899	33528115	{51, 153, 255}	 13
RGB	16777215	33554431	{255, 255, 255}	14
RGB	15790320	32567536	{240, 240, 240}	4
RGB	0		    16777216	{0, 0, 0}	      7
RGB	14811135	31588351	{255, 255, 225}	24
RGB	0		    16777216	{0, 0, 0}	      23
RGB	11842740	28619956	{180, 180, 180}	10 -> COLOR_ACTIVEBORDER
RGB	16578548	33355764	{244, 247, 252}	11
RGB	13743257	30520473	{153, 180, 209}	2
RGB	0		    16777216	{0, 0, 0}	      9
RGB	14405055	31182271	{191, 205, 219}	3
RGB	0		    16777216	{0, 0, 0}	      19
aber die Farben stimmen alle nicht, siehe "Benutzerdefinierte Farben" in der Palette (gesucht wird {240,200,105})
Palette.png
Palette.png (67.56 KiB) 5365 mal betrachtet
GetSysColor(nColor) hat als Rückgabe Wert
Return value

Type: DWORD

The function returns the red, green, blue (RGB) color value of the given element.

If the nIndex parameter is out of range, the return value is zero. Because zero is also a valid RGB value, you cannot use GetSysColor to determine whether a system color is supported by the current platform. Instead, use the GetSysColorBrush function, which returns NULL if the color is not supported.
muss ich nRet1 anders behandeln um ein aRGB Array zu erhalten ?
PANEL.ZIP
(15.34 KiB) 230-mal heruntergeladen
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: XBPSYSCLR_ACTIVEBORDER

Beitrag von AUGE_OHR »

ich noch was gefunden : die Farben stehen in der Registry unter HKEY_CURRENT_USER\Control Panel\Colors :)
PanelColor.PNG
PanelColor.PNG (152.32 KiB) 5363 mal betrachtet
leider ist die schlechte Nachricht das auch die Zahlen nicht "die" Farbe enthält die ich suche :angry4:
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: XBPSYSCLR_ACTIVEBORDER

Beitrag von AUGE_OHR »

ich habe nun nochmal aller Werte von GetSysColor() überprüft
Color_Alle.PNG
Color_Alle.PNG (63.97 KiB) 5357 mal betrachtet
links ohne Manifest / rechts mit ... kein Unterschied ...
es sind IMHO die Werte aus der Registry und nicht vom visual Style ... oder hab ich was übersehen ?
anbei Source Code den ich verwendet habe
XPFARBEN.ZIP
(1.93 KiB) 264-mal heruntergeladen
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: XBPSYSCLR_ACTIVEBORDER

Beitrag von brandelh »

Ich habe z.B. das Problem, dass die Hintergrund "System" Farbe eines TabControls eine Art von Weiß ist,
aber wenn ich diese Farbe dann einem anderen XbPart als Hintergrund zuweise ist die Farbe unterschiedlich.

Nur wenn ich eben NICHTS zuweise bleibt das Control durchscheinend ... schon seltsam das mit den Farben.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: XBPSYSCLR_ACTIVEBORDER

Beitrag von AUGE_OHR »

hi

ich denke ich komme langsam dahinter was hier schief läuft : ab Vista / Win7 läuft alles über DWM ;)

unter HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM gibt es den Sclüssel "ColorizationColor" mit dem Wert "aff6c34a" was ein aRGB darstellt. RGB ist klar und das "a" steht für Alpha Kanal also Transparenz.

Wenn ich jetzt nun "f6 c3 4a" als RGB in Paint eingebe sieht es doch der Farbe der Titlebar er ähnlich =D>
DWM_Color.png
DWM_Color.png (18.42 KiB) 5322 mal betrachtet
allerdings ist mein Problem dadurch noch nicht gelöst denn mit Codejock SkinFrameWork kann der User ja bei meiner Xbase++ Applikation ein "extra" Theme laden ...
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: XBPSYSCLR_ACTIVEBORDER

Beitrag von AUGE_OHR »

AUGE_OHR hat geschrieben:Wenn ich jetzt nun "f6 c3 4a" als RGB in Paint eingebe sieht es doch der Farbe der Titlebar er ähnlich =D>
die Abweichung ist wohl deswegen
http://stackoverflow.com/questions/3560 ... lass-color
First step is to parse AARRGGBB. Then take the resulting RGB and convert to HSV. The pure Hue plus Saturation at full brightness is the base color. Now overlay Value as a grayscale at Alpha over top of pure Hue and Saturation to get the Aero color. Then overlay that color over the frame color: rgb(235, 235, 235) at Intensity to get the final Composite Aero color result.
eine C Lösung scheint es hier zu geben http://www.codeproject.com/Articles/610 ... Aero-Color
in der "DwmApi.dll" gibt es wohl die undokumentierten Function
DwmGetColorizationParameters() // At index 127, undocumented API
DwmSetColorizationParameters() // At index 131, undocumented API
womit man direkt an die (aktuellen ?) Color Werte des Theme ran kommt.
interessant auch noch dieser Hinweis
0xAARRGGBB format (as opposed to a COLORREF which is 0x00BBGGRR, so you will need to translate between the two formats)
nicht dass man bei RGB R <-> B vertauscht ...
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: XBPSYSCLR_ACTIVEBORDER

Beitrag von AUGE_OHR »

nun habe ich nach einer Lösung gesucht ... aber es war ein ganz anderes Problem :-"

ich hatte bei Codejock Skinframework die Konstante "xtpSkinApplyFrame" NICHT gesetzt weil die mit Ownerdraw Menu ( verschwindet ) Probleme macht.
zum "Frame" gehört aber auch die Titlebar was nun das Theme des OS() benutzte weil der Flag NICHT gesetzt war ... #-o
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: XBPSYSCLR_ACTIVEBORDER [erledigt]

Beitrag von AUGE_OHR »

Nachtrag :
mittels DWM komme ich zwar an die aktuellen System Theme Werte aber nicht an die von Codejock SkinFramework.

nun gibt es aber in Codejock selbst den XTPColorManagerColor und darüber kann ich nun die Farben vom Skin abfragen ;)
das einzige was mir noch fehlt ist die Definition der Konstanten welche fehlt ( :?: :!: ) und sich von Windows unterscheiden ?

Code: Alles auswählen

STDCOLOR_BACKGROUND
STDCOLOR_ACTIVECAPTION
STDCOLOR_INACTIVECAPTION 

statt wie in WinUser_constants.ch

#define COLOR_BACKGROUND      1
#define COLOR_ACTIVECAPTION   2
#define COLOR_INACTIVECAPTION 3
gruss by OHR
Jimmy
Antworten