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">&lt;<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>&gt;</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>
&gt; The idea of `set-state-normal&#39; and `set-state-selected&#39; sounds like a<br>
&gt; `check-box%&#39; rather than a `button%&#39;.<br>
&gt;<br>
&gt; Otherwise, there&#39;s no way to change the background color of a `button%&#39;<br>
&gt; instance. Classes like `button%&#39; correspond to platform-specific GUI<br>
&gt; widgets that typically either don&#39;t support or strongly discourage the<br>
&gt; possibility of changing a button&#39;s background (because button colors<br>
&gt; are normally determined by a theme). You can create a `canvas%&#39; that<br>
&gt; draws a custom button image, in which case you have complete control<br>
&gt; over how the button looks and reacts, but there isn&#39;t much of an<br>
&gt; in-between level of customization in the current toolkit.<br>
&gt;<br>
&gt; At Tue, 21 Feb 2012 00:25:52 -0700, Kieron Hardy wrote:<br>
&gt;&gt; Hi all,<br>
&gt;&gt;<br>
&gt;&gt; How do I change the background color (and/or style of border etc.) of a GUI<br>
&gt;&gt; button? Given the code below, what should I put in the set-state-x methods<br>
&gt;&gt; to indicate a difference between a normal and selected button?<br>
&gt;&gt;<br>
&gt;&gt; Also any comments on program style and/or substance are appreciated (I<br>
&gt;&gt; apologize in advance if the layout offends).<br>
&gt;&gt;<br>
&gt;&gt; Cheers,<br>
&gt;&gt;<br>
&gt;&gt; Kieron.<br>
&gt;&gt;<br>
&gt;&gt; ****<br>
&gt;&gt;<br>
&gt;&gt; #lang racket/gui<br>
&gt;&gt;<br>
&gt;&gt; (define color-button%<br>
&gt;&gt;  (class button%<br>
&gt;&gt;    (inherit refresh)<br>
&gt;&gt;<br>
&gt;&gt;    (define toggle<br>
&gt;&gt;      (let ([f #f])<br>
&gt;&gt;        (lambda ()<br>
&gt;&gt;          (set! f (not f))<br>
&gt;&gt;          f<br>
&gt;&gt;          )<br>
&gt;&gt;        )<br>
&gt;&gt;      )<br>
&gt;&gt;<br>
&gt;&gt;    (define (set-state-normal)<br>
&gt;&gt;      (printf &quot;color-button%: set-state-normal:\n&quot;)<br>
&gt;&gt;      ; ??? ; set background color to normal<br>
&gt;&gt;      (refresh)<br>
&gt;&gt;      )<br>
&gt;&gt;<br>
&gt;&gt;    (define (set-state-selected)<br>
&gt;&gt;      (printf &quot;color-button%: set-state-selected:\n&quot;)<br>
&gt;&gt;      ; ??? ; set background color to red<br>
&gt;&gt;      (refresh)<br>
&gt;&gt;      )<br>
&gt;&gt;<br>
&gt;&gt;    (define click-callback<br>
&gt;&gt;      (lambda (button control-event)<br>
&gt;&gt;        (printf &quot;color-button%: click-callback:\n&quot;)<br>
&gt;&gt;        (if (toggle)<br>
&gt;&gt;          (set-state-selected)<br>
&gt;&gt;          (set-state-normal)<br>
&gt;&gt;          )<br>
&gt;&gt;        )<br>
&gt;&gt;      )<br>
&gt;&gt;<br>
&gt;&gt;    (super-new (callback click-callback))<br>
&gt;&gt;<br>
&gt;&gt;    )<br>
&gt;&gt;  )<br>
&gt;&gt;<br>
&gt;&gt; (define f (new frame%<br>
&gt;&gt;               [label &quot;Colored Button&quot;]<br>
&gt;&gt;               [min-width 100]<br>
&gt;&gt;               [min-height 200]<br>
&gt;&gt;               )<br>
&gt;&gt;  )<br>
&gt;&gt;<br>
&gt;&gt; (define b (new color-button%<br>
&gt;&gt;              [parent f]<br>
&gt;&gt;              [label &quot;push me&quot;]<br>
&gt;&gt;              )<br>
&gt;&gt;  )<br>
&gt;&gt;<br>
&gt;&gt; (send f show #t)<br>
&gt;&gt; ____________________<br>
&gt;&gt;  Racket Users list:<br>
&gt;&gt;  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
&gt; ____________________<br>
&gt;  Racket Users list:<br>
&gt;  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br>
</div></div></blockquote></div><br>