| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Mie 01 May, 2019 10:46 am Asunto: Crear evento boton dinamico dentro de form dinamico |
|
|
Buenas..
Dentro de un Formulario FormPadre he creado un furmulario Hijo de forma dinamica
| Código: |
TForm * FHijo;
FHijo = new TForm(this)
|
Y a su vez un Boton de forma dinamica dentro de este Form Hijo:
| Código: |
TLMDButton *MiBoton;
MiBoton = new TLMDButton(this);
MiBoton->Parent = FHijo; |
Hasta aqui todo correcto..mi problema surge cuando quiero acceder al evento click del MiBoton
| Código: | MiBoton->OnClick = ClickBoton; |
supongo que debo de declarar la funcion:
| Código: |
void_fascall FHijo::ClickBoton(TObject *Sender)
{
} |
pero no se como ni donde... Alguna idea
Gracias |
|
| Volver arriba |
|
 |
Felip Master

Registrado: 09 Jun 2004Mensajes: 200
|
Publicado: Jue 02 May, 2019 5:28 am Asunto: |
|
|
coloque un botón en el formulario
Cambie el nombre. Por ejemplo: button
haga doble clic en él
| Código: |
void __fastcall TForm1::buttonClick(TObject *Sender)
{
}
|
en el código hace un comentario
| Código: |
void __fastcall TForm1::buttonClick(TObject *Sender)
{
//
}
|
delete el botón
puede utilizar este onclick
| Código: |
MiBoton->OnClick = buttonClick;
...
void __fastcall TForm1::buttonClick(TObject *Sender)
{
ShowMessage("Builder");
}
|
|
|
| Volver arriba |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Jue 02 May, 2019 6:22 pm Asunto: |
|
|
Muchas Garcias por contestar..
He hecho lo que me has sugerido y al compilar no me da ningun error, pero al ejecutar el programa y hacer click sobre los botones no me accede al evento correspondiente (no hacen nada).
Que puedo estar haciendo mal??
Gracias otra vez. |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Jue 02 May, 2019 9:17 pm Asunto: |
|
|
Mira este ejemplo:
| Código: |
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
void __fastcall ButtonHijoClick(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
|
| Código: |
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TForm *FHijo = new TForm(this);
TButton *MiBoton = new TButton(this);
MiBoton->Parent = FHijo;
MiBoton->OnClick = ButtonHijoClick;
MiBoton->Caption = "Mi Boton";
FHijo->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonHijoClick(TObject *Sender)
{
Beep();
}
|
|
|
| Volver arriba |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Vie 03 May, 2019 6:49 pm Asunto: |
|
|
| Perfecto... Gracias a los dos |
|
| Volver arriba |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Vie 03 May, 2019 7:35 pm Asunto: |
|
|
Buenas..
Me ha surgido otro problema...
He creado el form FHijo (creado dinamicamente) de esta manera:
| Código: | FHijo->ShowModal(); |
Al hacer Click con el raton en uno de los botones creados dinamicamente (funciona, gracias) quiero que se cierre el FHijo..
He probado a pone en su evento click los siguientes codigos
| Código: | Application->OnMessage=0;
ModalResult=mrOk; |
| Código: |
PostMessage(Handle,WM_Close,0,0); |
y no se cierra el form.
Alguna idea Gracias. |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Vie 03 May, 2019 9:50 pm Asunto: |
|
|
Si declaras FHijo como miembro de la clase o como una variable blobal, puedes hacer:
| Código: |
void __fastcall TForm1::ButtonHijoClick(TObject *Sender)
{
FHijo->Close();
}
|
En caso contrario:
| Código: |
void __fastcall TForm1::ButtonHijoClick(TObject *Sender)
{
TButton *B = static_cast<TButton*>(Sender);
if(B){
TForm *F = static_cast<TForm*>(B->Parent);
if(F) F->Close();
}
}
|
Saludos. |
|
| Volver arriba |
|
 |
|