Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


Problema con el control MSFlexGrid

Aqui programadores en la plataforma Win32 con Visual C++ de Microsoft...

Moderador: latindeveloper

Problema con el control MSFlexGrid

Notapor n_VC el Lun Nov 28, 2005 1:48 pm

hola

alguien podria decirme como modificar un contrlol FlexGrid ubicado en un dialogo modal desde el dialogo principal de una aplicacion MFC

puse algo como esto pero no funciona:

Código: Seleccionar todo
CDialog1 dlg;
dlg.m_omegaFlex.SetCol(1);
dlg.m_omegaFlex.SetText("omega");
dlg.DoModal();
Avatar de Usuario
n_VC
Novato
Novato
 
Mensajes: 8
Registrado: Jue Oct 27, 2005 8:32 pm

Notapor n_VC el Lun Dic 05, 2005 2:40 pm

nadie??
Avatar de Usuario
n_VC
Novato
Novato
 
Mensajes: 8
Registrado: Jue Oct 27, 2005 8:32 pm

Re: Problema con el control MSFlexGrid

Notapor latindeveloper el Lun Dic 05, 2005 9:18 pm

Habia olvidado responder :D

El codigo que muestras debe saltar errores por que la variable m_omegaFlex no existe hasta que DoModal es llamado.

Lo que puedes hacer es crear un puntero a la variable m_omegaFlex dentro de tu dialogo principal, algo asi como:

Código: Seleccionar todo
class CDialogoPrincipal
{
  public:
  CMSFlexGrid *punteroMSFlexGrid; // inicializarlo en NULL
}


Luego al llamarlo en tu dialogo principal

Código: Seleccionar todo
CDialogoPrincipal::AlgunaFuncion()
{
  CDialog1 dlg;
  punteroMSFlexGrid = &dlg.m_omegaFlex;
  dlg.DoModal();
}


Luego desde cualquier funcion podras utilizar punteroMSFlexGrid siempre y cuando no sea NULL.

Pero creo que lo que necesitas es que tu MSFlexGrid del dialogo modal tenga valores de inicializacion. Si ese es el caso entonces en tu CDialogoPrincipal puedes crear una funcion como CDialogoPrincipal::LlenarDatosEn(CMSFlexGrid *punteroMSFlexGrid); En ese funcion haces todo lo que necesites hacer con punteroMSFlexGrid

Luego en tu clase modal (CDialog1) en el evento OnInitDialog pones este codigo.

Código: Seleccionar todo
CDialog1::OnInitDialog()
{
   ...
   CDialog1 *dlg = (CDialog1 *)AfxGetMainWnd();
   dlg->LlenarDatosEn(&m_omegaFlex);
}


Espero que te sirva... si tienes problemas o me enrede demasiado con mi solucion solo escribe :wink:
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

Re: Problema con el control MSFlexGrid

Notapor onlytk el Mar Dic 06, 2005 8:17 am

Aportando a la respuesta de nuestro amigaso Latindeveloper......

Pero creo que lo que necesitas es que tu MSFlexGrid del dialogo modal tenga valores de inicializacion.


El control en el dialogo no esta siendo inicializado.

Código: Seleccionar todo
CDialog1 dlg;
dlg.m_omegaFlex.SetCol(1);
dlg.m_omegaFlex.SetText("omega");
dlg.DoModal();


El dialogo que creaste con CDialog1 dlg, solo sera inicializado cuando llames a DoModal, esta llamada ultima causa que el Dialogo sea preparada para cargar, y el control sea inicializado, solo despues podras accesar a sus propiedades y metodos, lo que podrias hacer, es lo siguiente:

Crea una funcion miembro de la clase CDialog1, por ejemplo SetDatos(1, "omega"); al cual llames antes de mostrar al dialogo con el DoModal, y en OnInitDialog, llamas a las funciones necesarias del Control puesto ue ya habra sido habilitado para su manejo.

Código: Seleccionar todo
class CDialog1: public CDialog
....
   int, m_intCol;
   CString m_sText;
....
   void SetDatos(int col, CString Text)
   {
      m_intCol = col, m_sText = Text;
   }
....


Luego ....

Código: Seleccionar todo
CDialog1 dlg;
dlg.SetDatos(1, "omega");
dlg.DoModal();


y para terminar .... dentro del evento OnInitDialog del CDialog1, inicializas el control.

Código: Seleccionar todo
BOOL CDialog1::OnInitDialog()
{
   CDialog::OnInitDialog();
   .....
   dlg.m_omegaFlex.SetCol(1);
   dlg.m_omegaFlex.SetText("omega");

   return TRUE;
}


Salu2. :twisted: [/code]
El Mejor Blog Underground http://www.onlytk.tk
Avatar de Usuario
onlytk
Usuario Activo
Usuario Activo
 
Mensajes: 28
Registrado: Lun Oct 17, 2005 9:40 pm

Notapor n_VC el Sab Dic 10, 2005 12:43 am

ok ya tengo hasta este punto :
Código: Seleccionar todo
CDialog1::OnInitDialog()
{
   ...
   CDialog1 *dlg = (CDialog1 *)AfxGetMainWnd();
   dlg->LlenarDatosEn(&m_omegaFlex);
}

Ahora mi duda es como manejar punteroMSFlexGrid en la funcion que mencionas CDialogoPrincipal::LlenarDatosEn(CMSFlexGrid *punteroMSFlexGrid) para ir llenando los datos del control desde el dialogo principal, dado que no se manejar muy bien los punteros :?
Espero me puedan sacar de la duda :roll: Por cierto gracias a ambos por sus respuestas que me han sido muy útiles :lol:
Avatar de Usuario
n_VC
Novato
Novato
 
Mensajes: 8
Registrado: Jue Oct 27, 2005 8:32 pm


Volver a Visual C++

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados