wxBitmapButton change image  [SOLVED]

If you are using wxDev-C++ for your wxWidgets design, please ask your questions here instead of in IDE Related.
palikem
Experienced Solver
Experienced Solver
Posts: 65
Joined: Sat Oct 28, 2017 9:33 am
Location: Slovensko

wxBitmapButton change image

Postby palikem » Fri Mar 23, 2018 12:53 pm

Hi everybody.

There is an option to change images using wxBtmapButton :: SetBitmapSelected ()
When attempting to set wxBtmapButton :: SetBitmapSelected (), it is only possible at the beginning
and subsequent Refresh () does not change the picture

Thanks for the reaction


Win8.1
wxDev-C++ 7.4.2.569

PB
wxWorld Domination!
wxWorld Domination!
Posts: 1465
Joined: Sun Jan 03, 2010 5:45 pm

Re: wxBitmapButton change image

Postby PB » Fri Mar 23, 2018 1:42 pm

I would try the "trick" which uses an invalid bitmap to "reset" the image.
https://forums.wxwidgets.org/viewtopic.php?f=1&t=44031

palikem
Experienced Solver
Experienced Solver
Posts: 65
Joined: Sat Oct 28, 2017 9:33 am
Location: Slovensko

Re: wxBitmapButton change image

Postby palikem » Fri Mar 23, 2018 2:03 pm

not working

[img]
frame.jpg

[/img]

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 2353
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: wxBitmapButton change image

Postby ONEEYEMAN » Fri Mar 23, 2018 3:02 pm

Hi,
Can you post relevant code?
Also, I presume you did verify that the bitmap is OK?

Thank you.

PB
wxWorld Domination!
wxWorld Domination!
Posts: 1465
Joined: Sun Jan 03, 2010 5:45 pm

Re: wxBitmapButton change image

Postby PB » Fri Mar 23, 2018 3:21 pm

It does work

Code: Select all

#include <wx/wx.h>
#include <wx/bmpbuttn.h>
#include <wx/artprov.h>


class MyDlg : public wxDialog
{
public:   
    MyDlg() : wxDialog(NULL, wxID_ANY, "Test", wxDefaultPosition, wxSize(200, 200))
    {
        m_button = new wxBitmapButton(this, wxID_ANY, wxArtProvider::GetBitmap(wxART_PLUS , wxART_BUTTON));
        m_switched = false;
        UpdateButton();

        Bind(wxEVT_COMMAND_BUTTON_CLICKED, &MyDlg::OnButtonClicked, this);
    }
private:
    wxBitmapButton* m_button;
    bool m_switched;

    void UpdateButton()
    {
        // reset the bitmap
        m_button->SetBitmap(wxBitmap());

        if ( m_switched )       
            m_button->SetBitmapPressed(wxArtProvider::GetBitmap(wxART_PLUS , wxART_BUTTON));                   
        else       
            m_button->SetBitmapPressed(wxArtProvider::GetBitmap(wxART_MINUS, wxART_BUTTON));           
    }

    void OnButtonClicked(wxCommandEvent&)
    {         
        m_switched = !m_switched;
        UpdateButton();
    }
};

class MyApp : public wxApp
{
public:         
    bool OnInit()
    {
        MyDlg dlg;

        dlg.ShowModal();
        return false;
    }   
}; wxIMPLEMENT_APP(MyApp);


Unfortunately the OP did not provide the wxWidgets version he uses, guessing from the obsolete IDE, perhaps he is also using an obsolete wxWidgets version (pre 3.x) which may behave differently. AFAIK, the button code was revamped around 2.9...

palikem
Experienced Solver
Experienced Solver
Posts: 65
Joined: Sat Oct 28, 2017 9:33 am
Location: Slovensko

Re: wxBitmapButton change image

Postby palikem » Fri Mar 23, 2018 3:22 pm

At startup

Code: Select all

    mstarte0.LoadFile(wxT("Files\\start20.png"), wxBITMAP_TYPE_PNG);
    mstarte1.LoadFile(wxT("Files\\start21.png"), wxBITMAP_TYPE_PNG);
    mstarts0.LoadFile(wxT("Files\\starts0.png"), wxBITMAP_TYPE_PNG);
    mstarts1.LoadFile(wxT("Files\\starts1.png"), wxBITMAP_TYPE_PNG);
   
    mcale0.LoadFile(wxT("Files\\calc0.png"), wxBITMAP_TYPE_PNG);
    mcale1.LoadFile(wxT("Files\\calc1.png"), wxBITMAP_TYPE_PNG);
    mcals0.LoadFile(wxT("Files\\poc0.png"), wxBITMAP_TYPE_PNG);
    mcals1.LoadFile(wxT("Files\\poc1.png"), wxBITMAP_TYPE_PNG);
   
    mstop0.LoadFile(wxT("Files\\stop20.png"), wxBITMAP_TYPE_PNG);
    mstop1.LoadFile(wxT("Files\\stop21.png"), wxBITMAP_TYPE_PNG);
   
    Start->SetBitmapDisabled(mstarte0);
    Start->SetBitmapSelected(mstarte1);
    Stop->SetBitmapDisabled(mstop0);
    Stop->SetBitmapSelected(mstop1);
    Calculate->SetBitmapDisabled(mcale0);
    Calculate->SetBitmapSelected(mcale1);


when changing
and there arises the problem with change

Code: Select all

   Start->SetBitmapDisabled(wxBitmap());
        Start->SetBitmapDisabled(mstarts0);
       
        Start->SetBitmapSelected(wxBitmap());
        Start->SetBitmapSelected(mstarts1);


bitmap are ok

User avatar
doublemax
Moderator
Moderator
Posts: 12075
Joined: Fri Apr 21, 2006 8:03 pm
Location: $FCE2

Re: wxBitmapButton change image

Postby doublemax » Fri Mar 23, 2018 4:09 pm

Code: Select all

Start->SetBitmapDisabled(mstarts0);
This bitmap would only be visible if the button is disabled. Is it?

Code: Select all

Start->SetBitmapSelected(mstarts1);
This bitmap would only be visible if the button is selected. Is it?
Use the source, Luke!

palikem
Experienced Solver
Experienced Solver
Posts: 65
Joined: Sat Oct 28, 2017 9:33 am
Location: Slovensko

Re: wxBitmapButton change image

Postby palikem » Fri Mar 23, 2018 4:24 pm

Yes, once I want to change it, there is a problem

frame.jpg

User avatar
doublemax
Moderator
Moderator
Posts: 12075
Joined: Fri Apr 21, 2006 8:03 pm
Location: $FCE2

Re: wxBitmapButton change image

Postby doublemax » Fri Mar 23, 2018 4:27 pm

Code: Select all

Start->SetBitmapDisabled(mstarts0);
This bitmap will only be visible if the button is in "disabled" state. Which means you'd have to call.

Code: Select all

Start->Disable();
somewhere. Do you do that?

Please show the complete code that you use to change the button bitmap.
Use the source, Luke!

palikem
Experienced Solver
Experienced Solver
Posts: 65
Joined: Sat Oct 28, 2017 9:33 am
Location: Slovensko

Re: wxBitmapButton change image

Postby palikem » Fri Mar 23, 2018 4:47 pm

Code: Select all

Start->Disable();
Start->SetBitmapDisabled(mstarts0);
Start->SetBitmapSelected(mstarts1);
Start->Enable();


Disable () helped, but only changed the image in Start-> SetBitmapSelected (mstarts1);

palikem
Experienced Solver
Experienced Solver
Posts: 65
Joined: Sat Oct 28, 2017 9:33 am
Location: Slovensko

Re: wxBitmapButton change image

Postby palikem » Fri Mar 23, 2018 5:06 pm

As I have found, Disable () has no influence on it
So only Start-> SetBitmapSelected (mstarts1) changes;

Code: Select all

void AdcFrm::AdcFrmMouseEvents(wxMouseEvent& event)
{
    int x, y, z;
    char c;
    long w;
    float v, u;
    wxString nam;
    wxString moj;
    wxString moj1;
    bool cislo = false;
    bool pl = false;
    double akum;
    wxFile file1;
   
    if(event.Button(wxMOUSE_BTN_LEFT)){
        event.GetPosition(&x, &y);
    if(event.LeftDown()){
        if(pozice == 7){
            //Refresh();
            //Update();
            Mnuimport1044Click();
            return;
        }
       
        if(pozice == 8){
            //Refresh();
            //Update();
            Mnuexport1045Click();
            return;
        }
       
        if(pozice == 9){
            //Refresh();
            //Update();
            Mnuabout1046Click();
            return;
        }
       
        if(pozice == 6){
            //Refresh();
            //Update();
            Mnuadcdac1050Click();
            return;
        }
       
        if(pozice == 5){
            //Refresh();
            //Update();
            Mnuexit1041Click();
            return;
        }
       
        if(pozice == 4){
            //Refresh();
            //Update();
            Mnusaveas1040Click();
            return;
        }
       
        if(pozice == 3){
            //Refresh();
            //Update();
            Mnusave1039Click();
            return;
        }
       
        if(pozice == 2){
            //Refresh();
            //Update();
            dole = true;
            //event.m_x = 400;
            AdcFrmMouseMotion(event);
            Mnuopen1038Click();
            return;
        }
       
        if(pozice == 1){
            //Refresh();
            //Update();
            dole = true;
            //event.m_x = 400;
            AdcFrmMouseMotion(event);
            Mnunew1037Click();
            return;
        }
       
        if(pozice == 10){
            Start->Disable();
            //Start->SetBitmapDisabled(wxNullBitmap);
            //Start->SetBitmapSelected(wxNullBitmap);
            Start->SetBitmapDisabled(mstarts0);
            Start->SetBitmapSelected(mstarts1);
            Start->Enable();
            //Start->Refresh();
            slo = 1;
            Jazyk();
            Refresh();
            Update();
            return;
        }
       
        if(pozice == 11){
            slo = 0;
            Jazyk();
            Refresh();
            Update();
            return;
        }
       
        if(pozice == 12){
            //Refresh();
            //Update();
            SetStandard();
            return;
        }
       
        if(!menu){
            if(x > meas.x && x < (meas.x+meas.width) && y > meas.y && y < (meas.y+meas.height)){
                if(!measure){
                    Tabulka->Show(false);
                    TabFin->Show(false);
                    Kalibracia->Show(false);
                    Uhol45->Show(true);
                    Uhol90->Show(true);
                    Uhol135->Show(true);
                    Centrala->Show(true);
                    Start->Show(true);
                    Stop->Show(true);
                    Settings->Show(true);
                    WxStaticText4->Show(true);
                    WxStaticText5->Show(true);
                    WxStaticText6->Show(true);
                    Sample->Show(true);
                    Duration->Show(true);
                    Percenta->Show(true);
                    Conect->Show(true);
                    Conection->Show(true);
                    Calculate->Show(true);
                    measure = true;
                    Refresh();
                    Update();
                }
            }
            if(x > cali.x && x < (cali.x+cali.width) && y > cali.y && y < (cali.y+cali.height)){
                if(measure){
                    Uhol45->Show(false);
                    Uhol90->Show(false);
                    Uhol135->Show(false);
                    Centrala->Show(false);
                    Start->Show(false);
                    Stop->Show(false);
                    Settings->Show(false);
                    WxStaticText4->Show(false);
                    WxStaticText5->Show(false);
                    WxStaticText6->Show(false);
                    Sample->Show(false);
                    Duration->Show(false);
                    Percenta->Show(false);
                    Conect->Show(false);
                    Conection->Show(false);
                    Calculate->Show(false);
                    Kalibracia->Show(true);
                    Tabulka->Show(true);
                    TabFin->Show(true);
                    measure = false;
                    Refresh();
                    Update();
                }
               
            }
        }
    }
    }
   
    event.Skip();
   
}


The problem arises when I use Start-> SetBitmapDisabled (wxNullBitmap);

palikem
Experienced Solver
Experienced Solver
Posts: 65
Joined: Sat Oct 28, 2017 9:33 am
Location: Slovensko

Re: wxBitmapButton change image  [SOLVED]

Postby palikem » Fri Mar 23, 2018 5:13 pm

Solved

Code: Select all

Start->SetBitmapLabel(mstarts0);
Start->SetBitmapSelected(mstarts1);


Thank you for your reactions

User avatar
doublemax
Moderator
Moderator
Posts: 12075
Joined: Fri Apr 21, 2006 8:03 pm
Location: $FCE2

Re: wxBitmapButton change image

Postby doublemax » Fri Mar 23, 2018 5:15 pm

Code: Select all

Start->Disable();
Start->SetBitmapDisabled(mstarts0);
Start->SetBitmapSelected(mstarts1);
Start->Enable();
That's not what i meant. The "disabled" bitmap is displayed when the button is in "disabled" state. Like when a normal control is "greyed out", indicating that you can't use it.
Use the source, Luke!

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 2353
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: wxBitmapButton change image

Postby ONEEYEMAN » Fri Mar 23, 2018 5:56 pm

doublemax,
The OP probably misunderstands the different states the control can be in.

Thank you.


Return to “wxDev-C++”

Who is online

Users browsing this forum: No registered users and 2 guests