PDA

Ver la Versión Completa : Savedialog Access Violation


dmassive
19-02-2009, 18:11:42
Buenos Dias!

Estoy haciendo algunas cosas con Delphi 7 y cuando quiero ejecutar un SaveDialog me da Access Violation:
http://img149.imageshack.us/img149/5117/accessviolationto5.th.jpg (http://img149.imageshack.us/my.php?image=accessviolationto5.jpg)

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
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
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
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.


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:
SaveDialog1 := TSaveDialog.Create(nil);