Hintergrundfarbe von Textgadgets

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Hintergrundfarbe von Textgadgets

Beitrag von dibro »

Hi,
ich brauche nochmal Hilfe.
Ich schreibe Textgadgets über ein Image.
Damit man das besser lesen kann, zeichne ich eine Box in den Hintergrund.
Die Farbe der Box bestimme ich mit FrontColor(GetSysColor_(#COLOR_3DFACE)).
Bei Kompilation mit XP-Unterstützung weicht die Hintergrundfarbe immer vom Texthintergrund ab.
Ich habe da schon alle verfügbaren #COLOR_Konstanten ausprobiert, es gibt immer einen Helligkeitsunterschied.
Binde ich kein Hintergrundbild mit ein, passen die Farben.
Auch ohne XP-Unterstützung gibt es keine Probleme.
Vista hab ich nicht und deshalb auch noch nicht probiert.
Wer weiß weiter?
Gruß aus Solingen, PB 6.0 Win 10 Pro
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag von hjbremer »

Das Problem kenne ich ! Habe mich auch schon darüber geärgert. GetSysColor_ liefert dir nur die Farben ohne XP- SKIN. Und die Lösung ist ist recht aufwendig, denn dazu müßte man die richtige XP Theme Datei auslesen. Und wie das geht keine Ahnung.

Aber ich habe es mir einfach gemacht und einfach die Window Hintergrundfarbe mit SetWindowColor(#Window, Farbe) passend eingestellt. Und falls die Gadgets im Container sind, dann halt dessen Hintergrundfarbe. Außerdem habe ich bei mir alle Buttongadgets auf Imagegadgets umgestellt und nun haben alle die gleiche Farbe.

Ansonsten ist bei meinem XP die Farbe von Buttongadgets F0F4F4 und die normale Hintergrundfarbe D8E9EC

Die Farben habe ich mit folgendem Code ermittelt, der aus diesem Forum stammt glaube ich.

Vielleicht hilft dir das weiter.

Code: Alles auswählen

Procedure GetColorUnderMouse() 
  GetCursorPos_(@CursorPos.POINT ) 
  hDC = GetDC_(0) 
  If hDC <> 0 
    Color = GetPixel_(hDC,CursorPos\x,CursorPos\y) 
    ReleaseDC_(0, hDC) 
    ProcedureReturn Color 
  EndIf 
EndProcedure 

color.l = GetColorUnderMouse() 

Debug "Color:" 
Debug color 

Debug "Color in Hex format:" 
Debug Hex(color) 

Debug "Color in RGB values:" 
Debug Red(color) 
Debug Green(color) 
Debug Blue(color) 
Debug Hex(color)
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Poste mal bitte deinen Code dibro.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Beitrag von dibro »

@Fluid Byte

Hier ist nur ein Kodeschnipsel, der das Problem betrifft.
Ich lade da ein img in ein Fenster und überschreibe den Bereich mit Textgadgets mit einer Box, die die gleiche Farbe haben soll, wie der Texthintergrund. Wie gesagt, ohne XP-Unterstützung geht das auch.
Aber mit kriege ich die Farbe nicht in den Griff.

Code: Alles auswählen

.
.
If LoadImage(#Img_Luefter,GetPathPart(ProgramFilename())+"Ressourcen\Luefter.bmp",#PB_Image_DisplayFormat)
      ResizeImage(#Img_Luefter,720,620)
      ImageGadget(#ImgGad_Luefter,0,0,0,0,ImageID(#Img_Luefter),#PB_Image_Border)
      StartDrawing(ImageOutput(#Img_Luefter))
      FrontColor(GetSysColor_(#COLOR_3DFACE))    
      Box(8,25,108,400)
      Box(255,25,108,280)
      Box(498,25,108,102)
      Box(8,385,195,590)
      StopDrawing()
      DisableGadget(#ImgGad_Luefter,1)
    EndIf
    
    Frame3DGadget(#Frame3D_KL1,     10, 5,   200, 585, "")
    TextGadget(#Text_1,           15, 30,  100, 30, "Ventilator Durchm. mm",#PB_Text_Right)
    TextGadget(#Text_2,           15, 65,  100, 30, "Volumen m³/s",#PB_Text_Right)
    TextGadget(#Text_3,           15 ,85,  100, 15, "Wirkungsgrad %",#PB_Text_Right)
    TextGadget(#Text_4,           15, 110, 100, 30, "Volumen eff. m³/s",#PB_Text_Right)
.
.
Die API ist ja auch schon etwas älter, deshalb habe ich auch schon nach der Konstante gegoogelt, aber auch nix gefunden.
Feste Farbe eintragen ist ja nicht sehr elegant :(

Edit: Adressat
Gruß aus Solingen, PB 6.0 Win 10 Pro
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Hast du auch was lauffähiges? Ich kann mit dem Schnipsel nix anfangen bzw. nachvollziehen wie es aussehen soll.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Beitrag von dibro »

Hast du auch was lauffähiges? Ich kann mit dem Schnipsel nix anfangen bzw. nachvollziehen wie es aussehen soll.
Ist schwierig. Der Kode ist >3100 Zeilen und auf mehrere Dateien verteilt.
In der angegebenen Datei werden nur die Fenster und Panels initialisiert.

Aber ich bin da auf eine ganz andere Lösung gekommen:
Ich zeichne keine Boxen mehr, sondern ein leeres Textgadget in Größe der Boxen, dann habe ich den passenden Hintergrund.
Dann kommen die anderen Textgadgets drüber - klappt prima. :lol:

Code: Alles auswählen

    
If LoadImage(#Img_Luefter,GetPathPart(ProgramFilename())+"Ressourcen\Luefter.bmp",#PB_Image_DisplayFormat)
      ResizeImage(#Img_Luefter,720,620)
      ImageGadget(#ImgGad_Luefter,0,0,0,0,ImageID(#Img_Luefter),#PB_Image_Border)
      TextGadget(#Text_BackgroundK1,         8, 25,108,400, "",#PB_Text_Border)
      TextGadget(#Text_BackgroundK2,         8,385,198,590, "",#PB_Text_Border)
      TextGadget(#Text_BackgroundK3,       498, 25,108,102, "",#PB_Text_Border)
      TextGadget(#Text_BackgroundK4,       255, 25,108,280, "",#PB_Text_Border)
      DisableGadget(#ImgGad_Luefter,1)
    EndIf
Gruß aus Solingen, PB 6.0 Win 10 Pro
Antworten