 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
WaKo13 Ens

Registrado: 12 Mar 2004Mensajes: 34Ubicación: Campeche, Campeche, México
|
Publicado: Sab 13 Ene, 2007 8:57 pm Asunto: Formas fsMDIChild |
|
|
Hola que tal.. mi problema es el siguiente
Tengo una forma fsMDIChild1 de la cual paso a otra forma fsMDIChild2,
de la siguiente forma:
| Código: | Tfrm2 *frm2 = new Tfrm2(this);
frm2->Show(); |
Trabajo en frm2 pero quiero que en frm1 se realice una función que he realizado llamando dicho método desde frm2... pero no puedo ejecutar dicha función... por que el entero que realizo para realizar dicha función me marca que no esta declarado...
De hecho si pongo
| Código: | frm1->Edit->Text = "Hola" |
me marca un error de memoria...
Como puedo hacer trabajar a dicha funcion desde el formulario frm2??
Saludos Cordiales |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Dom 14 Ene, 2007 2:26 am Asunto: |
|
|
Que tal WaKo13, puedes agregar el código completo y dar mas detalles del proceso que intentas hacer?....
Saludos. _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
WaKo13 Ens

Registrado: 12 Mar 2004Mensajes: 34Ubicación: Campeche, Campeche, México
|
Publicado: Lun 15 Ene, 2007 5:00 pm Asunto: |
|
|
Pues lo que intento hacer es filtrar en un dbgrid para que las operaciones que realizé en la forma frm2 se reflejen en frm1
En frm1 tengo el siguiente procedimiento:
| Código: | void __fastcall Tfrm1::Filtrar()
{
dtm->ADOTable->Active = false;
dtm->ADOTable->Filtered = false;
AnsiString _ID = AnsiString(ID); //ID esta declarado como entero y publico y es inicializado al momento que se crea la forma
dtm->ADOTable->Filter = "ID = " + _ID;
dtm->ADOTable->Filtered = true;
dtm->ADOTable->Active = true;
this->dbGrid->Refresh();
} |
entonces en frm2 realizo ciertos calculos, pero cuando yo vaya a cerrar frm2 quiero que esos calculos ya aparezcan reflejados en frm1
| Código: | void __fastcall Tfrm2::BitBtn2Click(TObject *Sender)
{
Update();
frm1->Filtrar();
Close();
} |
Es lo que intento realizar... pero me marca un error de violación de memoria por que haciendo un watch a la variable ID cuando el metodo es llamado desde frm2 esta solo contiene ???
Saludos Cordiales |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Lun 15 Ene, 2007 10:39 pm Asunto: |
|
|
Bueno, aún asi no logro comprender lo que necesitas.
Si trabajas con formularios MDIChild ¿es necesario que frm2 también lo sea?, porque no utilizar un form normal, ya que solo lo utilizas para realizar algún tipo de cálculo.
Según tengo entendido los forms de tipo MDI se utilizan para crear aplicaciones de interfaz de documentos múltiples (MDI), un ejemplo de este tipo de aplicaciones es Word.
Posiblemente tu problema puede ser por la forma en como los estas trabajando. En C++ builder viene un ejemplo de como realizar este tipo de aplicaciones.
Si quieres puedes crear la aplicacion desde Menú File->New->Other... del cuadro de díalogo seleccionas la pestaña "Projects" y clic en "MDI Application". Ahi puedes ver el código y analizar como se trabaja con las ventanas MDIChild.
Saludos! _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 16 Ene, 2007 6:40 am Asunto: |
|
|
No compredo que es lo que necesitas, pero al parecer quieres ejecutar un procedimiento que se encuentra dentro del frm1, pero desde el frm2, si es asi, vamos a ver unas cosas primero
Creacion de la segunda (frm2) en modo child (hijo), al crear una forma se supone que esta se encuentra referenciada por un nombre.
algo como frm2->Name = "forma2", y el primer formulario que tambien es MDChild debe contener algo como esto frm1->Name = "forma1", ahora para crear la forma si esta es dinamicamente (en tiempo de ejecucion), la forma de crearlo debe hacerse de la siguiente manera. un tip que me ha resultado es el siguiente
1.- Verificar que la Forma NO se encuentre habierta.
2.- si existe referenciarme a ella por su nombre y realizar las operaciones.
entonces el codigo para crear la segunda forma MDChild, puede parecerse al siguente
Este codigo puede servirte para abrir todas tus formas MDChild, desde el Menu Principal, por ello esta el operador this, pero si las formas se van a lanzar desde otra Ventana MDChild, deves cambiar el puntero this, por el nombre de tu form principal por ejemplo puede ser
FPRINCIPAL <-- suponiendo que asi se llame el form principal.
| Código: |
void __fastcall TFPrincipal::AbrirForma2Click(TObject *Sender)
{
int hija=0;
bool existe=false;
while(hija<this->MDIChildCount)
{
Application->ProcessMessages();
if(this->MDIChildren[hija]->Name=="Form2"){
this->MDIChildren[hija]->WindowState=wsNormal;
this->MDIChildren[hija]->BringToFront();
existe=true;
break;
}
hija++;
}
if(!existe)
{
Tfrm2 *frm2 = new Tfrm2(this);
frm2->Name = "forma2"; // para no perderla
frm2->Show();
}
}
|
bien despues de abrir la forma 2, ahora nos vamos al metodo que debe usarse para ejecutar el procedimiento que actualiza tus datos... con la misma tematica.
1.- Ver si no se esta ejecutando.
2.- si lo esta traerlo al frente y ejecutar el proceso.
aun que hay un pequeño cambio con respecto a la forma de abrir ya que estamos en un MDCHild, devemos hacer referencia al Form Principal, que lanza a estas dos ventanas
| Código: |
void __fastcall Tfrm2::BitBtn2Click(TObject *Sender)
{
int hija=0;
bool existe=false;
while(hija<FPRINCIPAL->MDIChildCount)
{
Application->ProcessMessages();
if(FPRINCIPAL->MDIChildren[hija]->Name=="forma1"){
FPRINCIPAL->MDIChildren[hija]->WindowState=wsNormal;
FPRINCIPAL->MDIChildren[hija]->BringToFront();
FPRINCIPAL->MDIChildren[hija]->Filtrar();
existe=true;
break;
}
hija++;
}
if(!existe)
{
// si no existe entonces la creamos, jeje
Tfrm1 *frm1 = new Tfrm1(FPRINCIPAL);
frm1->Name = "forma1"; // para no perderla
frm1->Show();
}
}
|
Espero que con esto puedas componer lo que necesitas
Saludos!! _________________
 |
|
| Volver arriba |
|
 |
WaKo13 Ens

Registrado: 12 Mar 2004Mensajes: 34Ubicación: Campeche, Campeche, México
|
Publicado: Mar 16 Ene, 2007 5:50 pm Asunto: |
|
|
Muchas Gracias César me ha servido de mucho tu ayuda... era justo lo que necesitaba....
Saludos Cordiales |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|