Visual Style-abhängige Hintergrundfarbe von Panels ermitteln

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

KnorxThieus

Betreff: Visual Style-abhängige Hintergrundfarbe von Panels ermitteln

BeitragSa, Jun 22, 2013 10:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich bediene mich der Funktion NiceLabel aus der BlitzBasic.com Community, um die Textfarbe zu ändern. Allerdings möchte ich die Hintergrundfarbe so lassen, wie es die Voreinstellung bei Labels und Panels ist. Normalerweise ist das ja weiß, aber wenn man Visual Styles eingespielt hat, ist das nicht unbedingt so...
Wie ermittle ich diese Farbe? In der Registry gespeichert? Zeichnen und aus DesktopBuffer kopieren?
Das Zeichnen & Ermitteln hat nicht recht geklappt: BlitzBasic: [AUSKLAPPEN]
Function GetPanelBackGroundColor(mode = 0)
; Stop
w = CreateWindow("", 200, 200, 5, 5, Desktop(), 0)
p = CreatePanel(0, 0, 5, 5, w)
i = CreateImage(5, 5)
CopyRect 200, 200, 5, 5, 0, 0, DesktopBuffer(), ImageBuffer(i)
GetColor 2, 2
FreeGadget w
FreeImage i
Select mode
Case 1
Return ColorRed()
Case 2
Return ColorGreen()
Case 3
Return ColorBlue()
End Select
End Function

Aufruf im Programm:
BlitzBasic: [AUSKLAPPEN]
label4=CreateNicelabel("Whop!",100,260,192,22,app)
r = GetPanelBackGroundColor(1)
g = GetPanelBackGroundColor(2)
b = GetPanelBackGroundColor(3)
SetNiceLabelLayout(label4,0,0,0,0,0,r, r, b)


Da kommt immer 0 also schwarz, raus...

Wie geht es / besser?

Bin jeder Hilfe oder Denkanstoß dankbar! Very Happy

MFG
Version: BlitzPlus / Blitz+

Starwar

BeitragSo, Jun 23, 2013 11:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
dazu gibt es in der WinAPI GetSysColor
COLOR_BTNFACE müsste die Farbe sein, die du suchst. Wenn nicht musst du einfach mal durchprobieren.
MFG

KnorxThieus

BeitragSo, Jun 23, 2013 11:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Na das ist doch genau was ich dachte! Danke!
Habe das mal auf einem Windows-8-PC, wo es weiß ist, und dann einem Windows-7, wo es nicht weiß ist, ausprobiert, aber er (BlitzBasic: [AUSKLAPPEN]
Notify Hex$(api_GetSysColor(15))
gibt immer Code: [AUSKLAPPEN]
00F0F0F0
aus! Das wäre ja aber nicht RGB jeweils 255! (EDIT: Habe noch mal nahcgerechnet, 240. Könnte das sein? Oder ist das was anderes?? EDIT2: Beim anderen Gerät aber auch 240. Sad )
COLOR_BTNFACE, habe ich geschaut, ist 15. Wieso ist COLOR_3DFACE aber auch 15? Und wieso kommt bei beiden geräten derselbe wert raus?

Habe jetzt noch mit Wert 5, COLOR_WINDOW, ausprobiert, da kommt wieder bei beiden 00FFFFFF.

Also danke erstmal, aber ich würde mich über weitere Hilfe freuen! Very Happy

MFG
Version: BlitzPlus / Blitz+

Starwar

BeitragSo, Jun 23, 2013 12:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Auf einem Windows 8 PC ist COLOR_BTNFACE in den Standardeinstllungen auch nicht weiß. Die Farben beziehen sich auf den Desktopmodus.
Dass COLOR_BTNFACE und COLOR_3DFACE zusammen fallen kann gut sein, da musst du dich nicht weiter dran stören.
Du kannst die Farbe von deinem gewünschten Element in der Systemsteuerung einfach mal auf pink stellen und dann siehst du ganz einfach ob deine Ausgabe stimmt.
(F0hex=240dec, ja Wink)

KnorxThieus

BeitragSo, Jun 23, 2013 12:33
Antworten mit Zitat
Benutzer-Profile anzeigen
O, danke, ja! Habe mal im Windows 8 auf Classic gestellt, Werte sind anders.
Ich habe also jetzt Screenshots von beiden Pcs gemacht, tatsache 240, also gleich!!! Surprised
Aber auf dem mit Windows 7 - selbst beim Original Visual Style sehe ich Kontrast zwischen NiceLabel und normalem Hintergrund, 255 und 240, auf Windows 8 keinen Kontrast!!!
O Mann, ich kapier gar nix mehr... sidn bloß die BILDSCHIRME so verschieden??

Tatsache ist jedenfalls, verzeihe bitte, dass ich stupide Fragen gestellt habe, Problem gelöst, NiceLabel-Hintergrundfarbe mit dieser Funktion ermitteln:
BlitzBasic: [AUSKLAPPEN]
bg_r = ConvertARGB_R(api_GetSysColor(15))
bg_g = ConvertARGB_G(api_GetSysColor(15))
bg_b = ConvertARGB_B(api_GetSysColor(15))


Function ConvertARGB_R(argb)
r = (argb And $FF0000) / $10000
Return r
End Function

Function ConvertARGB_G(argb)
g = (argb And $FF00) / $100
Return g
End Function

Function ConvertARGB_B(argb)
b = argb And $FF
Return b
End Function


Also nochmals, lieber Starwar, vielen Dank für deine Hilfe und verzeih mir meine Dummheit...
mfg

EDIT: Achso, noch eine Frage... ist nIndex bei disableten Labels 16, oder bleibt es gleich? Gelegentlich disable ich meine Nicelabels.
Version: BlitzPlus / Blitz+

Starwar

BeitragSo, Jun 23, 2013 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe im gesamten Thread keine stupiden Fragen gefunden Wink

KnorxThieus

BeitragSo, Jun 23, 2013 13:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch... einfach nicht bemerkt, dass der Bildschirm schuld ist...
Und ist nIndex bei disableten Labels 16, oder bleibt es gleich? Gelegentlich disable ich meine Nicelabels.
Version: BlitzPlus / Blitz+

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group