Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-04-2009
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
Unhappy AccessViolation inexplicable

Hola, me han encargado solucionar un error de una aplicación de Delphi, y la verdad.. por más que pruebo cosas y lo miro, no lo entiendo. Igual porque llevo años sin tocar Delphi, no sé.
El problema es "tan sencillo" como que en la funcion FormCreate intento hacer un ShowMessage y me salta el error de AccesViolation, he probado de no ponerlo,y no da ningún problema, pero es intentar mostrar algo y pam!
En el fichero .dpr tengo lo siguiente:

Código Delphi [-]
begin
  Application.Initialize;
  Application.Title := 'Diccionario crítico etimológico castellano e hispánico';
  Application.HelpFile := 'AYUDA.HLP';
  Application.CreateForm(Tportada, portada);
  if(portada.carga)then begin
       Application.CreateForm(Tcentral, central);
    Application.CreateForm(Tdades, dades);
    Application.CreateForm(Tmultiple, multiple);
    Application.CreateForm(Tllengues, llengues);
    Application.CreateForm(Tdocumentacio, documentacio);
    Application.CreateForm(Tbuscabierta, buscabierta);
    Application.CreateForm(Tabreviaturas, abreviaturas);
    Application.CreateForm(Tnotacionfonetica, notacionfonetica);
    Application.CreateForm(Tintroduccion, introduccion);
    Application.CreateForm(Tfuentescas, fuentescas);
    Application.CreateForm(Tdedicatoria, dedicatoria);
    Application.CreateForm(Tindibiblio, indibiblio);
    Application.CreateForm(Tindicacionesbibliograficas, indicacionesbibliograficas);
    Application.CreateForm(Tabreviaturastxt, abreviaturastxt);
    Application.CreateForm(Tpopuplema, popuplema);
    Application.CreateForm(Tcredits, credits);
    Application.CreateForm(Tmapagrafies, mapagrafies);
    Application.CreateForm(Tcarga, carga);
    Application.Run;
  end;

He probado comentandolo todo y dejando solo el FormCreate de la portada,y NADA!


Y la función del FormCreate es la siguiente:

Código Delphi [-]
procedure Tportada.FormCreate(Sender: TObject);
var unidad:string;
begin
 carga := false;
 unidad:=GetFirstCdRomDrive;
 if not IsDiskIn(unidad[1]) then begin
   carga := false;
   Showmessage('hola');
 end else begin
   descomprimir();
 end;
end;

No sé si necesitáis alguna información más.. si no me explico o hay algo que no se entiende, por favor, comunicadmelo y me explicaré encantada.
Espero que me deis algún tipo de solución,pq la verdad es que ya no sé que probar!!
Gracias de antemano, un saludo!

Última edición por dec fecha: 02-04-2009 a las 12:05:12.
Responder Con Cita
  #2  
Antiguo 02-04-2009
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Pon puntos de ruptura y ejecuta paso a paso. En cuanto localices la línea, localizarás el error.

De todas formas, ahí estáis creando muchas ventanas. Lo mejor es crear sólo las más utilizadas y el resto dejarlas hasta el momento preciso en el que tienes que utilizarlas, destruyéndolas en cuanto no se necesiten.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 02-04-2009
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
Antetodo, gracias por la respuesta. Lo de debugar punto por punto lo he hecho infinitas veces, y el problema es que el error salta donde pongo el ShowMessage (lo ponga antes o después).
También he probado de crear únicamente la portada, pero ni así! Aunque solo tenga esto de Application.CreateForm(Tportada, portada); tampoco funciona.

Q desesperación...
Responder Con Cita
  #4  
Antiguo 02-04-2009
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Bueno, como usted ya hizo varios testes y hasta ahora nada, intenta poner el Form Portada para crear por el ultimo y no como el primer como se ve.
Responder Con Cita
  #5  
Antiguo 02-04-2009
Davidcfres Davidcfres is offline
Miembro
 
Registrado: ago 2007
Ubicación: Francia
Posts: 10
Poder: 0
Davidcfres Va por buen camino
Intenta eso :

no utilizas FormCreate pero override el Create de Form
y, depues del inherited creo que podras hacer un showmessage...


Código Delphi [-]

TForm4 = class(TForm)
  public
   { Déclarations publiques }
    constructor Create(AOwner: TComponent); override;
   end;

(...)

constructor TForm4.Create(AOwner: TComponent);
begin
  inherited;
  showmessage('OK');
end;

no sé si va a resolver tu problema, pero es una pista

David

Última edición por Davidcfres fecha: 02-04-2009 a las 17:28:55.
Responder Con Cita
  #6  
Antiguo 02-04-2009
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Hola, en el ejemplo pones la línea:
Código Delphi [-]
ShowMessage('Hola');
Sin embargo, no te creo que este sea el código real que estás utilizando. Dejame suponer que intentas mostrar el contenido de alguna propiedad de un objeto o bien el contenido de alguna variable. Si es así, entonces debe ser que el objeto->propiedad / variable no ha sido inicializado.

Revisa que la variables que muestra esté inicializada.

Saludos.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #7  
Antiguo 02-04-2009
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
D&W, El contenido del ShowMessage no es real, el texto real es algo así como: Introduzca el CD correcto. Pero la funcionalidad es la misma.

Davidcfres, muchas gracias por la respuesta, voy a probar aver si funciona y te digo algo Merci
Responder Con Cita
  #8  
Antiguo 02-04-2009
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
Davidcfres, acabo de probar lo que me has dicho, pero no sé si hago algo mal, me sale un error de: EReadError with message 'Invalid property value' quan se ejecuta lo siguiente: Application.CreateForm(Tportada, portada);
No sé si es que esto lo tengo que quitar o qué puedo estar haciendo mal.
Responder Con Cita
  #9  
Antiguo 02-04-2009
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
He probado quitando la propiedad "inherited" y me muestra el ShowMessage correctamente! Pero al darle a OK en el ShowMessage me sale el error:
Exception EAccesViolation in module dech.exe at 00000000. Acces violation at address 00000000. Read of address 00000000.
Alguna solución?? Graciaaas!!
Responder Con Cita
  #10  
Antiguo 02-04-2009
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por nena_yei Ver Mensaje
D&W, El contenido del ShowMessage no es real, el texto real es algo así como: Introduzca el CD correcto. Pero la funcionalidad es la misma.
Entonces tu código original es correcto y no debería presentar ningún problema. Revisa la declaración de la función ShowMessage. Puede que alguna de las unidades declaradas en el USES implemente una función con un nombre similar y está sea la razón del problema. La unidad debería estar declarada en la unidad Dialogs.pas. Si es otra, entonces por ahí es donde está el problema.

También puedes intentar hacer el llamado al ShowMessage en algún otro lado del formulario, por ejemplo colocando un botón temporal y en el evento OnClick llamar al ShowMesage('Hola').
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #11  
Antiguo 02-04-2009
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
He probado otras formas para mostrar mensajes y tampoco funcionan,así que no puede ser problema del ShowMessage. No puedo poner esta llamada en el formulario porque si el cd no esta en la unidad D no se abrirá el formulario.
Qué kaos tengo!! Gracias por contestar D&W
Responder Con Cita
  #12  
Antiguo 02-04-2009
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cuando vale la pena, es mejor botar el código antes de intentar depurarlo. por eso, te proporciono un código mejor para hacer lo que intentas:
Código Delphi [-]
begin
  Application.Initialize;
  Application.Title := 'Diccionario crítico etimológico castellano e hispánico';
  Application.HelpFile := 'AYUDA.HLP';

  // La portada no hará ningun tipo de lógica. Se evaluará el contenido
  // del CD en esta sección de inicio.
  Application.CreateForm(Tportada, portada);

  unidad:=GetFirstCdRomDrive; // TODO: definir la variable unidad como string, supongo.

  while not isDiskIn(unidad[1]) then
  begin
    // TODO: Definir la variable "cancel_load" como Boolean
    cancel_load := (MessageBox(application.Handle,
                               'Introduzca el CD correcto',
                               'pon un titulo acá', MB_RETRYCANCEL) = IDCANCEL);

    if cancel_load then
      break;
  end;


  if not cancel_load then
  begin
    descomprimir();
    Application.CreateForm(Tcentral, central);
    Application.CreateForm(Tdades, dades);
    Application.CreateForm(Tmultiple, multiple);
    Application.CreateForm(Tllengues, llengues);
    Application.CreateForm(Tdocumentacio, documentacio);
    Application.CreateForm(Tbuscabierta, buscabierta);
    Application.CreateForm(Tabreviaturas, abreviaturas);
    Application.CreateForm(Tnotacionfonetica, notacionfonetica);
    Application.CreateForm(Tintroduccion, introduccion);
    Application.CreateForm(Tfuentescas, fuentescas);
    Application.CreateForm(Tdedicatoria, dedicatoria);
    Application.CreateForm(Tindibiblio, indibiblio);
    Application.CreateForm(Tindicacionesbibliograficas, indicacionesbibliograficas);
    Application.CreateForm(Tabreviaturastxt, abreviaturastxt);
    Application.CreateForm(Tpopuplema, popuplema);
    Application.CreateForm(Tcredits, credits);
    Application.CreateForm(Tmapagrafies, mapagrafies);
    Application.CreateForm(Tcarga, carga);
    Application.Run;
  end;
end;

De esta forma, el código del evento FormCreate de la portada ya no será necesario y puedes eliminarlo.

Saludos.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #13  
Antiguo 03-04-2009
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
Muchas gracias D&W, esto tenía muy buena pinta! He puesto el código que me has dicho y me salta el error de "EReadError Invalid property value" al ejecutarse Application.CreateForm(Tportada, portada); No lo entiendoo No hay otra manera de generar la portada que no sea así o algo? Si quito esta sentencia, evidentemente,no funcionará no? Ya que no podré acceder a las funciones que estan allí dentro y demás..
Graciass de nuevo, ojalá tengáis otra solución. Un saludo
Responder Con Cita
  #14  
Antiguo 03-04-2009
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
El EReadError, Invalid property value normalmente es generado cuando alguna propiedad del formualario o un control dentro de éste tiene alguna propiedad con un valor no permitido. Intenta abrir el formulario en delphi (en modo edición). Si no te da ningún problema, entonces puedes tratar de comentar temporalmente todo el código del form. y luego ir depurando para ver que es lo que pasa.

Saludos.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
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
Error AccessViolation CarlosHernandez Varios 3 22-09-2008 10:18:57
Error inexplicable chipsoni Impresión 3 11-01-2007 17:36:49
RaveReport AccessViolation raugadel Impresión 0 03-11-2005 15:32:56
Problema Inexplicable Con Una Consulta carlos gonzalez Conexión con bases de datos 4 12-05-2005 11:27:29
Problema... ¿inexplicable? jadelphi Varios 3 20-04-2005 17:57:33


La franja horaria es GMT +2. Ahora son las 01:03:29.


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