• Viernes 26 de Abril de 2024, 20:28

Autor Tema:  Redimensionar la ventana  (Leído 2181 veces)

avefenix1810

  • Miembro activo
  • **
  • Mensajes: 74
    • Ver Perfil
Redimensionar la ventana
« en: Domingo 28 de Noviembre de 2010, 21:59 »
0
Hola a todos de nuevo....

Gracias a Softevolucion, logre avanzar con mi programa.
Aunque sigo con preguntas (quizás sean muy básicas pero es que recién estoy aprendiendo a manejar el C++ Builder 6).

He logrado crear varias ventanas en una aplicación (estoy haciendo una aplicación que me permita trabajar los datos de una encuesta, que están en una tabla de access 2007)
y cuando ejecuto la aplicación va todo bien (aparece la ventana de 800x600) hasta que hago click en maximizar la ventana... ahí es donde tengo el problema, se agranda y los componentes que tenía se mueven y ya no queda tan bonito como cuando recién se abre.

¿Cómo hago para que los componentes mantengan la posición relativa a la ventana?

Otra cosa que también me preocupa es que cuando hago una modificación en el programa y me equivoco... no encuentro la manera de hacer algo así como "volver atrás". Hasta ahora para evitar tener que hacer todo de nuevo, voy creando copias.... pero ya tengo un montón. ¿Me pueden ayudar?

Y por último... hay una parte de la aplicación en la que debo ingresar el núcleo familiar de la persona encuestada ( a todas las personas que viven en su casa). Para eso puse en el formulario 10 Edit, creyendo que no habrá mas de 10 personas.... pero esto no es eficiente. Hay alguna manera de hacer aparecer un Edit mas si apretó un boton que diga "ingresar otro".

Gracias  :comp:

victorivan

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Redimensionar la ventana
« Respuesta #1 en: Lunes 20 de Diciembre de 2010, 18:24 »
0
Una Alternativa a lo yo entendi de tu problema podria ser esta, que ZOOM de tu forma,
esta dimensiona todo los controles según aumenten o disminuya su tamaño.

Este tema fue discutido y chequeado en otro foro y funciona perfectamente.

Prueba y me cuentas.


#include<memory>
#include <Inifiles.hpp>      


void __fastcall RegistrarControles(TWinControl *F);
void __fastcall AcomodarControles(TWinControl *F);

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
   RegistrarControles(this);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
   AcomodarControles(this);
}
//---------------------------------------------------------------------------
//   FUNCION
//---------------------------------------------------------------------------
void __fastcall RegistrarControles(TWinControl *F)
{
//
//       Funcion registrada para realizar zoom in-out
//

   AnsiString asResize =   ExtractFilePath(Application->ExeName) +
                           F->Name.Trim()+".ini";
   std::auto_ptr<TIniFile> pIni(new TIniFile(asResize));
   TControl *pControl;
   float ccLeft,ccHeight,ccTop,ccWidth;
   for(int control = 0; control <F->ComponentCount; control++)
   {
      Application->ProcessMessages();
      if (F->Components[control]->InheritsFrom(__classid(TControl)))
      {
         Application->ProcessMessages();
         pControl = dynamic_cast<TControl*>(F->Components[control]);
         // sacamos los porcentajes
         ccTop    = ( pControl->Top    * 100 ) / F->Height;
         ccLeft   = ( pControl->Left   * 100 ) / F->Width;
         ccHeight = ( pControl->Height * 100 ) / F->Height;
         ccWidth  = ( pControl->Width  * 100 ) / F->Width;
         // grabamos en Archivo de Configuracion
         pIni->WriteFloat(pControl->Name,"Top",ccTop) ;
         pIni->WriteFloat(pControl->Name,"Left",ccLeft) ;
         pIni->WriteFloat(pControl->Name,"Width",ccWidth) ;
         pIni->WriteFloat(pControl->Name,"Height",ccHeight) ;
      }
   }
   pIni->UpdateFile();
}
//---------------------------------------------------------------------------
void __fastcall AcomodarControles(TWinControl *F)
{
//
//       Funcion registrada para realizar zoom in-out
//

   AnsiString asResize =   ExtractFilePath(Application->ExeName) +
                           F->Name.Trim()+".ini";
   std::auto_ptr<TIniFile> pIni(new TIniFile(asResize));
   TControl *pControl;
   float ccLeft,ccHeight,ccTop,ccWidth;
   for(int control = 0; control <F->ComponentCount; control++)
   {
      if (F->Components[control]->InheritsFrom(__classid(TControl)))
      {
         Application->ProcessMessages();
         pControl = dynamic_cast<TControl*>(F->Components[control]);
         // recuperamos los porcenajes en relacion al form
         ccTop   = pIni->ReadFloat(pControl->Name,"Top",ccTop);
         ccLeft  = pIni->ReadFloat(pControl->Name,"Left",ccLeft) ;
         ccWidth = pIni->ReadFloat(pControl->Name,"Width",ccWidth) ;
         ccHeight= pIni->ReadFloat(pControl->Name,"Height",ccHeight) ;
         pControl->Left   = (ccLeft  *  F->Width) / 100 ;
         pControl->Top    = (ccTop   *  F->Height) / 100 ;
         pControl->ClientWidth  = (ccWidth *  F->Width) / 100 ;
         pControl->ClientHeight = (ccHeight * F->Height) / 100 ;
      }
   }
}
//---------------------------------------------------------------------------

avefenix1810

  • Miembro activo
  • **
  • Mensajes: 74
    • Ver Perfil
Re: Redimensionar la ventana
« Respuesta #2 en: Lunes 27 de Diciembre de 2010, 20:39 »
0
Gracias por responder...lo voy a probar  :comp:   :good: