XBPSYSCLR_ACTIVEBORDER [erledigt]
Moderator: Moderatoren
- AUGE_OHR
- 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]
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 ?
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 ...
ü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
Jimmy
- AUGE_OHR
- 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
ich habe mal probiert die Windows API Function GetSysColor() zu benutzen
https://msdn.microsoft.com/en-us/librar ... 85%29.aspxdamit bekomme ich dann folgenden Ergebnisse ( letzte Reihe die Konstanten von o.g. Link )
aber die Farben stimmen alle nicht, siehe "Benutzerdefinierte Farben" in der Palette (gesucht wird {240,200,105}) GetSysColor(nColor) hat als Rückgabe Wert
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)
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
muss ich nRet1 anders behandeln um ein aRGB Array zu erhalten ?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.
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- 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
ich noch was gefunden : die Farben stehen in der Registry unter HKEY_CURRENT_USER\Control Panel\Colors
leider ist die schlechte Nachricht das auch die Zahlen nicht "die" Farbe enthält die ich suche gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- 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
ich habe nun nochmal aller Werte von GetSysColor() überprüft
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
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
gruss by OHR
Jimmy
Jimmy
- brandelh
- 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
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.
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
Hubert
- AUGE_OHR
- 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
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> 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 ...
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> 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
Jimmy
- AUGE_OHR
- 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
die Abweichung ist wohl deswegenAUGE_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>
eine C Lösung scheint es hier zu geben http://www.codeproject.com/Articles/610 ... Aero-Colorhttp://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.
in der "DwmApi.dll" gibt es wohl die undokumentierten Function
womit man direkt an die (aktuellen ?) Color Werte des Theme ran kommt.DwmGetColorizationParameters() // At index 127, undocumented API
DwmSetColorizationParameters() // At index 131, undocumented API
interessant auch noch dieser Hinweis
nicht dass man bei RGB R <-> B vertauscht ...0xAARRGGBB format (as opposed to a COLORREF which is 0x00BBGGRR, so you will need to translate between the two formats)
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- 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
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 ...
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 ...
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- 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]
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 ?
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
Jimmy