Hi!
Ich habe gerade ein Problem...
Ich bastle gerade ein Programm, aktuell 3500 Zeilen daher kein Skript angefügt^^
Darin erstelle ich einen Slider in einem Tabitem, sieht so ähnlich aus wie hier:
http://www.autoitscript.com/forum/index.php?act=attach&type=post&id=22810
Jetzt müsste ich die System-Hintergrundfarbe für Tabs herausfinden.
Bei Vista standartmäßig 255,255,255; aber mit msstyles etc. ändert sich das ja.
Ich hab schon mit PixelGetColor eine Lösung geschrieben, da die Farbe aber erst nach erstellen des Fensters geändert wird ist das nicht ausreichend.
Aktuell versuche ich es mit _WinAPI_GetSysColor(), raff ich aber nicht ganz.
Vorschläge?
Danke!
Tab Hintergrundfarbe ermitteln
-
- [ offen ]
-
senthor -
11. Februar 2009 um 17:59 -
Geschlossen -
Erledigt
-
-
Ich würde sagen du brauchst $COLOR_APPWORKSPACE
-
Nein, ich brauche nicht die Hintergrundfarbe von MDI-Fenstern sondern von TABS!!!!
Tabs Jonathan, TABS!!!!!!
Und was ist das überhaupt für ein komischer RGB-Wert, der da raus kommt:
11250603
Was soll das bedeuten?
Ist RGB nicht z.B. 255 255 255?
112 50 603 kanns ja nicht sein^^
11 250 603 auch nicht
112 506 03 auch nicht??????? -
du könntest sie per pixelsearch rausfinden?
also praktisch die koordinaten deines fensters ermitteln und dann da irgendwo pixelsearch
das ist aber nur ne notlösung
würd ich unter alles andere schreibenPadmak
Edit: Wandles mal in hex um
-
Hab ich ja mit PixelGetColor quasi schon so ähnlich gemacht....
-
hä wo denn bitte?
oder bin ich blind *brille putz*Padmak
-
Und was ist das überhaupt für ein komischer RGB-Wert, der da raus kommt:
11250603
Was soll das bedeuten?
Ist RGB nicht z.B. 255 255 255?
112 50 603 kanns ja nicht sein^^
11 250 603 auch nicht
112 506 03 auch nicht???????Hex($color)
-
Ich hab schon mit PixelGetColor eine Lösung geschrieben, da die Farbe aber erst nach erstellen des Fensters geändert wird ist das nicht ausreichend. -
den Wert von _WinAPI_GetSysColor mit folgender Funktion umwandeln:
[autoit]Func _BGR2RGB($iColor)
[/autoit]
Return BitAND(BitShift(String(Binary($iColor)), 8), 0xFFFFFF)
EndFuncWarum, weiß ich auch nicht so genau; Möglicherweise liefert _WinAPI_GetSysColor den BGR und nicht den RGB, wie beschrieben!?
Aber es funktioniert...Mit Hex($Farbe) siehts du dann die RGB Werte (0xRRGGBB)
lgE
-
Macht keinen Unterschied...
Die Farbe ist dann 0xABABAB
Das Problem ist, dass $COLOR_APPWORKSPACE falsch ist.
Ich brauche die Hintergrundfarbe eines TabItems (der großen Fläche wo die Controls rein sollen^^)
Bei Vista ist die Farbe bei Aero 0xFFFFFF.
Hab ich mit PixelGetColor rausgefunden, nützt aber nichts. -
Eigentlich sollte es $COLOR_BTNFACE sein...
Edit: Nein! Die verwendete Farbe ist abhängig vom gewählten Design.
http://msdn.microsoft.com/en-us/library/bb773397(VS.85).aspx
Damit sollte es gehen, jedoch bräuchten wir da jemanden, der das in Autoit umsetzen kann...lgE
-
Cool, danke.
Ich versuch's mal, ist ja mit Structs und DLLCall. Kann aber für nichts garantieren! -
OK bisher hab ich:
[autoit]$classes = WinGetClassList("[CLASS:AutoIt v3 GUI;TITLE:ModMan]")
[/autoit]
$struct = DllStructCreate("COLORREF")
$struct2 = DllStructCreate("str")
DllStructSetData($struct2, 1, $classes)
$htheme = DllCall("uxtheme.dll", "none", "OpenThemeData", "hwnd", $gui, "ptr", DllStructGetPtr($struct2))
$color = DllCall("uxtheme.dll", "int:COLORREF", "GetThemeColor", "HTHEME", $htheme, "int", "TABP_BODY", "int", "", "int", "TMT_COLOR")
DllCall("uxtheme.dll", "none", "CloseThemeData", "hwnd", $htheme)
Klappt aber noch nicht. Ideen? -
Moin,
[autoit]
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]
$classes = WinGetClassList("[CLASS:AutoIt v3 GUI;TITLE:ModMan]") ; ???
$struct = DllStructCreate("dword") ; COLORREF = BGR !!!
$struct2 = DllStructCreate("wstr")
DllStructSetData($struct2, 1, $classes)
$htheme = DllCall("uxtheme.dll", "none", "OpenThemeData", "hwnd", $gui, "ptr", DllStructGetPtr($struct2))
$color = DllCall("uxtheme.dll", "int", "GetThemeColor", _
"ptr", $htheme, _
"int", "TABP_BODY", _ ; ???
"int", "", _ ; ???
"int", "TMT_COLOR") ; ???
DllCall("uxtheme.dll", "none", "CloseThemeData", "ptr", $htheme)
Du brauchst die Klassennamen des Tab-Steuerelements ...
Du brauchst die Werte für TABP_BODY und TMT_COLOR ...Gruß
Greenhorn -
Laut http://msdn.microsoft.com/en-us/library/bb773397(VS.85).aspx kann ich diese Strings als Parameter übergeben; auf der Website stehen auch keine IDs.
-
Hi
wstr bei DllStructCreate gibt es nicht, sollte Char[255] oda so was sein.
Die Classlist, welche an OpenThemeData übergeben wird, muß mit Semikolons getrennt sein - WingetClasslist trennt mit @lfTrotzdem gibt OpenThemeData kein ThemeHandle zurück...
Hier sind die Werte der Konstanten (z.b. TABP_BODY) zu finden:
http://co-project.lboro.ac.uk/users/codm2/wi…TBXUxThemes.pasWeiter weiß ich jetzt auch grad nicht...
lgE
-
Sollte eigentlich so gehen:
Spoiler anzeigen
[autoit]Global Const $VSCLASS_TAB = "TAB"
[/autoit] [autoit][/autoit] [autoit]Global Const $TABP_TABITEM = 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global Const $TABP_TABITEMLEFTEDGE = 2
Global Const $TABP_TABITEMRIGHTEDGE = 3
Global Const $TABP_TABITEMBOTHEDGE = 4
Global Const $TABP_TOPTABITEM = 5
Global Const $TABP_TOPTABITEMLEFTEDGE = 6
Global Const $TABP_TOPTABITEMRIGHTEDGE = 7
Global Const $TABP_TOPTABITEMBOTHEDGE = 8
Global Const $TABP_PANE = 9
Global Const $TABP_BODY = 10
Global Const $TABP_AEROWIZARDBODY = 11
Global Const $TMT_COLOR = 204
Global Const $TMT_FILLCOLOR = 3802
Global Const $TMT_FILLCOLORHINT = 0x0EED$hWnd = GUICtrlGetHandle($tab) ; Handle des Tabcontrols
[/autoit] [autoit][/autoit] [autoit]
$hTheme = DllCall("uxTheme.dll", "ptr", "OpenThemeData", "hwnd", $hWnd, "wstr", $VSCLASS_TAB)
$hTheme = $hTheme[0]$COLORREF = DllCall("uxTheme.dll", "lresult", "GetThemeColor", "ptr", $hTheme, "int", $TABP_PANE, "int", 0 , "int", $TMT_FILLCOLOR, "dword*", 0)
[/autoit] [autoit][/autoit] [autoit]
$COLORREF = $COLORREF[5]
$RGB = _BGR2RGB($COLORREF)
DllCall("uxTheme.dll","lresult","CloseThemeData","ptr", $hTheme)Func _BGR2RGB($iColor)
[/autoit]
Return Number(String(BinaryMid(Binary($iColor),1,3)))
EndFunc
Die RGB-Farbe ist dann in $RGB. ( bei mir kommt aber 0xF4F4F4 raus, das ist dunkler als der Tab selbst. -
Danke!
[autoit]
Versuch vllt mal in einer Schleife alle durch, wenn du XP hast...
Bei Vista ist der wert nicht sehr aussagekräftig, 0xFFFFFF ist viel.
Also so:$hWnd = GUICtrlGetHandle($tab) ; Handle des Tabcontrols
[/autoit][autoit][/autoit][autoit]
$hTheme = DllCall("uxTheme.dll", "ptr", "OpenThemeData", "hwnd", $hWnd, "wstr", $VSCLASS_TAB)
$hTheme = $hTheme[0]For $a = 1 to 11
[/autoit][autoit][/autoit][autoit]
For $b = 3801 to 3823
$COLORREF = DllCall("uxTheme.dll", "lresult", "GetThemeColor", "ptr", $hTheme, "int", $a, "int", 0 , "int", $b, "dword*", 0)
$COLORREF = $COLORREF[5]
$RGB = _BGR2RGB($COLORREF)
If Hex($RGB) = "00FCFCFE" then Msgbox(0,"",Hex($RGB) & @lf & $a & @lf & $b)
Next
NextDllCall("uxTheme.dll","lresult","CloseThemeData","ptr", $hTheme)
[/autoit][autoit][/autoit][autoit]
Func _BGR2RGB($iColor)
Return Number(String(BinaryMid(Binary($iColor),1,3)))EndFunc
[/autoit]
Bei XP müsste (bei Standart-Style) 0xFCFCFE rauskommen.Bei welchen vars ist das so?
Danke! -
Also, bei mir (Vista-Style) Ist PixelGetColor 0xFFFFFF. Da kommt am ehesten das ran mit Ergebnis 0xFEFEFE:
$a = $TABP_PANE
$b = $TMT_FILLCOLORHINT -
Für Vista hauts mit TABP_AEROWIZARDBODY und TMT_FILLCOLORHINT hin.Aber für XP???