Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Antharaz

criando componente em run time

Recommended Posts

Source original:

 

Function MeuIP: string;
var
iip : char;
site: string;
d,c,cont : integer;
begin
c := 215;
d := 15;
site := Form1.IdHTTP1.Get('http://meuip.datahouse.com.br');
MeuIP := Copy(site, Pos('', site) +c, d);
for cont := 1 to 15 do
begin
iip := Copy(site, Pos('', site) +c, d)[1];
if iip = ' ' then
c := c+1;
iip := Copy(site, Pos('', site) +c, d)[length(Copy(site, Pos('', site) +c, d))];
if iip = '<' then
d := d-1;
MeuIP := Copy(site, Pos('', site) +c, d);
end;
end;

 

 

 

Depois que eu modifiquei:

 

 

Function MeuIP: string;
var
iip : char;
site: string;
d,c,cont : integer;
IdHTTP1 : TIdHTTP;
begin
IdHTTP1 := IdHTTP1.create(self);
c := 215;
d := 15;
site := Form1.IdHTTP1.Get('http://meuip.datahouse.com.br');
MeuIP := Copy(site, Pos('', site) +c, d);
for cont := 1 to 15 do
begin
iip := Copy(site, Pos('', site) +c, d)[1];
if iip = ' ' then
c := c+1;
iip := Copy(site, Pos('', site) +c, d)[length(Copy(site, Pos('', site) +c, d))];
if iip = '<' then
d := d-1;
MeuIP := Copy(site, Pos('', site) +c, d);
end;
IdHTTP1.free;
end;

 

 

 

Erros que está dando:

 

[DCC Error] Unit1.pas(117): E2003 Undeclared identifier: 'self'

[DCC Error] Unit1.pas(120): E2003 Undeclared identifier: 'IdHTTP1'

 

Porque está dando este erro? Eu fiz o mesmo em outra parte da source com o tcpclient e deuc erto...

 

 

PS:.. na uses o IdHTTP está declarado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

agora que percebi...

 

IdHTTP1 := IdHTTP1.create(self);

 

O correto é:

 

 

IdHTTP1 := TIdHTTP.create(nil);

Mais uma dúvida...

 

Porque quando eu coloco o self no lugar no nil ele fala que não declarei o self sendo que eu usei ele em outro componente run time?

Compartilhar este post


Link para o post
Compartilhar em outros sites

So explicando,

IdHTTP1 := IdHTTP1.create(self); -> Self indica que que o componente ira fazer parte do seu formulario (isso é usado quando se cria um componente). Quando você cria um componente e dentro dele vocêm precisa usar varios outros (como memos e edits) você coloca no seu evento onCrate, o parametro (Self) para indicar que as instâncias fazem parte do seu novo componente

 

IdHTTP1 := IdHTTP1.create(nil); -> Nil inidca que o componente não fará parte de nenhum outro. Não vejo problemas em usar self aqui, mas como eu disse, so para explicar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Taficcha, eu tentei usar o self e deu erro, por isto mudei para o nil...

A explicação do porque não consigo usar o self ali é dada pelo meu amigo Azurus:

 

Como você está tentando usar o self dentro de uma função que não referencia um objeto ele simplesmente não existe

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.