PDA

Ver la Versión Completa : Sintáxis de SetParent en Builder C++


ginkaku
23-03-2013, 18:57:07
Buenas por motivos de estudio estoy trabajando en c++ y hay un codigo que usaba antes en mis proyectos en delphi: Windows.SetParent(Form2.Handle, Panel2.Handle);
Me podrian decir como se escribe en c++ embarcadero. De antemano muchas gracias
pdta: El proyecto es sobre formularios dentro de otros formularios por eso usaba ese codigo si tuvieran otra idea se les agradeceria

Casimiro Notevi
23-03-2013, 19:06:23
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)

ecfisa
23-03-2013, 19:43:06
Buenas por motivos de estudio estoy trabajando en c++ y hay un codigo que usaba antes en mis proyectos en delphi: Windows.SetParent(Form2.Handle, Panel2.Handle);
Me podrian decir como se escribe en c++ embarcadero.
...

Hola ginkaku.

Esa sentencia se escribe:

::SetParent(Form2->Handle, Panel2->Handle);


Saludos. :)

Pd: Por favor, trata de poner títulos relacionados con el problema que vas a publicar. Si mas adelante alguién busca por "SetParent en Builder C++" difícilmente podrá encontrarlo bajo el título "Ayuda en este codigo".

ginkaku
23-03-2013, 19:49:54
Muchisimas gracias me estaba volviendo loco, funciono perfectamente. Y procurare leer las normas de post en el futuro ^\||/. Enserio thk

ecfisa
24-03-2013, 17:27:41
Hola ginkaku.

Como un comentario adicional, el código:

::SetParent(Form2->Handle, Panel2->Handle);


Tiene el mismo efecto que:

Form2->Parent = Panel2;


Saludos. :)

ginkaku
25-03-2013, 04:52:59
Form2->Parent = Panel2; esto funcionaba no cabe duda y yo lo usaba de hecho. Pero no tenia acceso a los focos(creo q asi se dice) no podia usar los edit solo botones, por eso necesitaba el otro codigo :D

ecfisa
25-03-2013, 07:01:01
Hola ginkaku.

No logro entender en que contexto estás teniendo problemas para usar uno u otro modo. Es decir, si podes acceder a las propiedades Handle, también tenes que poder acceder a las propiedades Parent.

Por ejemplo, estos dos códigos son equivalentes:
1)

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form2 = new TForm2(this); // (*)

Form2->Parent = Panel1;
Form2->Align = alClient;
Form2->Show();
}

2)

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form2 = new TForm2(this);

::SetParent(Form2->Handle, Panel1->Handle);
SetWindowPos(Form2->Handle,HWND_TOP, 0, 0,
Panel1->ClientWidth, Panel1->ClientHeight, SWP_NOACTIVATE);
Form2->Show();
}


Y, para agregar una opción diferente, de este modo lo muestra sin título ni bordes como si fuera un TFrame:

void __fastcall TForm1::btManualDockClick(TObject *Sender)
{
Form2 = new TForm2(this); // (*)

Form2->Show();
Form2->ManualDock(Panel1, NULL, alClient);
Form2->Align = alClient;
}

(*) Esta linea es innecesaria si Form2 se encuentra en: Project => Options => Forms => Auto-create forms.

Saludos.:)

ginkaku
25-03-2013, 08:08:43
Alohaa ecfisa.
Muchas gracias por el interés y por el tiempo dedicado al tema es un gusto ver la gran actividad de la comunidad. Respecto al post como te decía estoy haciendo un proyecto donde un form1 tiene un panel dentro, y bien por medio de un botón llamo al form2 dentro del panel. Precisamente en este mismo foro encontré el código que me ayudaba pero estaba en delphi y el creador del post tenia el mismo problema..."lograba llamar al form peeero aparecia bloqueado los edits", y gracias a la ayuda del foro le dieron el código solución...si mal no recuerdo "metiendo mano a la api : Windows.SetParent(Form2.Handle, Panel2.Handle);".
Gracias a ti pude trasladar esa pequeña linea a c++ y todo marcha de maravilla. No me explico porque el otro código(opción 1 que me planteaste) no logra tener el mismo efecto que la segunda.
Pues no quise profundizar en cosas de form padres y form hijos porque este código funciona de maravilla, tal ves alguien tenga una mejor manera de hacerlo lo cual no dudo, pero como te digo gracias a tu aporte me sigue yendo bien.

lmpadron
26-03-2013, 17:57:10
Hola ginkaku, podrías postear el código en c++ o al menos la referencia al post del club donde lo encontraste en delphi ?? también estoy interesado en este tema y me estoy casi seguro de que me va a ser muy útil

P.D.
Saludos Ecfisa !!!

ginkaku
26-03-2013, 19:02:13
El post original donde lo encontre era: www.clubdelphi.com/foros/showthread.php?t=71783

Lo siento aun no me es permitido colocar enlaces en el foro pero esa es la dirección aumentando el triple w.
Si quieres el código en c++ es precisamente el que coloco ecfisa en la opcion2, recuerda tener un formulario con un panel, un segundo formulario para llamar y un botón. Es muy útil yo lo uso a menudo, saludos!!!!!!!