Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-06-2007
nfrfabian nfrfabian is offline
Miembro
 
Registrado: ago 2006
Posts: 55
Poder: 20
nfrfabian Va por buen camino
Proyecto MDI, error al crear form hija

Hola a todos, perdon si vuelvo con mi problema de siempre, pero esta vez necesito una solucion definitiva porque sino pierdo el trabajo (o mejor dicho, al no encontrar solucion al problema voy a tener que dejar el proyecto). El problema es el siguiente: Tengo un proyecto del tipo MDI, tengo varias form hijas, de todas las form hijas hay una que necesito que se repita, es decir tengo un form del tipo fsMDIChild que lo guarde con distintos nombres, despues agrego los forms al proyecto teniendo por ejemplo forms adetallada, agendadetallada1, agendadetallada2, agendadetallada3, etc. El codigo que crea los forms es el siguiente:

Código Delphi [-]
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm);
  Application.CreateForm(TAboutBox, AboutBox);
  Application.CreateForm(Tagendadetallada1, agendadetallada1);
  Application.CreateForm(Tagendadetallada2, agendadetallada2);
  Application.CreateForm(Tagendadetallada3, agendadetallada3);
  Application.CreateForm(Tagendadetallada5, agendadetallada5);
  Application.CreateForm(Tagendadetallada6, agendadetallada6);
  Application.CreateForm(Tagendadetallada7, agendadetallada7);
  Application.CreateForm(Tagendadetallada8, agendadetallada8);
  Application.CreateForm(Tagendadetallada9, agendadetallada9);
  Application.CreateForm(Tagendadetallada11, agendadetallada11);
  Application.CreateForm(Tagendadetallada12, agendadetallada12);
  Application.CreateForm(Tagendadetallada13, agendadetallada13);
  Application.CreateForm(Tagendadetallada14, agendadetallada14);
  Application.Run;

El tamaño del ejecutable es de 5 mb aprox., el form agendadetallada tiene cientos de componentes tedits. Al proyecto tengo que agregarle 6 forms agendadetallada mas, pero no puedo ni agregarle uno mas porque aparece el error: 'system error. code: 14 Espacio de almacenamiento insuficiente para completar esta operacion.'
Se que no es un problema ni de disco ni de memoria porque tengo lo suficiente, 40 gb en disco libre y la memoria del sistema es de 1gb. Al ejecutar el programa con la funcion F8 (paso por paso) en el momento que se ejecuta la instruccion Application.CreateForm(Tagendadetallada15, agendadetallada15); aparece el mismo error.

Otra forma de crear el proyecto fue la siguiente: el form agendadetallada lo puse en el repositor de objeto con la funcion adecuada "Add to Repository", despues creo otro proyecto MDI y le adiciono los forms de la siguiente forma: File -> New -> Other..., despues selecciono el form agendadetallada y selecciono, cambio la opcion de "Copy" a "Inherit". Realizo estos pasos con la cantidad de forms que necesito, al compilar la aplicacion el tamaño del ejecutable llega a 1 mb, entonces pense que ahora si funcionaria pero el error sigue apareciendo.
Quizas el problema no es de mi aplicacion sino del mismo sistema operativo windows, o algun tipo de configuracion especial de windows para que me permita utilizar mas recursos del sistema (memoria, disco, etc). Un dato mas que les puedo dar es que cuando aparece el error y la aplicacion esta mostrando el error, no puedo abrir ningun otro programa (por ejemplo el internet explorer), el internet se empieza a cargar pero queda colgado, lo que me hace suponer que realmente es un problema de memoria o de configuracion de memoria, lo mismo ocurre cuando ejecuto una version del proyecto que funciona, es decir con la cantidad de forms necesario para que se ejecute, pero si quiero ejecutar otra instancia de la aplicación me aperace el mismo error. La solucion a mi problema se podria realizar de dos formas o por lo menos es lo que me parece:
1- Configurar al sistema operativo para que mi aplicacion utilice mas memoria que la que se le asigna a cada programa por defecto.
2- En mi aplicación crear los forms no de la forma por defecto (createform) sino mediande otra forma (getmem, memalloc o algo parecido), de tal forma que se le asigne la memoria necesaria a mi aplicacion desde el principio.

Quizas todo lo que digo esta mal, pero en este momento nose que otra cosa hacer mas que esperar alguna ayuda de ustedes. Muchas gracias.

Última edición por dec fecha: 17-06-2007 a las 22:23:28.
Responder Con Cita
  #2  
Antiguo 18-06-2007
Avatar de sitrico
[sitrico] sitrico is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 295
Poder: 24
sitrico Va por buen camino
No he visto un caso como ese, pero de seguro si te estas quedando sin recursos debes "ahorrarlos" para eso te recomiendo que no crees todos los formularios al cargar la aplicación, mas bien ve creando los formularios a medida que los necesites y los destruyes al concluir.

Lo otro que puedes usar es una directiva de compilador (¿ {$M} ?) que permite indicar la cantidad de memoria asignada a la aplicación, ahora no tengo delphi a mano para conirmarlo pero la directiva existia en turbo pascal 7.

Tambien trata de evitar usar componentes devoradores de memoria (grandes colecciones de datos, arreglos, imagenes, etc).
__________________
Sitrico
Responder Con Cita
  #3  
Antiguo 18-06-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 22
cHackAll Va por buen camino
Cool Epa

Cita:
Empezado por nfrfabian
...form agendadetallada tiene cientos de componentes tedits...
En definitiva es por escaces de memoria física y memoria virtual! al principio me parecia que era más "lindo" hacer formularios con N TEdits modificados por mi que me permitian visualizarlos como "Flats", era alucinante tener un pseudo-grid que reaccionaba de lujo con el movimiento del ratón...

Pero me di cuenta que consumia DEMASIADOS recursos hacer tal cosa... acaso no es posible que cambies tus centenares de TEdits por un DBGrid o algo por el estilo, pues para cada componente insertado en un formulario debe asignar un espacion en memoria y eso es algo costoso si lo multiplicas.

(Para confirmar reduce a la mitad los componentes TEdit creados luego de hacer backup, si funciona debes SIoSI cambiarte a DBGrids), Borralos la mitad, si fueron creados en tiempo de diseño, si fue en tiempo de ejecucion reduce la creacion al 50%. Ademas que debes meter en tu ideologia de diseño un aprovechamiento de los recursos, no digo que no uses nada, pero no exajeres.

PD: Fijate en el "Administrador de tareas" cuánta memoria utiliza tu proyecto.
No dejes de comentarnos pues el tema es interesante.
Saludos!
Responder Con Cita
  #4  
Antiguo 18-06-2007
Avatar de rcarrillom
[rcarrillom] rcarrillom is offline
Miembro Premium
 
Registrado: dic 2004
Ubicación: UK / North Sea / Norway / Golfo de México / Frente a mi Laptop
Posts: 220
Poder: 22
rcarrillom Va por buen camino
Cita:
Empezado por nfrfabian
...tengo varias form hijas, de todas las form hijas hay una que necesito que se repita, es decir tengo un form del tipo fsMDIChild que lo guarde con distintos nombres...
No creo entender muy bien este punto, significa que las muchas forms que generas es la misma EXACTAMENTE pero guardada con nombres de fichero diferentes? Si es así, basta con una sola form diseñada, creas dinámicamente cuantas forms hijas necesites y las destruyes al momento de cerrarlas; claro, debes de implementar un método para guardar los datos de cada agenda por separado. Espero haber sido de ayuda.
__________________
eLcHiCoTeMiDo - Rompecorazones profesional
Yo no soy presumido; ¿Pero de qué sirve mi humilde opinión contra la de los espejos?
Salva a un nylon, usa prendas de piel de foca
Responder Con Cita
  #5  
Antiguo 18-06-2007
nfrfabian nfrfabian is offline
Miembro
 
Registrado: ago 2006
Posts: 55
Poder: 20
nfrfabian Va por buen camino
Hola, gracias por sus consejos. El problema de crear los formularios a medidas que los necesite no me sirve porque necesito todos desde el primer momento porque los uso para mostrar datos de una base de datos, en donde cada formularios muestra informacion de un rango de datos de una tabla: agendadetallada1 muestra registros cuyo campo habitacion esta entre los rangos 1-5, agendadetallada2 registros cuyos campo habitacion esta entre los rangos 6-10, etc.
Utilizo edits y no dbgrid porque ademas de mostrar los datos dependiendo de otros valores de los registros, realizo un formato especial, por ejemplo mostrar los datos de un color diferente dependiendo del valor del campo "ingreso", ademas por cada tedit se disparan ciertos eventos (onchange, onenter, etc.), lo que me obliga a utilizar solo tedits, y no otro tipo de componente (o por lo menos yo no conozco ningun dbgrid que pueda ser formateado de la forma que yo necesito).
Me parece que la solucion podria ser la directiva que mensiono Sitrico {$M} , voy a ver si en la ayuda de delphi aparece algo sobre la misma. Gracias por sus consejos.
Responder Con Cita
  #6  
Antiguo 18-06-2007
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 24
ixMike Va por buen camino
Bueno,

los dbGrids sí se pueden formatear con distintos colores y fuentes incluso. Sólo tienes que añadir unas líneas de código.
Los eventos que usas en los edits se pueden pasar a las distintas celdas de un dbGrid, aunque sea detectando pulsaciones de tecla (como la tabulación) o los clics que hagas en la rejilla.

En fin, creo que currándotelo un poco podrías lograr que tu programa sea tal como tú quieres usando dbGrids.

Saludos.
Responder Con Cita
  #7  
Antiguo 18-06-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
...y si no... echamos manos del VirtualTreeView, con éste se hace todo, encima gratuito con fuentes

Yo la verdad, añadiría una sola ventana agenda, que dado dos números, cargase los datos de la base de datos. Solo se trata de 1 Form, pero en ejecución se crearían tantas ventanas como fuera necesario para mostrar todos los datos.

Tal y como lo haces ahora.... por Dios que no tengas que modificar 1 cosa en todas las ventanas .

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 18-06-2007 a las 20:12:14.
Responder Con Cita
  #8  
Antiguo 18-06-2007
nfrfabian nfrfabian is offline
Miembro
 
Registrado: ago 2006
Posts: 55
Poder: 20
nfrfabian Va por buen camino
Hola, IxMike, si me podes decir en donde puedo buscar como formatear (o que codigo tengo que poner para poder formatear) el dbgrid para que me muestre los datos del dbgrid con distintos colores. Yo, buscando algunas propiedades de los dbgrid, vi que se puede formatear las coluimnas de los dbgrid (color, font), pero yo necesto que el color de fonde cambie, pero no de toda la columna, sino algunas celdas, por ejemplo en la columna "nombre", puedo tener cinco celdas con un color rojo, despues, 3 sin color, despues 10 con un color verde, y todo esto con todas las columnas, ademas estan los eventos que utilizo: onchange, onclick, onenter, onexit, dobleclick, que son distintos, dependiendo del valor de los campos. Me parece que realizar un formato de esa forma a un dbgrid no es posible, quizas se podria realizar con un dbgrid de tercero pero me parece dificil. Si estas seguro que se puede hacer te agradeciria que me digas como lo hago o donde busco esa informacion. Gracias.
Responder Con Cita
  #9  
Antiguo 18-06-2007
nfrfabian nfrfabian is offline
Miembro
 
Registrado: ago 2006
Posts: 55
Poder: 20
nfrfabian Va por buen camino
Gracias Lepe, acabo de instalar el VirtualTreeView y por lo que dice la pagina del creador del VirtualTreeView, es lo que necesito, ahora estoy viendo los tres componente que incluye el VirtualTreeView y aparentemente, el componente que necesito es el virtualstringtree, pero hasta ahora no he podido hacer que se muestren las filas y columnas (supongo que este componente podria funcionar como un stringgrid mejorado), si sabes cual es la propiedad que tengo que modificar, te lo voy a agradecer, sino no importa seguro con un poco de paciencia lo voy a descubrir.
En este momento tengo esperanza que este componente solucione mis problemas. El camino que me queda es muy largo para poder utilizar este componente en vez de mis cientos de tedits (cambiar toda la parte grafica, y las funciones y procedimientos que utilizo para mostrar, borrar, la informacion con los tedits, eventos, etc.).
Lo mas importante es que tengo un punto de partida para resolver mi problema. Te agradesco mucho la ayuda que me diste, al igual que todos los demas, que me dieron algunos consejos. Gracias a todos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Crear proyecto cliente / servidor Aprendiendo Conexión con bases de datos 1 02-01-2006 15:28:49
Crear Instalador para proyecto en Delphi mieltxo Varios 1 14-12-2005 12:05:38
En mi aplicacion MDI quiero crear una ventana hija desde otra ventana hija Durbed Varios 8 05-07-2005 11:51:54
Error en proyecto? danytorres Varios 1 05-12-2003 15:35:29
Como pasar parametros de una forma hija a otra forma hija luisreg OOP 3 17-09-2003 18:18:50


La franja horaria es GMT +2. Ahora son las 00:55:34.


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