No funciona OnChange cuando uso ActvePageIndex
Hola Amigos !!!!!
En un TPageControl cuando el usuario cambia de pestañas se activa el evento OnChange que realiza una acción determinada. El problema es que cuando uso la propiedad ActivePageIndex el evento OnChange no se activa. Estuve buscando un poco y encontré este código que puede llegar a servir, pero.... no lo entiendo, me sería muy útil que estuviera en C++ Código:
type |
Cita:
|
Cita:
|
Cita:
El problema que tienes es que la asignación de la propiedad ActivePageIndex no activa el evento OnChange. Entonces, lo que puedes hacer es derivar una clase de TPageControl en la cual redefinas el método de asignación de dicha propiedad:
Para poder usar esta nueva funcionalidad, tendrías que instalar el nuevo componente y usarlo en lugar del TPageControl original. No obstante, esto puede ser engorroso, sobre todo si sólo lo vas a usar para un PageControl. Entonces, lo que puedes hacer es usar el truco de la clase sobrepuesta (*): en la unidad del formulario que tiene tu PageControl agregas esta definición, antes de la del propio formulario:
Como ves, lo que haces ahora es definir una clase con el mismo nombre que la original. Como la declaración aparece antes que la del PageControl1, el compilador usará la nueva clase. La implementación del método etActivePageIndex es como antes:
--------------------- (*) Lo que desconozco por completo, es si el truco de las clases sobrepuestas funciona también en C++ // Saludos |
No se si te será más fácil traducir esto:
Se trata de definir una clase nueva que deriva de TPageControl y define esa propiedad con los 2 métodos. Si revisas cualquier clase creada en Builder se trata de hacerla igual. Y luego en lugar de llamar a:;
utilizas:
AÑADO: Veo que Román se ha adelantado. He de decir que yo tampoco se si este truco funcionará en Builder, pero es fácil que lo compruebas. Yo tampoco tengo conocimientos de Builder así que no te puedo ayudar a "traducirlo". |
Hola.
Otra opción puede ser: Código:
... |
Gracias a todos por su tiempo, estuve con unos problemas por eso no me pude conectar a responder.
Creo que las soluciones que me brindaron pueden llegar a funcionar todas, pero tengo el inconveniente que no puedo traducirlas. Además no tengo tantos conocimientos por ejemplo, como para poder crear nuevas clases, perdón soy bastante novato. Por eso valoro muchísimo lo que hacen todos ustedes por los demás. Saludos y gracias. |
No me había percatado de este tema hasta ahora. Voy a poner mi granito de arena.
En primer lugar y como solución sencilla sería llamar al evento OnChange cada vez que usemos la propiedad ActivePageIndex, de forma "manual". Tiene la ventaja de ser sencillo y comprenderse bien, pero no es automático: Código:
PageControl1->ActivePageIndex = 3; Código:
// Nueva definición de SetActivePageIndex de la clase TPageControl Saludos. |
Solucionado
Estimados amigos, este código proporcionado por escafandra funcionó excelente. :D
Código:
void __fastcall TPageControl::SetActivePageIndex(const int Value) Quiero felicitar y agradecer nuevamente a todos por su gran ayuda !!!!! Saludos. |
Cita:
|
Cita:
comctrls.pas
Pero nada te impide que lo reescribas y lo compiles para que puedas cambiarle su funcionalidad. Saludos. |
Cita:
|
Cita:
Saludos |
Ahí te subo un ejemplo. No lo dejaré mucho tiempo para no consumir mi espacio de archivos adjuntos.
Saludos. |
Gracias escafandra. Ahora mismo lo veo. Ya puedes borrarlo si quieres.
|
Cita:
|
Cita:
Saludos. |
La franja horaria es GMT +2. Ahora son las 00:24:32. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi