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

Pedro Mateo pedromateoa en gmail.com
Jue Ene 3 00:23:59 CET 2008


gracias zelion
jajajjajjaa
tenia mucho tiempo dando vueltas sobre eso

aunque ya encontre una solucion alternativa es bueno saber cual es la real
causa del problema asi no se queda uno con la duda sobre las librerias

por otro lado

lo que no entiendo es porque en un evento si y en otro no

porque en el evento del boton funciono muy bien

puedes percatarte en el ejemplo

este comportamiento se corresponde un patron o es aleatorio?

me gusta usar connect, es mas claro para mi

es seguro usarlo?

gracias!




El día 2/01/08, ZeLion <Zelion_cracking en yahoo.es> escribió:
>
>  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
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20080102/943822d3/attachment.html>


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