Access Violation - POO
Estou fazendo minha classe, tentando aprender e a janela de splash mostra, tudo funciona até ela ter que sumir.
Vem o erro de access violation.
Provavelmente estou acessando algo já destruído ou algo de maneira errada.
Quem poder ajudar, obrigado desde já
/====== onde eu chamo ela pra aparecer como splash =====\
program Clinica;
uses
Forms,
uprinc in 'forms\uprinc.pas' ,
uclientes in 'classes\uclientes.pas',
Uconexao in 'classes\Uconexao.pas';
{$R *.res}
var
bd : Tconexao;
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(Tfprinc, fprinc);
bd.conectar(fprinc.ib, fprinc.t, 'SYSDBA', 'masterkey');
Application.Run;
end.
/=========== classe de conexão ===========================\
unit Uconexao;
interface
uses
Variants, Classes, Graphics, Controls, ExtCtrls, Windows, Messages, SysUtils, IniFiles, DB, IBCustomDataSet, Dialogs, IBQuery, IBDatabase,
DBClient, Provider, StdCtrls, Jpeg, ComCtrls, IBScript, forms;
type Tconexao = class
protected
login, senha : String;
public
constructor conectar(ib:TIBDataBase; T:TIBTransaction; const Login, senha:STring );
destructor fim;
end;
implementation
destructor tconexao.fim;
begin
end;
constructor tconexao.conectar (ib:TIBDataBase; T:TIBTransaction; const Login, senha:STring);
var ArquivoINI : TIniFile;
str_server,str_path,str_filename,str_protocol :string;
janela_splash : TForm;
imagem: TImage;
prog : Tprogressbar;
sts : TLabel;
begin
inherited Create;
try
janela_splash := tform.create(nil);
imagem:= TImage.create(janela_splash);
prog := tprogressbar.Create(janela_splash);
sts := TLabel.Create(janela_splash);
imagem.parent:= janela_splash;
imagem.Width:=300; imagem.Height:=200;
imagem.Top:= 3; imagem.Left:=3;
imagem.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'imgs\splash.jpg' );
imagem.Stretch:=true;
imagem.AutoSize:= true;
imagem.BringToFront;
imagem.Visible:=true;
sts.Top:= 340; sts.Left:= 10;
sts.BringToFront;
sts.Parent:= janela_splash;
sts.AutoSize:=false;
sts.Width:= 300; sts.Height:= 20;
sts.Caption:= 'Iniciando sistema - Futtura - 2013';
prog.Top:= 363; prog.Left:= 3;
prog.Width:= 423; prog.Height:= 20;
prog.Parent:= janela_splash;
prog.Min:=0; prog.Max:= 3;
janela_splash.Position:= poScreenCenter;
janela_splash.FormStyle:=fsnormal;
janela_splash.BorderStyle:= bsnone;
janela_splash.BorderIcons:=[biMaximize];
janela_splash.Width:= 430; janela_splash.Height:=390; //245
janela_splash.Update;
janela_splash.Caption:= 'Futtura Softwares';
janela_splash.show;
application.ProcessMessages;
ib.Connected:=false;
if (fileexists(ExtractFilePath(Application.ExeName)+ '\Config.ini')) then
ArquivoINI := TIniFile.Create(ExtractFilePath(Application.ExeName)+ '\Config.ini')
else begin
sts.Font.Color:=clRed;
sts.Caption:= 'ERRO...[ .ini não encontrado ]';
sts.Update;
sleep(4000);
application.Terminate; exit;
end;
sleep(2000);
sts.Caption:='(1/3) - Arquivos de inicialização carregados';
sts.Update;
prog.Position:= prog.Position + 1;
sleep(400);
str_server := ArquivoINI.ReadString('NET','SERVER','');
str_protocol := ArquivoINI.ReadString('NET','CONNECTION_PROTOCOL','');
str_path := ArquivoINI.ReadString('FIREBIRD','SERVER_PATH','');
str_filename := ArquivoINI.ReadString('FIREBIRD','FILE_NAME','');
sts.Caption:='(2/3) - Abrindo parâmetros';
sts.Update;
prog.Position:= prog.Position + 1;
sleep(400);
if str_protocol = 'TCP/IP' then
ib.DatabaseName := str_server+':'+str_path+str_filename;
if str_protocol = 'NETBEUI' then
ib.DatabaseName := '\\'+str_server+'\'+str_path+str_filename;
if str_protocol = 'SPX' then
ib.DatabaseName := str_server+'@'+str_path+str_filename;
if str_protocol = 'LOCAL' then
ib.DatabaseName := str_path+str_filename;
ib.LoginPrompt:=false;
ib.Params.Values['User_Name']:=login;
ib.Params.Values['Password']:=senha;
sts.Caption:='(3/3) - Aguardando conexão com banco ';
try
ib.Connected:=true;
t.StartTransaction;
except
on E : Exception do begin
sts.Font.Color:=clRed;
sts.Caption:= 'ERRO...[ banco não encontrado: ' + str_path+str_filename+' ]';
sts.Update;
sleep(4000);
application.Terminate; exit;
end;
end;
sts.Update;
prog.Position:= prog.Position + 1;
sleep(400);
sts.Caption:= 'Carregando modo gráfico';
sts.Update;
sleep(400);
except
sts.Font.Color:=clRed;
sts.Caption:= 'ERRO...[ Parâmetros inválidos ]';
sts.Update;
sleep(4000);
application.Terminate; exit;
end;
end;
end.
Vem o erro de access violation.
Provavelmente estou acessando algo já destruído ou algo de maneira errada.
Quem poder ajudar, obrigado desde já
/====== onde eu chamo ela pra aparecer como splash =====\
program Clinica;
uses
Forms,
uprinc in 'forms\uprinc.pas' ,
uclientes in 'classes\uclientes.pas',
Uconexao in 'classes\Uconexao.pas';
{$R *.res}
var
bd : Tconexao;
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(Tfprinc, fprinc);
bd.conectar(fprinc.ib, fprinc.t, 'SYSDBA', 'masterkey');
Application.Run;
end.
/=========== classe de conexão ===========================\
unit Uconexao;
interface
uses
Variants, Classes, Graphics, Controls, ExtCtrls, Windows, Messages, SysUtils, IniFiles, DB, IBCustomDataSet, Dialogs, IBQuery, IBDatabase,
DBClient, Provider, StdCtrls, Jpeg, ComCtrls, IBScript, forms;
type Tconexao = class
protected
login, senha : String;
public
constructor conectar(ib:TIBDataBase; T:TIBTransaction; const Login, senha:STring );
destructor fim;
end;
implementation
destructor tconexao.fim;
begin
end;
constructor tconexao.conectar (ib:TIBDataBase; T:TIBTransaction; const Login, senha:STring);
var ArquivoINI : TIniFile;
str_server,str_path,str_filename,str_protocol :string;
janela_splash : TForm;
imagem: TImage;
prog : Tprogressbar;
sts : TLabel;
begin
inherited Create;
try
janela_splash := tform.create(nil);
imagem:= TImage.create(janela_splash);
prog := tprogressbar.Create(janela_splash);
sts := TLabel.Create(janela_splash);
imagem.parent:= janela_splash;
imagem.Width:=300; imagem.Height:=200;
imagem.Top:= 3; imagem.Left:=3;
imagem.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'imgs\splash.jpg' );
imagem.Stretch:=true;
imagem.AutoSize:= true;
imagem.BringToFront;
imagem.Visible:=true;
sts.Top:= 340; sts.Left:= 10;
sts.BringToFront;
sts.Parent:= janela_splash;
sts.AutoSize:=false;
sts.Width:= 300; sts.Height:= 20;
sts.Caption:= 'Iniciando sistema - Futtura - 2013';
prog.Top:= 363; prog.Left:= 3;
prog.Width:= 423; prog.Height:= 20;
prog.Parent:= janela_splash;
prog.Min:=0; prog.Max:= 3;
janela_splash.Position:= poScreenCenter;
janela_splash.FormStyle:=fsnormal;
janela_splash.BorderStyle:= bsnone;
janela_splash.BorderIcons:=[biMaximize];
janela_splash.Width:= 430; janela_splash.Height:=390; //245
janela_splash.Update;
janela_splash.Caption:= 'Futtura Softwares';
janela_splash.show;
application.ProcessMessages;
ib.Connected:=false;
if (fileexists(ExtractFilePath(Application.ExeName)+ '\Config.ini')) then
ArquivoINI := TIniFile.Create(ExtractFilePath(Application.ExeName)+ '\Config.ini')
else begin
sts.Font.Color:=clRed;
sts.Caption:= 'ERRO...[ .ini não encontrado ]';
sts.Update;
sleep(4000);
application.Terminate; exit;
end;
sleep(2000);
sts.Caption:='(1/3) - Arquivos de inicialização carregados';
sts.Update;
prog.Position:= prog.Position + 1;
sleep(400);
str_server := ArquivoINI.ReadString('NET','SERVER','');
str_protocol := ArquivoINI.ReadString('NET','CONNECTION_PROTOCOL','');
str_path := ArquivoINI.ReadString('FIREBIRD','SERVER_PATH','');
str_filename := ArquivoINI.ReadString('FIREBIRD','FILE_NAME','');
sts.Caption:='(2/3) - Abrindo parâmetros';
sts.Update;
prog.Position:= prog.Position + 1;
sleep(400);
if str_protocol = 'TCP/IP' then
ib.DatabaseName := str_server+':'+str_path+str_filename;
if str_protocol = 'NETBEUI' then
ib.DatabaseName := '\\'+str_server+'\'+str_path+str_filename;
if str_protocol = 'SPX' then
ib.DatabaseName := str_server+'@'+str_path+str_filename;
if str_protocol = 'LOCAL' then
ib.DatabaseName := str_path+str_filename;
ib.LoginPrompt:=false;
ib.Params.Values['User_Name']:=login;
ib.Params.Values['Password']:=senha;
sts.Caption:='(3/3) - Aguardando conexão com banco ';
try
ib.Connected:=true;
t.StartTransaction;
except
on E : Exception do begin
sts.Font.Color:=clRed;
sts.Caption:= 'ERRO...[ banco não encontrado: ' + str_path+str_filename+' ]';
sts.Update;
sleep(4000);
application.Terminate; exit;
end;
end;
sts.Update;
prog.Position:= prog.Position + 1;
sleep(400);
sts.Caption:= 'Carregando modo gráfico';
sts.Update;
sleep(400);
except
sts.Font.Color:=clRed;
sts.Caption:= 'ERRO...[ Parâmetros inválidos ]';
sts.Update;
sleep(4000);
application.Terminate; exit;
end;
end;
end.
Adib Valentim
Curtidas 0
Melhor post
Joel Rodrigues
30/05/2014
Rapaz, o ideal seria você depurar sua aplicação para ver exatamente onde está dando o erro.
GOSTEI 1