FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Error al cargar formularios con TFrm_name.Create(self)
Buenas comunidad,
Luego de pasar un buen rato buscando en el foro algún problema similar al mío decidí iniciar este hilo. Siempre cuando me enfrento a problemas que desconozco abro un nuevo proyecto en blanco y hago test. Uso Delphi 7 enterprise form1(uni1)main
form2(unit2)
form3(unit3)
Cuando le hago click al boton que esta en el form3, error.
ESCENARIO 01 auto-create forms : form1 available forms : form2,form3 Error, muestra el mensaje de error: ...raised exception class EAccessViolation... Access violation at address... ESCENARIO 02 auto-create forms : form1,form2,form3 available forms : ninguno No muestra ningun mensaje de error, pero el valor que paso del form3 al form2, no funciona. ESCENARIO 03 auto-create forms : form1,form2, available forms : form3 Quito y dejo de llamar al form2 con with TForm2.Create(Self) do... y más bien llamo al form2 con form2.ShowModal y todo funciona bien, ya no hay errores y el valor del form3 se pasa correctamente al form2. PREGUNTAS 01 ¿Porque el error del escenario 01? 02 ¿Es valido trabajar de la forma mostrada en el escenario 03? 03 ¿Es propenso a errores pasar los datos así directamente, cual es la forma ideal? -form2.edit1.text, o crear una variable publica. Para guardar ahí el dato y luego volver a asignarlo desde donde se requiera. --- Soy nuevo en el foro, y volviendo a usar Delphi 7 después de 10 años. Me entero que Delphi esta en la versión 10 Seatle, al leer a todos mencionar que usan XE, X3, etc yo siento que estoy usando una herramienta ya obsoleta (aunque no lo creo, algo me dice que Delphi 7 no esta mal y yo feliz), he leído que Delphi 8 es el comienzo a .NET y de ahí para adelante hubieron muchos cambios. Tengo muchas dudas, que las haré en su momento y en los lugares respectivos. Saludos y gracias. |
#2
|
||||
|
||||
Si haces un paso-a-paso entenderas el error del escenario 1. Los otros son variaciones del 1 y el porque si/no saca error te debe quedar claro si haces el paso-a-paso.
--- Con respecto a las versiones de Delphi: Usa la ultima de poder (que es la recomendación estándar sobre cualquier herramienta). Lo unico es que Delphi 8 fue un experimento fallido y no hay Delphi para .NET. Lo mas cercano es http://www.elementscompiler.com/elem...e/default.aspx
__________________
El malabarista. |
#3
|
|||
|
|||
Gracias, mamcx.
Será que estoy días, metido frente a la computadora. Recordando y volviendo a entender sobre muchas cosas. Necesito desarrollar una aplicación (beta) y estoy a contra reloj, en el 2005 leí casi al completo la cara oculta de Delphi 6 un gran libro por cierto. Y si voy a tener que documentarme mucho sobre .create(self), nil, etc. De momento estoy haciendo algo que funcione, a nivel beta luego tendré que volver a hacer optimizando y mejorando por iteraciones. Expuse mi problema, porque se que hay alguien experimentado que viendo ese código en 5 seg, daría con ese error, justo antes de tener este problema tuve otro con las consultas sql y los tipos de datos, luego antes con los commit de las transacciones, es gracioso pero avanzo un poco y paralizado con algún problema que escapa a mi entendimiento, claro eso es momentáneo porque se resuelven uno a uno, el problema que plantee en este hilo lo estoy rodeando y sigo adelante pero es algo que tengo que entender. Confío en que alguien con un poco de tiempo y buen humor se de el tiempo de explicar sobre el problema del escenario 01. Seguramente yo lo responderé también, pero cuando entienda el porque del error. Una vez más gracias. mamcx. |
#4
|
||||
|
||||
Consejo de amigo: No uses el with. Te aviso ahora con tiempo antes de que vayas por la mitad de tu aplicacion
|
#5
|
||||
|
||||
Creo que el problema del escenario 1 se explica por si mismo:
Aquí etás creando un objeto de la clase TForm2, pero ¿Es la variable Form2? Yo creo que no, sino que es una creada al vuelo por Delphi. En los otros escenarios no te da porque al ser formularios "Autocreate"... ¡¡¡ La variable Form2 se está creando al vuelo !!! Asi debería funcionar:
Saludos |
#6
|
||||
|
||||
Como dice, ElKurgan
El error es porque estas creando la clase TFrom2 y TFrom3 pero no el objecto de la variable que es Form2 o Form3. Estas creando en memoria la clase de TFrom2 o TFrom3 pero el nombre del objecto no es Form2 o Form3, es uno que delphi le ha dado por defecto, como por ejemplo, Form2_1 o Form3_1, pero estos objectos que ha creado delphi no lo puedes utilizar porque no existen, sólo es interno del TFrom2 o TFrom3 al crear su clase. Yo utilizo mucho, pero mucho los with, pero si estas empezando con el with tienes que entender su funcionamento, si no sabe como es su comportamiento, te recomiendo que lo utilices poco a poco, amenos que sepas como funciona. Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber. Última edición por olbeup fecha: 21-10-2015 a las 08:48:21. |
#7
|
|||
|
|||
Cita:
Si lo explicas de esa forma tan clara, es cómo para no olvidarlo nunca jamas. Si leí en otros post del foro hablaban de hacer referencia a variables que no existen. Se que me falta mucho por leer y tengo tanto que aprender. Muchas gracias, no sabes cuanto te lo agradezco. Gracias por tu tiempo. |
#8
|
|||
|
|||
Cita:
Respecto a los with, no leí documentación al respecto. Pero deduje que se usa para simplificar, ya me documentaré más, Muchas gracias. |
#9
|
||||
|
||||
Efectivamente, el with es muy utilizado para simplificar. Pero hay que tener cuidado con su uso.
Por ejemplo, si sabes que una porción de código no es propensa a fallos lo puedes usar sin problemas. Pero como tengas que depurar ese trozo para ver lo que está pasando, la ayuda del depurador no sabe resolver las variables que están dentro de dicho with. Aunque hay trucos para que funcione, es mejor no usarlo cuando no tengas las cosas muy claras Saludos |
#10
|
|||
|
|||
Cita:
Gracias ElKurgan! |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Diferencia de crear formularios con Create(self) y con Application.CreateForm | Lizette | Varios | 4 | 30-03-2009 08:46:44 |
DataModule.Create Error | Enan0 | Varios | 4 | 23-09-2008 15:13:16 |
error en create function | lookmydoom | MySQL | 0 | 12-01-2007 04:20:59 |
Cargar formularios en un TPanel | PTW | Varios | 2 | 24-05-2005 13:08:21 |
error en el create table | xerkan | Firebird e Interbase | 3 | 07-10-2003 15:43:24 |
|