1. [WIN] change bkgnd color of combo box

Is it possible to change the background color of the list portion of a combo
box?

I have two combo boxes one above another, & would like to make it more clear
which one has been opened by making them have different background colors.

Dan Moyer

new topic     » topic index » view message » categorize

2. Re: [WIN] change bkgnd color of combo box

--- Dan B Moyer <DANMOYER at PRODIGY.NET> wrote:
> Is it possible to change the background color of the list portion of a combo
> box?
>
> I have two combo boxes one above another, & would like to make it more clear
> which one has been opened by making them have different background colors.

It looks like it's possible by trapping the WM_CTLCOLOR message.  Do a search
at http://msdn.microsoft.com on 'combo color'.


=====
Matt Lewis
http://www.realftp.com/matthewlewis

__________________________________________________
Do You Yahoo!?
Yahoo! Messenger - Talk while you surf!  It's FREE.
http://im.yahoo.com/

new topic     » goto parent     » topic index » view message » categorize

3. Re: [WIN] change bkgnd color of combo box

Matt,

Thanks, by doing the search you suggested, I found

but I don't know how to "trap" the WM_CTLCOLOR message.  Can you give me a
small example?

Dan


----- Original Message -----
From: "Matt Lewis" <matthewwalkerlewis at YAHOO.COM>
To: <EUPHORIA at LISTSERV.MUOHIO.EDU>
Sent: Tuesday, October 24, 2000 7:12 PM
Subject: Re: [WIN] change bkgnd color of combo box


> --- Dan B Moyer <DANMOYER at PRODIGY.NET> wrote:
> > Is it possible to change the background color of the list portion of a
combo
> > box?
> >
> > I have two combo boxes one above another, & would like to make it more
clear
> > which one has been opened by making them have different background
colors.
>
> It looks like it's possible by trapping the WM_CTLCOLOR message.  Do a
search
> at http://msdn.microsoft.com on 'combo color'.
>
>
> =====
> Matt Lewis
> http://www.realftp.com/matthewlewis
>
> __________________________________________________
> Do You Yahoo!?
> Yahoo! Messenger - Talk while you surf!  It's FREE.
> http://im.yahoo.com/

new topic     » goto parent     » topic index » view message » categorize

4. Re: [WIN] change bkgnd color of combo box

--- Dan B Moyer <DANMOYER at PRODIGY.NET> wrote:

> but I don't know how to "trap" the WM_CTLCOLOR message.  Can you give me a
> small example?

OK, this should get you started.  You need to create an onEvent procedure for
the parent of the combo (I think--the parent of the list box gets the message,
and I'm not certain if the combo or the combo's parent gets it).  Once you've
done that, you need to return the handle to a brush.

So (untested):

-- begin code
include win32lib.ew

constant
Win = create(Window,"Custom Combo", 0, 20, 20, 300, 300, 0),
CB  = create( Combo,"", Win, 20, 20, 90, 180, 0 )

addItem(CB, "One" )
addItem(CB, "Two" )
addItem(CB, "Etc..." )

constant myColor = #0, -- an rgb value here
myBrush = c_func( xCreateSolidBrush, { myColor } )
-- This might not be such a great idea.  You might
-- be better off creating and destroying the pen
-- each time you draw the list box, although
-- if this works, it's probably faster.

-- If you move this to within the event code,
-- you'll need to change ForProgram to ForPaint
trackObject( getSelf(), CB, ForProgram )

procedure CB_onEvent( integer iMsg, atom wParam, atom lParam )

    -- Win9x uses specific msgs now instead of WM_CTLCOLOR
    -- with a notification

    if iMsg = WM_CTLCOLORLISTBOX then
        return brush
    end if

end procedure
-- you may have to change this to Win's event handler...
onEvent[CB] = routine_id("CB_onEvent")


-- end code

Other messages you might be interested in (which should work the same as
WM_CTLCOLORLISTBOX):
WM_CTLCOLOREDIT
WM_CTLCOLORSCROLLBAR
WM_CTLCOLORBTN
WM_CTLCOLORSTATIC

These should all be defined for you in winconst.ew (in the archives--by Jaques
D).  Now that I've looked at these, I think they should probably be
incorporated into Win32Lib, to enable more flexible color schemes.


=====
Matt Lewis
http://www.realftp.com/matthewlewis

__________________________________________________
Do You Yahoo!?
Yahoo! Messenger - Talk while you surf!  It's FREE.
http://im.yahoo.com/

new topic     » goto parent     » topic index » view message » categorize

5. Re: [WIN] change bkgnd color of combo box

Thanks Matt, I'll give it a try!

Dan

----- Original Message -----
From: "Matt Lewis" <matthewwalkerlewis at YAHOO.COM>
To: <EUPHORIA at LISTSERV.MUOHIO.EDU>
Sent: Tuesday, October 24, 2000 8:55 PM
Subject: Re: [WIN] change bkgnd color of combo box


> --- Dan B Moyer <DANMOYER at PRODIGY.NET> wrote:
>
> > but I don't know how to "trap" the WM_CTLCOLOR message.  Can you give me
a
> > small example?
>
> OK, this should get you started.  You need to create an onEvent procedure
for
> the parent of the combo (I think--the parent of the list box gets the
message,
> and I'm not certain if the combo or the combo's parent gets it).  Once
you've
> done that, you need to return the handle to a brush.
>
> So (untested):
>
> -- begin code
> include win32lib.ew
>
> constant
> Win = create(Window,"Custom Combo", 0, 20, 20, 300, 300, 0),
> CB  = create( Combo,"", Win, 20, 20, 90, 180, 0 )
>
> addItem(CB, "One" )
> addItem(CB, "Two" )
> addItem(CB, "Etc..." )
>
> constant myColor = #0, -- an rgb value here
> myBrush = c_func( xCreateSolidBrush, { myColor } )
> -- This might not be such a great idea.  You might
> -- be better off creating and destroying the pen
> -- each time you draw the list box, although
> -- if this works, it's probably faster.
>
> -- If you move this to within the event code,
> -- you'll need to change ForProgram to ForPaint
> trackObject( getSelf(), CB, ForProgram )
>
> procedure CB_onEvent( integer iMsg, atom wParam, atom lParam )
>
>     -- Win9x uses specific msgs now instead of WM_CTLCOLOR
>     -- with a notification
>
>     if iMsg = WM_CTLCOLORLISTBOX then
>         return brush
>     end if
>
> end procedure
> -- you may have to change this to Win's event handler...
> onEvent[CB] = routine_id("CB_onEvent")
>
>
> -- end code
>
> Other messages you might be interested in (which should work the same as
> WM_CTLCOLORLISTBOX):
> WM_CTLCOLOREDIT
> WM_CTLCOLORSCROLLBAR
> WM_CTLCOLORBTN
> WM_CTLCOLORSTATIC
>
> These should all be defined for you in winconst.ew (in the archives--by
Jaques
> D).  Now that I've looked at these, I think they should probably be
> incorporated into Win32Lib, to enable more flexible color schemes.
>
>
> =====
> Matt Lewis
> http://www.realftp.com/matthewlewis
>
> __________________________________________________
> Do You Yahoo!?
> Yahoo! Messenger - Talk while you surf!  It's FREE.
> http://im.yahoo.com/

new topic     » goto parent     » topic index » view message » categorize

6. Re: [WIN] change bkgnd color of combo box

Matt,

Well, I don't really have much idea what it is you're doing in your example,
but I'm game to try & understand it.  To get it to run I had to change some
things, not sure if that defeated any chance of it doing what I wanted or
not.

In "trackObject", I changed "getSelf()" to "Win" because it brought up an
error the original way, not sure what, it's over 300 lines :(  with Win32Lib
50.

Had to comment out "return brush" in the event trap(?), because brush not
declared; was that supposed to relate somehow to "myBrush" (didn't work when
I put that there), or get something from iMsg, or what??

And I added "WinMain".

Can you give me an idea what is supposed to be going on in your example?

Dan

P.S.:
Here's what it looks like after I made those changes:


-- begin code
include win32lib.ew

global constant
Win = create(Window,"Custom Combo", 0, 20, 20, 300, 300, 0),
CB  = create( Combo,"", Win, 20, 20, 90, 180, 0 )

addItem(CB, "One" )
addItem(CB, "Two" )
addItem(CB, "Etc..." )

constant myColor = #0, -- an rgb value here
myBrush = c_func( xCreateSolidBrush, { myColor } )
-- This might not be such a great idea.  You might
-- be better off creating and destroying the pen
-- each time you draw the list box, although
-- if this works, it's probably faster.

-- If you move this to within the event code,
-- you'll need to change ForProgram to ForPaint
trackObject(Win, CB, ForProgram )--CHANGED getSelf()TO Win BECAUSE ERROR'D

procedure CB_onEvent( integer iMsg, atom wParam, atom lParam )

    -- Win9x uses specific msgs now instead of WM_CTLCOLOR
    -- with a notification

    if iMsg = WM_CTLCOLORLISTBOX then
 --       return brush  -- HAD TO COMMMENT THIS OUT TO GET PROGRAM TO RUN
    end if

end procedure
-- you may have to change this to Win's event handler...
onEvent[CB] = routine_id("CB_onEvent")

WinMain( Win, Normal )--  ADDED THIS
-- end code



----- Original Message -----
From: "Matt Lewis" <matthewwalkerlewis at YAHOO.COM>
To: <EUPHORIA at LISTSERV.MUOHIO.EDU>
Sent: Tuesday, October 24, 2000 8:55 PM
Subject: Re: [WIN] change bkgnd color of combo box


> --- Dan B Moyer <DANMOYER at PRODIGY.NET> wrote:
>
> > but I don't know how to "trap" the WM_CTLCOLOR message.  Can you give me
a
> > small example?
>
> OK, this should get you started.  You need to create an onEvent procedure
for
> the parent of the combo (I think--the parent of the list box gets the
message,
> and I'm not certain if the combo or the combo's parent gets it).  Once
you've
> done that, you need to return the handle to a brush.
>
> So (untested):
>
> -- begin code
> include win32lib.ew
>
> constant
> Win = create(Window,"Custom Combo", 0, 20, 20, 300, 300, 0),
> CB  = create( Combo,"", Win, 20, 20, 90, 180, 0 )
>
> addItem(CB, "One" )
> addItem(CB, "Two" )
> addItem(CB, "Etc..." )
>
> constant myColor = #0, -- an rgb value here
> myBrush = c_func( xCreateSolidBrush, { myColor } )
> -- This might not be such a great idea.  You might
> -- be better off creating and destroying the pen
> -- each time you draw the list box, although
> -- if this works, it's probably faster.
>
> -- If you move this to within the event code,
> -- you'll need to change ForProgram to ForPaint
> trackObject( getSelf(), CB, ForProgram )
>
> procedure CB_onEvent( integer iMsg, atom wParam, atom lParam )
>
>     -- Win9x uses specific msgs now instead of WM_CTLCOLOR
>     -- with a notification
>
>     if iMsg = WM_CTLCOLORLISTBOX then
>         return brush
>     end if
>
> end procedure
> -- you may have to change this to Win's event handler...
> onEvent[CB] = routine_id("CB_onEvent")
>
>
> -- end code
>
> Other messages you might be interested in (which should work the same as
> WM_CTLCOLORLISTBOX):
> WM_CTLCOLOREDIT
> WM_CTLCOLORSCROLLBAR
> WM_CTLCOLORBTN
> WM_CTLCOLORSTATIC
>
> These should all be defined for you in winconst.ew (in the archives--by
Jaques
> D).  Now that I've looked at these, I think they should probably be
> incorporated into Win32Lib, to enable more flexible color schemes.
>
>
> =====
> Matt Lewis
> http://www.realftp.com/matthewlewis
>
> __________________________________________________
> Do You Yahoo!?
> Yahoo! Messenger - Talk while you surf!  It's FREE.
> http://im.yahoo.com/

new topic     » goto parent     » topic index » view message » categorize

7. Re: [WIN] change bkgnd color of combo box

Yeah, that's what I get for doing this without testing (I didn't have Eu
where I wrote that)...I'd originally had trackObject() in the proc.  Also,
you need to use returnValue(myBrush).

Change the procedure to the following:

-- begin code

procedure CB_onEvent( integer iMsg, atom wParam, atom lParam )

    if iMsg = WM_CTLCOLORLISTBOX then
        returnValue( myBrush )
    end if

end procedure
onEvent[CB] = routine_id("CB_onEvent")

-- end code

The only problem with this is that it doesn't affect the background of the
text in the box.  I'm not sure how to get at that to change it. :(

Matt Lewis
http://www.realftp.com/matthewlewis

new topic     » goto parent     » topic index » view message » categorize

8. Re: [WIN] change bkgnd color of combo box

Matt,

That's ok, the best I can do is to conceive pseudo-code in my head, couldn't
even attempt to make real code without interactive access to Euphoria!

I'll give it a try & see what happens.

Thanks!

Dan

----- Original Message -----
From: "Matthew Lewis" <MatthewL at KAPCOUSA.COM>
To: <EUPHORIA at LISTSERV.MUOHIO.EDU>
Sent: Wednesday, October 25, 2000 9:01 AM
Subject: Re: [WIN] change bkgnd color of combo box


> Yeah, that's what I get for doing this without testing (I didn't have Eu
> where I wrote that)...I'd originally had trackObject() in the proc.  Also,
> you need to use returnValue(myBrush).
>
> Change the procedure to the following:
>
> -- begin code
>
> procedure CB_onEvent( integer iMsg, atom wParam, atom lParam )
>
>     if iMsg = WM_CTLCOLORLISTBOX then
>         returnValue( myBrush )
>     end if
>
> end procedure
> onEvent[CB] = routine_id("CB_onEvent")
>
> -- end code
>
> The only problem with this is that it doesn't affect the background of the
> text in the box.  I'm not sure how to get at that to change it. :(
>
> Matt Lewis
> http://www.realftp.com/matthewlewis

new topic     » goto parent     » topic index » view message » categorize

9. Re: [WIN] change bkgnd color of combo box

Matt,

Oh, yeah, it *doesn't* actually change the *background* of the text in the
list, it changes the *non-text space* in the list.  Back to the drawing
board...

Dan
----- Original Message -----
From: "Matthew Lewis" <MatthewL at KAPCOUSA.COM>
To: <EUPHORIA at LISTSERV.MUOHIO.EDU>
Sent: Wednesday, October 25, 2000 9:01 AM
Subject: Re: [WIN] change bkgnd color of combo box


> Yeah, that's what I get for doing this without testing (I didn't have Eu
> where I wrote that)...I'd originally had trackObject() in the proc.  Also,
> you need to use returnValue(myBrush).
>
> Change the procedure to the following:
>
> -- begin code
>
> procedure CB_onEvent( integer iMsg, atom wParam, atom lParam )
>
>     if iMsg = WM_CTLCOLORLISTBOX then
>         returnValue( myBrush )
>     end if
>
> end procedure
> onEvent[CB] = routine_id("CB_onEvent")
>
> -- end code
>
> The only problem with this is that it doesn't affect the background of the
> text in the box.  I'm not sure how to get at that to change it. :(
>
> Matt Lewis
> http://www.realftp.com/matthewlewis

new topic     » goto parent     » topic index » view message » categorize

10. Re: [WIN] change bkgnd color of combo box

Matt,

Here are some links I found which *might* relate to my question about
changing the background color of a combo box's list box; some may be
relevant only to Win 3.0 or Win 3.1, but the first one looks like it might
mean something, but I'm not sure what.  What seems to me to be the problem
is specifically changing the *background brush* ?

Dan


onctlcolor.htm






----- Original Message -----
From: "Matthew Lewis" <MatthewL at KAPCOUSA.COM>
To: <EUPHORIA at LISTSERV.MUOHIO.EDU>
Sent: Wednesday, October 25, 2000 9:01 AM
Subject: Re: [WIN] change bkgnd color of combo box


> Yeah, that's what I get for doing this without testing (I didn't have Eu
> where I wrote that)...I'd originally had trackObject() in the proc.  Also,
> you need to use returnValue(myBrush).
>
> Change the procedure to the following:
>
> -- begin code
>
> procedure CB_onEvent( integer iMsg, atom wParam, atom lParam )
>
>     if iMsg = WM_CTLCOLORLISTBOX then
>         returnValue( myBrush )
>     end if
>
> end procedure
> onEvent[CB] = routine_id("CB_onEvent")
>
> -- end code
>
> The only problem with this is that it doesn't affect the background of the
> text in the box.  I'm not sure how to get at that to change it. :(
>
> Matt Lewis
> http://www.realftp.com/matthewlewis

new topic     » goto parent     » topic index » view message » categorize

11. Re: [WIN] change bkgnd color of combo box

On Wed, 25 Oct 2000 16:50:30 -0700, Dan B Moyer <DANMOYER at PRODIGY.NET>
wrote:

>mean something, but I'm not sure what.  What seems to me to be the problem
>is specifically changing the *background brush* ?

  Matt:
     I think that in order to use colors or icons or pictures
     in a listbox it has to be a OWNERDRAW listbox and you have
     all the painting details must be all handled by your
     windows application.

 Bernie

new topic     » goto parent     » topic index » view message » categorize

12. Re: [WIN] change bkgnd color of combo box

Bernie,

I'm far from sure, but I think that only applied to win 3.0.

>From http://support.microsoft.com/support/kb/articles/Q81/7/07.ASP:

Under Windows 3.0, the text color problem discussed above for
CBS_DROPDOWN-style combo boxes is evident for CBS_DROPDOWNLIST combo boxes.
To address this problem, the application must use an owner-draw combo box.

Although it is not necessary to use an owner-draw combo box under Windows
3.1, the application must process the CTLCOLOR_LISTBOX notification in both
the combo box subclass procedure and in the window procedure for the parent
window of the combo box.

Still not sure what it all means, though.

Dan


----- Original Message -----
From: "Bernie" <xotron at PCOM.NET>
To: <EUPHORIA at LISTSERV.MUOHIO.EDU>
Sent: Wednesday, October 25, 2000 5:12 PM
Subject: Re: [WIN] change bkgnd color of combo box


> On Wed, 25 Oct 2000 16:50:30 -0700, Dan B Moyer <DANMOYER at PRODIGY.NET>
> wrote:
>
> >mean something, but I'm not sure what.  What seems to me to be the
problem
> >is specifically changing the *background brush* ?
>
>   Matt:
>      I think that in order to use colors or icons or pictures
>      in a listbox it has to be a OWNERDRAW listbox and you have
>      all the painting details must be all handled by your
>      windows application.
>
>  Bernie

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu