Erro na criação de classes
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.
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
Curtidas 0
Respostas
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
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.
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
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.
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
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.
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
11/04/2013
obrigado
Irei testar e trago os resultados aqui.
desde já agradecido
Irei testar e trago os resultados aqui.
desde já agradecido
GOSTEI 0
Adib Valentim
11/04/2013
o erro sumiu
mas a imagem não aparece.
mas a imagem não aparece.
GOSTEI 0
Danillo Camargo
11/04/2013
o erro sumiu
mas a imagem não aparece.
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
11/04/2013
desse jeito que postei aqui.
ela está desse jeito nos meus testes, só alterei o que vc sugeriu
ela está desse jeito nos meus testes, só alterei o que vc sugeriu
GOSTEI 0