[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