So take a copy of the source for a standard button% from the Racket code itself and than hack on it to create a class for a new type of widgit?<br><br><div class="gmail_quote">On Tue, Feb 21, 2012 at 10:56 AM, Matthias Felleisen <span dir="ltr"><<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
You could change the button child of the GUI and bring in a completely new button with a different color. -- Matthias<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
On Feb 21, 2012, at 12:53 PM, Matthew Flatt wrote:<br>
<br>
> The idea of `set-state-normal' and `set-state-selected' sounds like a<br>
> `check-box%' rather than a `button%'.<br>
><br>
> Otherwise, there's no way to change the background color of a `button%'<br>
> instance. Classes like `button%' correspond to platform-specific GUI<br>
> widgets that typically either don't support or strongly discourage the<br>
> possibility of changing a button's background (because button colors<br>
> are normally determined by a theme). You can create a `canvas%' that<br>
> draws a custom button image, in which case you have complete control<br>
> over how the button looks and reacts, but there isn't much of an<br>
> in-between level of customization in the current toolkit.<br>
><br>
> At Tue, 21 Feb 2012 00:25:52 -0700, Kieron Hardy wrote:<br>
>> Hi all,<br>
>><br>
>> How do I change the background color (and/or style of border etc.) of a GUI<br>
>> button? Given the code below, what should I put in the set-state-x methods<br>
>> to indicate a difference between a normal and selected button?<br>
>><br>
>> Also any comments on program style and/or substance are appreciated (I<br>
>> apologize in advance if the layout offends).<br>
>><br>
>> Cheers,<br>
>><br>
>> Kieron.<br>
>><br>
>> ****<br>
>><br>
>> #lang racket/gui<br>
>><br>
>> (define color-button%<br>
>> (class button%<br>
>> (inherit refresh)<br>
>><br>
>> (define toggle<br>
>> (let ([f #f])<br>
>> (lambda ()<br>
>> (set! f (not f))<br>
>> f<br>
>> )<br>
>> )<br>
>> )<br>
>><br>
>> (define (set-state-normal)<br>
>> (printf "color-button%: set-state-normal:\n")<br>
>> ; ??? ; set background color to normal<br>
>> (refresh)<br>
>> )<br>
>><br>
>> (define (set-state-selected)<br>
>> (printf "color-button%: set-state-selected:\n")<br>
>> ; ??? ; set background color to red<br>
>> (refresh)<br>
>> )<br>
>><br>
>> (define click-callback<br>
>> (lambda (button control-event)<br>
>> (printf "color-button%: click-callback:\n")<br>
>> (if (toggle)<br>
>> (set-state-selected)<br>
>> (set-state-normal)<br>
>> )<br>
>> )<br>
>> )<br>
>><br>
>> (super-new (callback click-callback))<br>
>><br>
>> )<br>
>> )<br>
>><br>
>> (define f (new frame%<br>
>> [label "Colored Button"]<br>
>> [min-width 100]<br>
>> [min-height 200]<br>
>> )<br>
>> )<br>
>><br>
>> (define b (new color-button%<br>
>> [parent f]<br>
>> [label "push me"]<br>
>> )<br>
>> )<br>
>><br>
>> (send f show #t)<br>
>> ____________________<br>
>> Racket Users list:<br>
>> <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
> ____________________<br>
> Racket Users list:<br>
> <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br>
</div></div></blockquote></div><br>