Was hast Du genau vor? Möchtest Du bei einem ButtonGadget die Text- und Hintergrundfarbe ändern? Dazu habe ich in meiner Trickkiste dieses Beispiel gefunden. Leider habe ich noch keine Möglichkeit gefunden, Text- und Hintergrundfarbe gleichzeitig zu ändern. Erfolgreich getestet habe ich das Beispiel auf MacOS 10.13.6 'High Sierra' mit PB 5.46 x64 im ASCII- und Unicode-Modus.
Code: Alles auswählen
EnableExplicit
Procedure SetGadgetColorEx(GadgetID.I, ColorType.I, Color.I)
Protected Alpha.CGFloat
Protected *AttributedTitle
Protected Blue.CGFloat
Protected CIColor.I
Protected Filter.I
Protected FilterArray.I
Protected Green.CGFloat
Protected NSColor.I
Protected Range.NSRange
Protected Red.CGFloat
If GadgetType(GadgetID) = #PB_GadgetType_Button
Alpha = 1.0
Red = Red(Color) / 255
Green = Green(Color) / 255
Blue = Blue(Color) / 255
Select ColorType
Case #PB_Gadget_BackColor
Filter = CocoaMessage(0, 0,
"CIFilter filterWithName:$", @"CIFalseColor")
CocoaMessage(0, Filter, "setDefaults")
CIColor = CocoaMessage(0, 0, "CIColor colorWithRed:@", @Red,
"green:@", @Green, "blue:@", @Blue)
CocoaMessage(0, Filter,
"setValue:", CIColor,
"forKey:$", @"inputColor1")
FilterArray = CocoaMessage(0, 0, "NSArray arrayWithObject:", Filter)
CocoaMessage(0, GadgetID(GadgetID), "setWantsLayer:", #YES)
CocoaMessage(0, GadgetID(GadgetID), "setContentFilters:", FilterArray)
Case #PB_Gadget_FrontColor
*AttributedTitle = CocoaMessage(0, CocoaMessage(0, 0,
"NSMutableAttributedString alloc"), "initWithAttributedString:",
CocoaMessage(0, GadgetID(GadgetID), "attributedTitle"))
Range\length = CocoaMessage(0, *AttributedTitle, "length")
NSColor = CocoaMessage(0, 0,
"NSColor colorWithDeviceRed:@", @Red,
"green:@", @Green,
"blue:@", @Blue,
"alpha:@", @Alpha)
CocoaMessage(0, *AttributedTitle,
"addAttribute:$", @"NSColor",
"value:", NSColor,
"range:@", @Range)
CocoaMessage(0, GadgetID(GadgetID),
"setAttributedTitle:", *AttributedTitle)
EndSelect
Else
SetGadgetColor(GadgetID, ColorType, Color)
EndIf
EndProcedure
Macro SetGadgetColor(GadgetID, ColorType, Color)
SetGadgetColorEx(GadgetID, ColorType, Color)
EndMacro
OpenWindow(0, 270, 100, 230, 110, "Colored ButtonGadget")
ButtonGadget(0, 10, 20, WindowWidth(0) - 20, 30,
"Button with yellow background")
SetGadgetColor(0, #PB_Gadget_BackColor, $00FFFF)
ButtonGadget(1, 10, 60, WindowWidth(0) - 20, 30,
"Button with blue text")
SetGadgetColor(1, #PB_Gadget_FrontColor, $FF0000)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Mit einer ähnlichen Vorgehensweise kann auch die Hintergrundfarbe eines nicht editierbaren ComboBoxGadget (NSPopUpButton) geändert werden (ebenfalls erfolgreich getestet auf MacOS 10.13.6 'High Sierra' mit PB 5.46 x64 im ASCII- und Unicode-Modus):
Code: Alles auswählen
EnableExplicit
Define i.I
Procedure SetComboBoxBackColor(GadgetID.I, Color.I)
Protected Alpha.CGFloat
Protected Blue.CGFloat
Protected CIColor.I
Protected Filter.I
Protected FilterArray.I
Protected Green.CGFloat
Protected Red.CGFloat
Alpha = 1.0
Red = Red(Color) / 255
Green = Green(Color) / 255
Blue = Blue(Color) / 255
Filter = CocoaMessage(0, 0,
"CIFilter filterWithName:$", @"CIFalseColor")
CocoaMessage(0, Filter, "setDefaults")
CIColor = CocoaMessage(0, 0, "CIColor colorWithRed:@", @Red,
"green:@", @Green, "blue:@", @Blue)
CocoaMessage(0, Filter,
"setValue:", CIColor,
"forKey:$", @"inputColor1")
FilterArray = CocoaMessage(0, 0, "NSArray arrayWithObject:", Filter)
CocoaMessage(0, GadgetID(GadgetID), "setWantsLayer:", #YES)
CocoaMessage(0, GadgetID(GadgetID), "setContentFilters:", FilterArray)
EndProcedure
OpenWindow(0, 100, 100, 200, 90, "Colored ComboBox")
ComboBoxGadget(0, 10, 20, WindowWidth(0) - 20, 25)
SetComboBoxBackColor(0, $00FFFF)
For i = 1 To 5
AddGadgetItem(0, -1, "Item " + Str(i))
Next i
SetGadgetState(0, 0)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow