Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Savedialog Access Violation (https://www.clubdelphi.com/foros/showthread.php?t=63571)

dmassive 19-02-2009 18:11:42

Savedialog Access Violation
 
Buenos Dias!

Estoy haciendo algunas cosas con Delphi 7 y cuando quiero ejecutar un SaveDialog me da Access Violation:


No encuentro como solucionarlo, asi que adjunto los archivos del proyecto, que solo tiene un Formulario con un TBitBtn y lo demas va por codigo:

unitexterna2.dpr
Código Delphi [-]
program unitexterna2;

uses
  Forms,
  UnitMain in 'UnitMain.pas' {FormMain},
  UnitAccion in 'UnitAccion.pas';

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TFormMain, FormMain);
  Application.Run;
end.

UnitMain.pas
Código Delphi [-]
unit UnitMain;

interface

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

type
  TFormMain = class(TForm)
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormMain: TFormMain;

implementation

Uses UnitAccion;

{$R *.dfm}

procedure TFormMain.BitBtn1Click(Sender: TObject);
Var
   Accion : TClaseAccion;
begin
     Accion := TClaseAccion.Create;
     Accion.hacelo;
end;

end.

UnitAccion.pas
Código Delphi [-]
unit UnitAccion;

interface

Uses Dialogs;

type
    TClaseAccion = class
         SaveDialog1 : TSaveDialog;
         procedure hacelo;
    end;
    
implementation

procedure TClaseAccion.hacelo;
var
   URL : string;
begin
     URL := InputBox('Ir a URL', 'Ingrese URL completa', '');
     if URL = '' then Exit;

     if not SaveDialog1.Execute then Exit;
end;

end.

Al momento de llamar "SaveDialog1.Execute" salta la ecepcion, ¿Que estara pasando? :confused:

Muchas Gracias!

dec 19-02-2009 18:16:26

Hola,

A simple vista parece que no estás creando el objeto. La variable "SaveDialog1" es del tipo que tú necesitas, pero, no la inicializas, no contiene una instancia de la clase "TSaveDialog", y así, cuando tratas de usarla, no es posible. La solución pasa por crear el objeto de la clase "TSaveDialog" en la variable "SaveDialog1". Puedes hacerlo en el mismo método "hacelo()", o bien utilizar un método "constructor" en la clase "TClaseAccion". No sé cómo lo ves. ;)

Caro 19-02-2009 18:24:28

Hola, lo mismo digo yo, te falta la creación de tu objeto SaveDialog1.

Código Delphi [-]
 SaveDialog1 := TSaveDialog.Create(Self);

Saluditos

dmassive 19-02-2009 23:51:53

Gracias! Efectivamente era eso, pero como no me dejaba hacer (self) lo habia descartado, asi que queda asi:
Código Delphi [-]
SaveDialog1 := TSaveDialog.Create(nil);


La franja horaria es GMT +2. Ahora son las 08:21:44.

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