Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Código de error - Access violation at address 0044p983 in module 'Project1.exe'. (https://www.clubdelphi.com/foros/showthread.php?t=69442)

P0werBurn 18-08-2010 17:20:28

Código de error - Access violation at address 0044p983 in module 'Project1.exe'.
 
Hola a todos!

Bueno, estaba planteándome hacer una especie de programa, para asimilar los conceptos de los cuadros de mensaje.

El programa consistía en algo así como en un "archivador" para tener todos los apuntes ordenados.

Antes de pasar a hacer eso hice algo más fácil:

Al pulsar un botón en el formulario que se abriera otro, con un texto escrito por mí. Sería algo así como cuando pulsas en un programa el botón "Acerca de..." que se abre una ventana con todo sobre el creador del programa, la compañía...

El código es este:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
uses unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
form2.ShowModal;
end;

end.

Le tuve que añadir en implemetation Uses unit2;, y según he leído por todas partes al intentar solucionar el problema eso está bien.

El problema empieza al PULSAR EL BOTÓN, que me sale el siguiente error.

Access violation at address 0044p983 in module 'Project1.exe'. Read of adress 00000000

He revisado el código mil y una veces, pero no consigo saber cuál es el problema.

Un saludo,

P0werBurn.

P0werBurn 18-08-2010 17:27:03

PD: También añado que busqué el código de error en Google y no encontré nada...

delphi.com.ar 18-08-2010 17:27:50

Y la pregunta del millón... ¿Quién creó la instancia de TForm2?

Si no tienes puesto que tu proyecto cree automáticamente al inicio los formularios, cosa que no recomiendo, tienes que encargarte de crear la instancia del mismo. Es un error típico de los programadores en VB cuando migran a Delphi, ya que en VB no queda claro quien crea los formularios, con solo llamarlos se crean.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  if form2 = nil then
    form2 := TForm2.Create(self);

  form2.ShowModal;
end;

Saludos!

P0werBurn 18-08-2010 17:32:20

Cita:

Empezado por delphi.com.ar (Mensaje 373846)
Y la pregunta del millón... ¿Quién creó la instancia de TForm2?

Si no tienes puesto que tu proyecto cree automáticamente al inicio los formularios, cosa que no recomiendo, tienes que encargarte de crear la instancia del mismo. Es un error típico de los programadores en VB cuando migran a Delphi, ya que en VB no queda claro quien crea los formularios, con solo llamarlos se crean.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  if form2 = nil then
    form2 := TForm2.Create(self);

  form2.ShowModal;
end;

Saludos!

Gracias!
Ahora lo pruebo y te digo:)

P0werBurn 18-08-2010 17:35:47

Perfecto!

Gracias, gracias, y gracias. Le cuento el posible problema:

estoy estudiando un curso de hace ya varios años (de 1997, para ser exactos), y usa delphi 2.0.

Hasta ahora me ha ido bien, pero aquí habrá dado algún problema.

Muchas gracias,

P0werBurn.

AzidRain 18-08-2010 18:26:52

Como apunte, siempre que te salga este error, se trata del mismo problema algún objeto que utilizas sin crearlo previamente. Aqui tienes otra forma sencilla de manipular forms sin tener que utilizar una variable:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  With TForm2.Create(nil) Do   //aquí creas el objeto
  Try
     ShowModal;  //aquí lo usas (en este caso solo lo muestras)
  finally
     free;  // Y aquí lo liberas cuando ya lo usaste
  end;
end;


La franja horaria es GMT +2. Ahora son las 00:17:11.

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