Erro na criação de classes
11/04/2013
0
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
Posts
11/04/2013
Joel Rodrigues
11/04/2013
Adib Valentim
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.
12/04/2013
Danillo Camargo
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,
12/04/2013
Danillo Camargo
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,
12/04/2013
Adib Valentim
Irei testar e trago os resultados aqui.
desde já agradecido
12/04/2013
Danillo Camargo
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,
13/04/2013
Adib Valentim
ela está desse jeito nos meus testes, só alterei o que vc sugeriu
Clique aqui para fazer login e interagir na Comunidade :)