[C con Clase] [Bulk] Re: [Bulk] problema con puntero utilizando wxwidgets!

ZeLion Zelion_cracking en yahoo.es
Mie Ene 2 15:34:05 CET 2008


Hola de nuevo Pedro.

Veras, he mirado un poco mas el codigo, y no tienes declarada la tabla de
eventos, por eso no se procesa el evento del 'form'

Para que se procese el evento en el form tienes que declarar la tabla de
eventos:

 

BEGIN_EVENT_TABLE ( form, wxDialog )

EVT_KEY_DOWN(form::keypress)       // Declarar el evento de tecla pulsada

END_EVENT_TABLE()

 

De esta forma puedes hacer:

 

void form::keypress(wxKeyEvent& x)

{

            

            wxString aa = this->GetName();

            if (0 == aa.Cmp(_T("dialog")))     // Si es el form

            {

                  buscar->SetFocus();     // Ahora si que te deja, ya que
'this=form'

                  return;

            }

        x.Skip();

    }

}

 

.: ZeLion :.

  _____  

De: cconclase-bounces en listas.conclase.net
[mailto:cconclase-bounces en listas.conclase.net] En nombre de Pedro Mateo
Enviado el: lunes, 31 de diciembre de 2007 16:04
Para: Lista de correo sobre C y C++
Asunto: [Bulk] Re: [C con Clase] [Bulk] problema con puntero utilizando
wxwidgets!

 

gracias zelion!!!
prepare un codigo ejemplo donde me dal el problema
si cambias el puntero "buscar" poniendolo en un ambito publico( antecediendo
a la definicion de la clase) no te dara el error
es realmenter raro 

//=================================================================
#include <wx/wx.h>
#include <wx/grid.h>
using namespace std;
class frame:public wxFrame{
    public:
    frame(wxWindow* p,const string& t):wxFrame(p,-1,t){Centre();} 
};
frame* mainframe;            

class form:public wxDialog{
    

    protected:                                                        //
PROPIEDADES
    friend class textbox;                                        //
acceso a la clase textbox 
    friend class button;                                            //
acceso a la clase button
    wxBoxSizer* layout;                                            //
sizer principal
    wxBoxSizer* page;                                                //
sizer de contenido 
    wxBoxSizer* header;                                            //
sizer cabecera
    wxBoxSizer* body;                                                //
sizer del cuerpo del formulario
    wxBoxSizer* footer;                                            //
sizer de pie de pagina 
    wxGrid* grid;                                                    //
contiene el grid de la ventana
    wxButton* acept;                                                //
boton de aceptar
    wxButton* cancel;                                                //
cancelar 
    wxButton* find;                                                // buscar

    wxTextCtrl* buscar;                                            // el
puntero fantasma

                                                                    //
EVENTOS 
    void acept_procs(wxMouseEvent&);                        //    ocurre
cuando se preciona el boton de aceptar
    void cancel_procs(wxMouseEvent&);                    //    ocurre cuando
se preciona el boton de cancelar 
    void find_procs(wxMouseEvent&);                        //    ocurre
cuando se preciona el boton de buscar
    void keypress(wxKeyEvent&);                            //    ocurre
cuando se preciona el boton de buscar 
    
    public:                                                            //
CONSTRUCTORES
    form(const string&);                                            //
constructor sobrecargado
    void resize();                                                    //
recalcula el tamano de la ventana 
    void refresh();                                                //
actualiza los objetos con la data
};

//    constructor sobrecargado            
    form::form(const string& caption):wxDialog(mainframe,-1,caption){ 
        //    objetos principales
        new wxPanel(this);        
        layout    =    new wxBoxSizer(wxHORIZONTAL);
        SetSizer(layout);

        //    enmarcando la pagina
        layout->Add(15,0,0,wxEXPAND); 
        layout->Add(page    = new wxBoxSizer(wxVERTICAL),0,wxEXPAND);
        layout->Add(15,0,0,wxEXPAND);
        
        page->Add(header    = new wxBoxSizer(wxHORIZONTAL),0,wxEXPAND);
        page->Add(body        = new wxBoxSizer(wxVERTICAL),0,wxEXPAND); 
        page->Add(footer    = new wxBoxSizer(wxHORIZONTAL),0,wxEXPAND);
        
        //    configurando marge
        header->Add(0,15);
        footer->Add(0,15);

        
        //    carga los parametros 
        header->Add(5,35);
        wxBoxSizer* parameters_panel;
        header->Add(parameters_panel=new wxBoxSizer(4),wxEXPAND);
        buscar=new wxTextCtrl(this,-1);
        parameters_panel->Add(buscar,wxEXPAND); 
        buscar->SetFocus();
        buscar->SetValue("esta es la cajita fantasma....presiona enter por
favor!");
        header->Add(find=new wxButton(this,wxID_FIND));
        find->SetDefault(); 
            
        //    cargando el grid
        body->Add(grid=new
wxGrid(this,-1,wxDefaultPosition,wxSize(700,600)));
        grid->Connect(wxEVT_KEY_DOWN,wxKeyEventHandler(form::keypress));
        grid->CreateGrid(5,6); 

        //    cargando botones
        footer->Add(1,1,1,wxEXPAND);
        footer->Add(acept=new wxButton(this,wxID_OK));
        footer->Add(cancel=new wxButton(this,wxID_CANCEL));
        Connect(wxID_OK
,wxEVT_COMMAND_BUTTON_CLICKED,wxMouseEventHandler(form::acept_procs)); 
        Connect(wxID_CANCEL
,wxEVT_COMMAND_BUTTON_CLICKED,wxMouseEventHandler(form::cancel_procs));
        Connect(wxID_FIND
,wxEVT_COMMAND_BUTTON_CLICKED,wxMouseEventHandler(form::find_procs));


        resize(); 
        Centre();
        


    }

//    recalcula el tamano de la ventana    
    void form::resize(){
        layout->SetSizeHints(this);
    }



//    ATENCION ATENCION     ATENCION ATENCION     ATENCION ATENCION 
//    AQUI ES DONDE DA EL ERROR
    void form::keypress(wxKeyEvent& x){
        if(x.GetKeyCode()==27){
            buscar->SetFocus();  // EXACTAMENTE AQUI
            return;
        }
        x.Skip();
    }


//    ocurre cuando se preciona el boton de aceptar    
    void form::acept_procs(wxMouseEvent& x){
        EndModal(123);
    }
//    ocurre cuando se preciona el boton de cancelar

    void form::cancel_procs(wxMouseEvent&){
        EndModal(-1);
    }                    
//    ocurre cuando se preciona el boton de cancelar

    void form::find_procs(wxMouseEvent&){ 
        wxMessageBox("voy primero a poner un texto en la cajita de busqueda
asi te das cuenta de que el puntero buscar funciona");
        buscar->SetValue("confirmado!!..el puntero funciona"); 
        wxMessageBox("ejecuto un programa que busca la informacion y le doy
el enfoque al grid para seleccionar el registro que desee");
        grid->SetCellValue(0, 0, "ahora es el momento de la
verdad!!...presiona escape para que de el error"); 
        grid->AutoSizeColumns();
        grid->SetFocus();        
    }


class app:public wxApp{
    bool OnInit(){
        mainframe=new frame(NULL,"fradfasd");
        mainframe->Show(); 
        form* test=new form("prueba del problema");
        test->ShowModal();        
    }
};
IMPLEMENT_APP(app)
//=================================================================
//=================================================================
//  fin del programa

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20080102/34c7185c/attachment.html>


Más información sobre la lista de distribución Cconclase