Ver Mensaje Individual
  #6  
Antiguo 16-06-2013
beginner01 beginner01 is offline
Miembro
NULL
 
Registrado: mar 2011
Ubicación: República Dominicana
Posts: 181
Reputación: 14
beginner01 Va por buen camino
Cita:
Empezado por joseprad Ver Mensaje
Hola Nelson.

Te adjunto el código completo del Form8

Código Delphi [-]
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, JfLabel, JfButtons, ExtCtrls;

type
  TForm8 = class(TForm)
    btoIniciar: TJfBitBtn;
    btoParar: TJfBitBtn;
    lbl1: TLabel;
    procedure btoIniciarClick(Sender: TObject);
    procedure btoPararClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TReloj = class(TThread)
  private
    Hora: Integer;
    Salir: Boolean;
    procedure ActualizaTexto;
  protected
    procedure Execute; override;
    procedure Terminar;
  end;

var
  Form8: TForm8;
  Reloj: TReloj;
  Corriendo: Boolean;

implementation

{$R *.dfm}
{ TReloj }

procedure TReloj.ActualizaTexto;
begin
  Form8.lbl1.Caption:=IntToStr(Hora);
end;

procedure TReloj.Execute;
begin
  Salir := False;
  Hora := 0;
  while not Salir do begin
    Synchronize(ActualizaTexto);
    sleep(1000);
    inc(Hora);
  end;
end;

procedure TReloj.Terminar;
begin
  Salir := true;
end;

procedure TForm8.btoIniciarClick(Sender: TObject);
begin
  if not Corriendo then begin
    Reloj := TReloj.Create(False);
    Corriendo := true;
  end;

end;

procedure TForm8.btoPararClick(Sender: TObject);
begin
  if Corriendo then begin
    Reloj.Terminar;
    Reloj.Free;
    Corriendo := False;
  end;
end;

procedure TForm8.FormCreate(Sender: TObject);
begin
  Corriendo := False;
end;

end.

Este programa que no es mas que un contador, funciona perfectamente.

Pero si lo arranco desde otro programa con:

Código Delphi [-]
with TForm8.Create(self) do begin
   ShowModal;
   Free;
end;

entonces me da el error.

Saludos

Hola.

Si te fijas en el código en rojo estas utilizando la variable Form8 que hace referencia a la clase TForm8, a la cual no le estas asignando ningún valor por lo que tiene un valor nil o nulo y si intentas hacer referencia a esta (invocar métodos o acceder a sus propiedades) Delphi te devolverá un error "Acces Violation". Una solución para tu caso es asignarle la referencia del formulario creado para que puedas acceder a él.
Código Delphi [-]
  {
  Creamos el formulario y le asignamios la referencia a la variable Form8.
  }
  Form8 := TForm8.Create(self);
  with Form8 do
  try
     ShowModal;
  finally
     Free;
  end;


try..finally
Responder Con Cita