Erro na criação de classes

Delphi

11/04/2013

Olá rapaziada, tenho uma classe que gerencia a conexão com o banco
bem genérica, chamo ela ao criar o form e ela lê o .ini e se conecta com o banco.
até aqui tudo tranquilo e funcionando.
Queria colocar uma imagem nela dizendo "Processando..." enquando não dou o conected no DataBase;
algo desse tipo.

Criei uma Unit chamada Usplash, uma classe de splash
e dentro uma imagem : TImage;
passo os paramentros para a imagem, o caminho onde está a imagem escrito processando
só que ao chamar ela na classe de conexão dá um erro de violação

Estou deixando as duas classes aqui conforme estava tentando.
Se alguma boa alma entender o erro, me ajuda aí.
Agradecido!



************* CLASSE DE CONEXÃO *******************

unit Uconexao;

interface
uses
Variants, Classes, Graphics, Controls, ExtCtrls, Windows, Messages, SysUtils, IniFiles, DB, IBCustomDataSet, Dialogs, IBQuery, IBDatabase,
DBClient, Provider, Usplashs, IBScript, forms;


type Tconexao = class
protected
telasplash : Tsplash;
public
constructor conectar(ib:TIBDataBase; T:TIBTransaction);
destructor fim;
end;

implementation


destructor tconexao.fim;
begin

end;

constructor tconexao.conectar (ib:TIBDataBase; T:TIBTransaction);
var ArquivoINI : TIniFile;
str_server,str_path,str_filename,str_protocol :string;
begin
telasplash := tsplash.create();
try

ib.Connected:=false;
ArquivoINI := TIniFile.Create(ExtractFilePath(Application.ExeName)+ '\Config.ini');
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','');
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.Connected:=true;
t.StartTransaction;
except
ShowMessage('Erro de conexão com o banco: ' + str_path + str_filename);
end;

end;
end.





************ CLASSE DE SPLASH ******************




unit usplashs;

interface
uses
Variants, Classes, Graphics, Controls, ExtCtrls, Windows, Messages, SysUtils, IniFiles, DB, IBCustomDataSet, Dialogs, IBQuery, IBDatabase,
DBClient, Provider, IBScript, forms;

type tsplash = class(Tform)
protected
imagem: TImage;
public
constructor create();
end;


implementation
constructor tsplash.create();
begin
imagem.Visible:=false;
imagem.Picture.LoadFromFile( Application.ExeName+'img\processandoinformaceos.jpg' );
imagem.Visible:=true;

end;

end.


Adib Valentim

Adib Valentim

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

11/04/2013

Veja, por favor, em que linha exatamente ocorre o erro. Assim fica mais fácil de encontrar a solução.
GOSTEI 0
Adib Valentim

Adib Valentim

11/04/2013

ao compilar ele roda o programa inteiro sem erros
aí antes de exibir o programa vem aquelas janelas de erro de violação e o endereço da memória
( break ) ( continue ) ...


deve ser algum apontamento que eu não soube fazer, ou inverti a ordem por inexperiência.
não sei ao certo, penso eu, que possa ser por não ter as propriedades do timage, por ser apenas uma unit e não ter o dfm
sei lá. Gostaria do parecer de alguém mais experiente.

Abraço.

GOSTEI 0
Danillo Camargo

Danillo Camargo

11/04/2013

Olá rapaziada, tenho uma classe que gerencia a conexão com o banco
bem genérica, chamo ela ao criar o form e ela lê o .ini e se conecta com o banco.
até aqui tudo tranquilo e funcionando.
Queria colocar uma imagem nela dizendo "Processando..." enquando não dou o conected no DataBase;
algo desse tipo.

Criei uma Unit chamada Usplash, uma classe de splash
e dentro uma imagem : TImage;
passo os paramentros para a imagem, o caminho onde está a imagem escrito processando
só que ao chamar ela na classe de conexão dá um erro de violação

Estou deixando as duas classes aqui conforme estava tentando.
Se alguma boa alma entender o erro, me ajuda aí.
Agradecido!



************* CLASSE DE CONEXÃO *******************

unit Uconexao;

interface
uses
Variants, Classes, Graphics, Controls, ExtCtrls, Windows, Messages, SysUtils, IniFiles, DB, IBCustomDataSet, Dialogs, IBQuery, IBDatabase,
DBClient, Provider, Usplashs, IBScript, forms;


type Tconexao = class
protected
telasplash : Tsplash;
public
constructor conectar(ib:TIBDataBase; T:TIBTransaction);
destructor fim;
end;

implementation


destructor tconexao.fim;
begin

end;

constructor tconexao.conectar (ib:TIBDataBase; T:TIBTransaction);
var ArquivoINI : TIniFile;
str_server,str_path,str_filename,str_protocol :string;
begin
telasplash := tsplash.create();
try

ib.Connected:=false;
ArquivoINI := TIniFile.Create(ExtractFilePath(Application.ExeName)+ '\Config.ini');
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','');
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.Connected:=true;
t.StartTransaction;
except
ShowMessage('Erro de conexão com o banco: ' + str_path + str_filename);
end;

end;
end.





************ CLASSE DE SPLASH ******************




unit usplashs;

interface
uses
Variants, Classes, Graphics, Controls, ExtCtrls, Windows, Messages, SysUtils, IniFiles, DB, IBCustomDataSet, Dialogs, IBQuery, IBDatabase,
DBClient, Provider, IBScript, forms;

type tsplash = class(Tform)
protected
imagem: TImage;
public
constructor create();
end;


implementation
constructor tsplash.create();
begin
imagem.Visible:=false;
imagem.Picture.LoadFromFile( Application.ExeName+'img\processandoinformaceos.jpg' );
imagem.Visible:=true;

end;

end.




Boa tarde Adib. Tudo bem?

Você precisa instanciar a variável "imagem" antes de usa-lá.

constructor tsplash.create();
begin
   imagem := TImagem.Create(nil);
   
   imagem.Visible:=false;
   imagem.Picture.LoadFromFile( Application.ExeName+'img\processandoinformaceos.jpg' );
   imagem.Visible:=true;

end;


Qualque dúvida estou à disposição,
Atenciosamente,
GOSTEI 0
Danillo Camargo

Danillo Camargo

11/04/2013

Olá rapaziada, tenho uma classe que gerencia a conexão com o banco
bem genérica, chamo ela ao criar o form e ela lê o .ini e se conecta com o banco.
até aqui tudo tranquilo e funcionando.
Queria colocar uma imagem nela dizendo "Processando..." enquando não dou o conected no DataBase;
algo desse tipo.

Criei uma Unit chamada Usplash, uma classe de splash
e dentro uma imagem : TImage;
passo os paramentros para a imagem, o caminho onde está a imagem escrito processando
só que ao chamar ela na classe de conexão dá um erro de violação

Estou deixando as duas classes aqui conforme estava tentando.
Se alguma boa alma entender o erro, me ajuda aí.
Agradecido!



************* CLASSE DE CONEXÃO *******************

unit Uconexao;

interface
uses
Variants, Classes, Graphics, Controls, ExtCtrls, Windows, Messages, SysUtils, IniFiles, DB, IBCustomDataSet, Dialogs, IBQuery, IBDatabase,
DBClient, Provider, Usplashs, IBScript, forms;


type Tconexao = class
protected
telasplash : Tsplash;
public
constructor conectar(ib:TIBDataBase; T:TIBTransaction);
destructor fim;
end;

implementation


destructor tconexao.fim;
begin

end;

constructor tconexao.conectar (ib:TIBDataBase; T:TIBTransaction);
var ArquivoINI : TIniFile;
str_server,str_path,str_filename,str_protocol :string;
begin
telasplash := tsplash.create();
try

ib.Connected:=false;
ArquivoINI := TIniFile.Create(ExtractFilePath(Application.ExeName)+ '\Config.ini');
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','');
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.Connected:=true;
t.StartTransaction;
except
ShowMessage('Erro de conexão com o banco: ' + str_path + str_filename);
end;

end;
end.





************ CLASSE DE SPLASH ******************




unit usplashs;

interface
uses
Variants, Classes, Graphics, Controls, ExtCtrls, Windows, Messages, SysUtils, IniFiles, DB, IBCustomDataSet, Dialogs, IBQuery, IBDatabase,
DBClient, Provider, IBScript, forms;

type tsplash = class(Tform)
protected
imagem: TImage;
public
constructor create();
end;


implementation
constructor tsplash.create();
begin
imagem.Visible:=false;
imagem.Picture.LoadFromFile( Application.ExeName+'img\processandoinformaceos.jpg' );
imagem.Visible:=true;

end;

end.




Boa tarde Adib.

Uma sugestão, utilize a classe "TPanel" no lugar "TForm", acredito que seja melhor para sua necessidade. Com a classe "TForm" você vai ter alguns problemas. Segue exemplo:

TSplash = class(TPanel)
  private
    imagem: TImage;
  public
    constructor Create(AOwner: TComponent); override;
  end;

implementation

constructor TSplash.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  imagem := TImage.Create(Self);
  imagem.Visible := False;
  // ... seu código
end;


Qualquer dúvida estou à disposição,
Atenciosamente,
GOSTEI 0
Adib Valentim

Adib Valentim

11/04/2013

obrigado
Irei testar e trago os resultados aqui.
desde já agradecido
GOSTEI 0
Adib Valentim

Adib Valentim

11/04/2013

o erro sumiu
mas a imagem não aparece.


GOSTEI 0
Danillo Camargo

Danillo Camargo

11/04/2013

o erro sumiu
mas a imagem não aparece.




Boa noite Adib.

Como você está criando essa classe? Você concluiu o desenvolvimento dela?

Qualquer dúvida estou à disposição,
Atenciosamente,
GOSTEI 0
Adib Valentim

Adib Valentim

11/04/2013

desse jeito que postei aqui.
ela está desse jeito nos meus testes, só alterei o que vc sugeriu
GOSTEI 0
POSTAR