Erro na criação de Forms
Fiz uma questão anteriormente sobre a criação de forms e já comecei a pegar as manhas, mas agora enfrento um problema muito estranho, eu crio dois forms, ambos possuem um componente TImage cada um, o compilador não acusa problema algum e o programa roda normalmente, mas quando eu clico no botão do primeiro form para abrir o segundo, aparece a mensagem : "A component named Image1 already exists." Ou seja, Um componente nomeado Image1 já existe. O mais estranho é que mesmo que eu renomeie Image1 para qualquer outro nome, ele continua a acusar o mesmo erro. Eu não uso um TImageList porque não conheço nenhum componente no qual eu possa colocar a imagem da mesma forma que no TImage, pois TImageList me parece ser mais usado para um Button. No clicar do botão eu implementei:
begin
form2:= form2.create(self);
form2.showmodal;
freeandnil(form2);
end;
Eu usei o componente TImage por que ele me permite adicionar uma imagem diretamente no Form, isso cria um visual mais interessante do que colocar em um botão por exemplo, se alguém souber uma form de inserir imagens diretamente no Form com o TImageList também vai me ajudar.
PS: Se eu passo o Form2 para Available Forms na opção Project -> Options -> Forms, quando tento criar o segundo form ele da um erro de Access Violation
begin
form2:= form2.create(self);
form2.showmodal;
freeandnil(form2);
end;
Eu usei o componente TImage por que ele me permite adicionar uma imagem diretamente no Form, isso cria um visual mais interessante do que colocar em um botão por exemplo, se alguém souber uma form de inserir imagens diretamente no Form com o TImageList também vai me ajudar.
PS: Se eu passo o Form2 para Available Forms na opção Project -> Options -> Forms, quando tento criar o segundo form ele da um erro de Access Violation
Andrew Vargas
Curtidas 0
Respostas
Joel Rodrigues
26/06/2014
Existe algum código no evento OnCreate ou OnShow do Form2? Se sim, cole aqui por favor.
Obs.: use a formatação de código (primeiro botão) disponível na barra de formatação aqui na caixa de repostas.
Obs.: use a formatação de código (primeiro botão) disponível na barra de formatação aqui na caixa de repostas.
GOSTEI 0
Itamar Souza
26/06/2014
Bom dia
Se você tem 2 formulários, sendo o 1 chamando o segundo, você pode fazer assim.
No form2 você adiciona o seu Image é na abertura da tela você faz assim:
Mesmo que o formulário esteja no Available vai funcionar.
Se você tem 2 formulários, sendo o 1 chamando o segundo, você pode fazer assim.
procedure TForm1.Button1Click(Sender: TObject);
begin
try
Form2 := TForm2.Create(Application);
Form2.ShowModal;
finally
FreeAndNil(Form2);
end
end;
No form2 você adiciona o seu Image é na abertura da tela você faz assim:
procedure TForm2.FormShow(Sender: TObject);
var
FileName : string;
begin
//carrega a imagem
FileName := 'C:\caminhodaimagem.jpg';
if FileExists(FileName) then
Image1.Picture.LoadFromFile(FileName)
else
Image1.Picture := nil;
end;
Mesmo que o formulário esteja no Available vai funcionar.
GOSTEI 0
Marco Salles
26/06/2014
Quem é Form2 ???? é a Vraivel Global ???
Alguumas dicas podem não resolver seu problema , mas podem com certeza evitar OUTROS
1)
O Try vem Depois do Create
ERRADO
CERTO
TryAninhados
2) Segundo
A aplicação como Proprietária nesta estrutura não é aconselável .. Vc ests destruindo a Instancia e não a Aplicação . Logo o Proprietário deve ser NIL
3)Não Utilize a Variavel Global quando não tiver controle sobre a Intancia , a não ser se vc estiver utilizando um Padrão Singleton (que parece não ser o seu caso)
Faça assim
Alguumas dicas podem não resolver seu problema , mas podem com certeza evitar OUTROS
1)
O Try vem Depois do Create
ERRADO
try Form2 := TForm2.Create(Application);
CERTO
Form2 := TForm2.Create(Application); try
TryAninhados
2) Segundo
A aplicação como Proprietária nesta estrutura não é aconselável .. Vc ests destruindo a Instancia e não a Aplicação . Logo o Proprietário deve ser NIL
Form2 := TForm2.Create(NIL);
3)Não Utilize a Variavel Global quando não tiver controle sobre a Intancia , a não ser se vc estiver utilizando um Padrão Singleton (que parece não ser o seu caso)
Faça assim
var Form:TFORM; begin try Form:=TFORM2.Create(Nil); Form.ShowModal; finally FreeAndNil(Form); end
GOSTEI 0