Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-01-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Form Modal me deja congelado el proceso

Pues amigos, al no saber como crear un MessageBox con botones con textos personalizados, pues me he creado un nuevo form que muestro y elijo el boton que sea y esa es la idea pero no va como esperaba. Hago esto:

Linea que muestra el form del dialogo desde el form principal:
Código PHP:
DialogQuerySaveAs->ShowModal(); 
Form que nos pregunta que queremos hacer:
Código PHP:
#include <vcl.h>
#pragma hdrstop

#include "DialogQuerySaveAs.h"
#include "UnitMain.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TDialogQuerySaveAs *DialogQuerySaveAs;
//---------------------------------------------------------------------------
__fastcall TDialogQuerySaveAs::TDialogQuerySaveAs(TComponentOwner)
   : 
TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TDialogQuerySaveAs::FormShow(TObject *Sender)
{
   
FormMain->IdValorSaveAs ID_ERROR;
   
DialogQuerySaveAs->Close();
}
//---------------------------------------------------------------------------

void __fastcall TDialogQuerySaveAs::Button1Click(TObject *Sender)
{
   
FormMain->IdValorSaveAs ID_IMAGE_TO_FILE;
   
DialogQuerySaveAs->Close();
}
//---------------------------------------------------------------------------

void __fastcall TDialogQuerySaveAs::Button2Click(TObject *Sender)
{
   
FormMain->IdValorSaveAs ID_IMAGE_TO_CLIPBOARD;
   
DialogQuerySaveAs->Close();
}
//---------------------------------------------------------------------------

void __fastcall TDialogQuerySaveAs::Button3Click(TObject *Sender)
{
   
FormMain->IdValorSaveAs ID_FLOW_TO_FILE;
   
DialogQuerySaveAs->Close();
}
//---------------------------------------------------------------------------

void __fastcall TDialogQuerySaveAs::Button4Click(TObject *Sender)
{
   
FormMain->IdValorSaveAs ID_CANCELAR;
   
DialogQuerySaveAs->Close();
}
//--------------------------------------------------------------------------- 
El caso es que parece ir todo bien, obtengo el valor y todo y salgo del metodo desde donde llamo a ShowModal pero se queda congelado el form principal. Supongo que lo que hago es una salvajada pero no se me ocurrio nada mejor asi que, si podeis ayudarme, por favor ayudenme .
Responder Con Cita
  #2  
Antiguo 08-01-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Te muestro un ejemplo usando ModalResult:
Crea el formulario que va a ser modal como disponible y no como autocreado.

UNIT1.CPP
Código PHP:
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponentOwner)
  : 
TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  
TForm2 *Dialog = new TForm2(this);
  
TModalResult Result Dialog->ShowModal();
  if(
Result == mrOkShowMessage("OK");
  else if(
Result == mrCancelShowMessage("Cancel");
  else if(
Result == mrOtroShowMessage("Otro");
}
//--------------------------------------------------------------------------- 
UNIT2.H
Código PHP:
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------

TModalResult mrOtro mrNo 1;

class 
TForm2 : public TForm
{
__published:    // IDE-managed Components
  
TButton *Button1;
  
TButton *Button2;
  
TButton *Button3;
  
void __fastcall Button1Click(TObject *Sender);
  
void __fastcall Button2Click(TObject *Sender);
  
void __fastcall Button3Click(TObject *Sender);
private:    
// User declarations
public:        // User declarations
  
__fastcall TForm2(TComponentOwner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif 
UNIT2.CPP
Código PHP:
#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponentOwner)
  : 
TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm2::Button1Click(TObject *Sender)
{
  
ModalResult mrOk;
}
//---------------------------------------------------------------------------

void __fastcall TForm2::Button2Click(TObject *Sender)
{
  
ModalResult mrCancel;
}
//---------------------------------------------------------------------------

void __fastcall TForm2::Button3Click(TObject *Sender)
{
  
ModalResult mrOtro;
}
//--------------------------------------------------------------------------- 
Saludos.
Responder Con Cita
  #3  
Antiguo 09-01-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
¿Como es eso de crearlo como disponible? Yo lo intenté hacer como tu pero en la linea del new se quedaba y no pasaba de ahi. ¿Como lo haces? Me interesa ver el unit1.h por si haces algo que me falta.
Responder Con Cita
  #4  
Antiguo 09-01-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
En opciones del proyecto->Forms puedes configurarlo como autocreado o disponible. Te interesa que solo exista cuando lo necesites. Te subo el proyecto.

Saludos.

Última edición por escafandra fecha: 09-03-2020 a las 08:00:24.
Responder Con Cita
  #5  
Antiguo 09-01-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Ok amigo, muchas gracias por todo. En cuanto tenga un rato libre lo miro a ver si me entero.
Responder Con Cita
  #6  
Antiguo 09-01-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Muchas gracias amigo, yo hice todo lo que tu hiciste en tu proyecto pero me faltó lo que indicas de hacer accesible al form desde las opciones del proyecto y supongo que por eso se quedaba congelado. Ya funciona como la seda jejeje.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
LLamar a un Form y que no sea Modal chinchan C++ Builder 2 23-09-2011 15:15:25
Liberación de un Form No Modal vejerf OOP 1 06-09-2010 19:41:20
Form Principal Modal CarlosHernandez Varios 9 26-02-2009 01:47:01
Form modal deja que el form llamante tome el foco tata Varios 6 17-05-2006 11:51:37
Saber si una Form es modal Delfino Varios 3 18-09-2005 04:12:14


La franja horaria es GMT +2. Ahora son las 01:25:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi