Erro na criação de classes

11/04/2013

2

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.


Responder

Posts

11/04/2013

Joel Rodrigues

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

11/04/2013

Adib Valentim

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.

Responder
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,
Responder
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,
Responder

12/04/2013

Adib Valentim

obrigado
Irei testar e trago os resultados aqui.
desde já agradecido
Responder

12/04/2013

Adib Valentim

o erro sumiu
mas a imagem não aparece.


Responder
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,
Responder

13/04/2013

Adib Valentim

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