Seite 1 von 1

background color

Verfasst: 12.05.2017 16:23
von kartmanne
HI,

als generelles API-Greenhorn habt ihr mir schon bei der Findung des Systemhintergrunds bei WIN geholfen. PB liefert das ja nicht mit eigenen Befehlen.
hgr = getsyscolor_(#colorbtnface)

Wie geht das auf McOSX?

Ich benutzt den Hintergrund zum "Löschen" von canvasgadgets, die auf Fenstern oder auf(?)/in(?) frames liegen.

Re: background color

Verfasst: 12.05.2017 16:49
von RSBasic
Hier gibt es einen Code für Windows, Linux und MacOS, um die Fenster-Hintergrundfarbe zu ermitteln: http://www.purebasic.fr/english/viewtopic.php?t=66974

Re: background color

Verfasst: 12.05.2017 18:01
von Shardik
Um die Hintergrundfarbe eines Fensters oder eines Gadgets zu ermitteln, benötigt man keine systemspezifischen API-Funktionen, wenn man die Farbe selbst gesetzt hat, denn dies geht dann mit reinen PureBasic-Befehlen plattform-unabhängig:

Ermittlung der Hintergrundfarbe eines Fensters:

Code: Alles auswählen

OpenWindow(0, 100, 100, 250, 210, "Get background color")

SetWindowColor(0, $CDEBFF) ; X11-Farbe "Blanched almond"
MessageRequester("Info", "Hintergrundfarbe: $" + Hex(GetWindowColor(0)))

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Ermittlung der Hintergrundfarbe eines TextGadget:

Code: Alles auswählen

OpenWindow(0, 100, 100, 250, 210, "Get background color")

TextGadget(0, 10,  10, 230, 90, "", #PB_Text_Border)
SetGadgetColor(0, #PB_Gadget_BackColor, $CDEBFF) ; X11-Farbe "Blanched almond"
SetGadgetText(0, "$" + Hex(GetGadgetColor(0, #PB_Gadget_BackColor)))

TextGadget(1, 10, 110, 230, 90, "", #PB_Text_Border)
SetGadgetColor(1, #PB_Gadget_BackColor, $C1FFC1) ; X11-Farbe "DarkSeaGreen1"
SetGadgetText(1, "$" + Hex(GetGadgetColor(1, #PB_Gadget_BackColor)))

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Die Ermittlung der Hintergrundfarbe eines CanvasGadget funktioniert allerdings nicht mit GetGadgetColor(), weil das CanvasGadget ja eine Zeichenfläche ist und der Programmierer selbst für das Zeichnen zuständig ist. Dies erfolgt mit der 2DDrawing-Bibliothek innerhalb eines StartDrawing()/StopDrawing()-Blocks.

Bei unbekannter Hintergrundfarbe arbeitet MacOS mit systemspezifischen Namen. Dieser Thread im englischen Forum zeigt dazu diverse Lösungsmöglichkeiten.

Ein plattform-unabhängiges Beispiel, den Hintergrund eines CanvasGadget mit der Hintergrundfarbe des aktuellen Fensters zu zeichnen, zeigt Keya in dem von RSBasic angegebenen Link.