Este blog esta destinado a proporcionar tips de programación que pudieran ser de utilidad a la comunidad para sus aplicaciones así como para compartir ideas y experiencias de programación en los lenguajes C++, Builder C++ 5, Visual Basic y SQL Server, principalmente.
viernes, 27 de mayo de 2011
Creación de controles en tiempo de ejecución en Builder C++
Crear un control en tiempo de ejecución en Builder C++ 5 es muy sencillo, lo que debemos hacer es lo siguiente:
1.- En la definición de la clase del formulario (que se deriva de la clase TForm y que en nuestro caso se llama TfrmCreaControl) en el apartado private (no published, el cual se deja para los controles creados en tiempo de diseño) se declara la variable objeto de la clase del control que deseamos crear (también puede ser en la sección public, todo depende del scope que queramos darle al control), en el ejemplo la variable se llama edtEdit y es una variable del tipo TEdit, esta variable debe ser un apuntador ya que la creación de los controles es de forma dinámica.
//---------------------------------------------------------------------------
class TfrmCreaControl : public TForm
{
__published: // IDE-managed Components
TButton *btnCreaEdit;
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall btnCreaEditClick(TObject *Sender);
private: // User declarations
TEdit *edtEdit;
public: // User declarations
__fastcall TfrmCreaControl(TComponent* Owner);
};
//---------------------------------------------------------------------------
2.- En el evento Click del boton btnCreaEdit asignamos memoria al apuntador edtEdit y en la llamada al constructor enviamos el apuntador del objeto formulario TfrmCreaControl usando la palabra clave this. Para poder visualizar el control tenemos que establecer su propiedad Parent, es decir el padre del control, en este caso el formulario TfrmCreaControl. Finalmente si lo deseamos o requerimos cambiamos las propiedades por default del control recién creado, por default el control aparece en la parte superior izquierda del formulario (propiedades edtEdit->Top = edtEdit->Left = 0).
La secuencia no importa, puedes primero cambiar las propiedades del control y después establecer la propiedad Parent o viceversa.
//---------------------------------------------------------------------------
void __fastcall TfrmCreaControl::btnCreaEditClick(TObject *Sender)
{
unsigned offset = 25;
if(edtEdit!=NULL)
{
edtEdit = new TEdit(this);
edtEdit->Parent = this;
edtEdit->Left = btnCreaEdit->Left + btnCreaEdit->Width + offset;
edtEdit->Top = btnCreaEdit->Top;
edtEdit->Text = "Hello World!";
}
}
//---------------------------------------------------------------------------
En la imagen se muestra el formulario en tiempo de diseño, el formulario en tiempo de ejecución después de haber pulsado el botón, las propiedades del botón y las propiedades del formulario.
Finalmente no debemos olvidarnos de liberar la memoria previamente asignada de forma dinámica al apuntador edtEdit, esto lo hacemos al cerrar el formulario. Tal vez no sea necesario pues se supone que al cerrar nuestra aplicación esta libera toda la memoria asignada durante su ejecución, sin embargo lo hacemos por precaución, no esta de más agregar esas líneas.
//---------------------------------------------------------------------------
void __fastcall TfrmCreaControl::FormClose(TObject *Sender,
TCloseAction &Action)
{
delete edtEdit;
}
//---------------------------------------------------------------------------
Notas: Como comentario final déjame decirte que el apuntador edtEdit lo puedes declarar en cualquier parte del código, solamente hay que tener cuidado con su scope o alcance, ya que si lo declaras, por ejemplo, en una función, solamente dentro de esa función podrás acceder y visualizar el control Edit, ya que una vez que termine la ejecución de la función el control desaparece. Te invito a experimentar con diferentes formas de crear y con diferentes controles.
En el próximo tip explicaré como mandar mensajes de Windows (los cuales sirven para comunicar aplicaciones o para comunicar aplicaciones con sus controles o el sistema con las aplicaciones en el ambiente Windows) a un control o a un formulario en el environment de Builder C++ 5.
Suscribirse a:
Comentarios (Atom)
