Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Minimizar Ventanas

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Minimizar Ventanas Responder citando

Buenas..

Es posible minimizar dos ventanas Padre e Hija a la vez y poder recuperar las dos al maximizar, me daria igual si la ventana Hija es modal o no (si es Modal muchisimo mejor).

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Buenas..

Supongo que muchos habreis pensado al leer mi Consulta "este tio es tonto al minimizar una ventana padre o hija , las dos se minimizan y al volver a activarlas (barra de tareas ) las dos se maximizan" efectivamente, el problema era que solo veia maximizada la padre ya que la hija estaba debajo de esta y no la podia ver Embarassed

Aun asi me surge otra cuestion: al maximizar las ventanas como puedo poner el foco sobre la hija para que se posicione sobre la ventana Padre.

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola Otra vez..

Sigo dandole vuelata al tema de minimizar ventanas Crying or Very sad ,he intentado minimizar una aplicacion desde una ventana hija showmodal, con

Código:
Application->Minimize();


pero solo minimiza la hija.

¿Como puedo minimizar una aplicacion desde una ventatan hija showmodal haciendo click en el boton minimizar de la misma, y desde que evento de esta tengo que actuar?

Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Prueba de esta forma que te explico. Reescribe la función virtual WndProc del formulario que re verá como ShowModal.
En esta función vamos a interceptar los mensajes WM_SYSCOMMAND de forma que controlemos SW_MINIMIZE, SW_RESTORE y SC_CLOSE. Con ello obligaremos a la ventana principal de nuestra app a reaccionar momo nos interesa.



Lo siguiente es como quedaría un archivo de cabecera del formulario ShowModal
Código:

//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published:    // IDE-managed Components
private:
  void __fastcall WndProc(TMessage& msg);
public:        // User declarations
  __fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif



Ahora te muestro la función WndProc
Código:
void __fastcall TForm2::WndProc(TMessage& msg)
{
  if(msg.Msg == WM_SYSCOMMAND){
    if(msg.WParam == SC_MINIMIZE)
      ShowWindow(Application->MainForm->Handle, SW_MINIMIZE);
   
    if(msg.WParam == SC_RESTORE || msg.WParam == SC_CLOSE){
      ShowWindow(Application->MainForm->Handle, SW_RESTORE);
      SetWindowPos(Handle, Application->MainForm->Handle, 0,0,0,0, SWP_NOSIZE | SWP_NOREPOSITION);
    }
  }

  TForm::WndProc(msg);
}

Espero que te ayude.


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Muchisimas gracias por Contestar..

Lo he probado y no funciona realmente como yo quiero, pero el problema no esta en tu codigo si no en mi planteamiento del problema.

Para ser exactos el flujo de ventanas en mi aplicacion funciona de la siguiente manera:

Form Principal ForMenu, desde este se llama a un FomHijo1(SHOWMODAL): se muestra form hijo1 sobre ForMenu (este se queda oculto).

Desde FormHijo1 se llama a FormHijo2(showmodal), el FormHijo2 se muestra sobre una Parte de FormHijo1 con los botones minimizar,maximizar.En este form se realizaran una serie de calculos que pueden llevar mucho tiempo.

Mi objetivo es que si el usuario lo desea minetras FormHijo2 realiza los calculos pueda minimizarlo y con el tambien minimizar tanto FormHijo1 como ForMenu.

Gracias por tu tiempo. Felices Fiestas a todos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

En ese caso lo hacemos en cadena. Ten en cuenta que para crear y visualizar los Forms modeles deberás hacerlo de la siguiente forma para que el código funcione:

Código:

  TForm2 *Form = new TForm2(this);
  Form->ShowModal();
  delete Form;


Esto es así porque el siguiente código usa el Owner para localizar el Form previo. Otra forma un poco más compleja sería enumerar todas las ventanas pero lo que te expongo se entiende mejor y es mucho más simple:

Código:

void __fastcall TForm3::WndProc(TMessage& msg)
{
  HANDLE MainHandle = Application->MainForm->Handle;
  TForm* AOwner = (TForm*)Owner;
  if(msg.Msg == WM_SYSCOMMAND){
    if(msg.WParam == SC_MINIMIZE){
      ShowWindow(MainHandle, SW_MINIMIZE);
      do{
        ShowWindow(AOwner->Handle, SW_MINIMIZE);
        AOwner = (TForm*)AOwner->Owner;
      }while(AOwner->Handle != MainHandle);
    }
    if(msg.WParam == SC_RESTORE || msg.WParam == SC_CLOSE){
      ShowWindow(MainHandle, SW_RESTORE);
      do{
        ShowWindow(AOwner->Handle, SW_RESTORE);
        AOwner = (TForm*)AOwner->Owner;
      }while(AOwner->Handle != MainHandle);
    }
  }

  TForm::WndProc(msg);
}


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias por contestar...

Funciona perfectamente,al minimizar la ventana3, minimiza la tres ventanas y al maximizar maximiza todas las ventanas, la unica pega que le pongo es que al minimizar la ventana3 muestra las tres ventanas minimizadas (aunque la unica maximizable es la tercera)..

Es posible que solo se muestra una minimacion y sea en la barra de tareas, como hace al minimizar el form Padre.


Gracias otra vez. Feliz Año a Todos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Las ventanas modales son un poco especiales y se niegan a desaparecer o a ceder el control. Para el caso que tu comentas vamos a hacer una trampa a windows que va a consistir en hacer transparente Form3 mientras esté minimizada, de esa forma no se ve en el escritorio y quedará representada unicamente en la barra de tareas. A las demás ventanas simplemente las haremos invisibles.

Código:

void __fastcall TForm3::WndProc(TMessage& msg)
{
  HANDLE MainHandle = Application->MainForm->Handle;
  TForm* AOwner = (TForm*)Owner;
  if(msg.Msg == WM_SYSCOMMAND){
    if(msg.WParam == SC_MINIMIZE){
      ShowWindow(MainHandle, SW_HIDE);
      do{
        ShowWindow(AOwner->Handle, SW_HIDE);
        AOwner = (TForm*)AOwner->Owner;
      }while(AOwner->Handle != MainHandle);
      SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED);
      SetLayeredWindowAttributes(Handle, NULL, 0, LWA_ALPHA);
    }
    if(msg.WParam == SC_RESTORE || msg.WParam == SC_CLOSE){
      ShowWindow(MainHandle, SW_RESTORE);
      do{
        ShowWindow(AOwner->Handle, SW_RESTORE);
        AOwner = (TForm*)AOwner->Owner;
      }while(AOwner->Handle != MainHandle);
      SetLayeredWindowAttributes(Handle, NULL, 255, LWA_ALPHA);
    }
  }

  TForm::WndProc(msg);
}


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Buenas..

Sencillamente Perfecto, era exactamente lo que buscaba... un crack..

Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.