Ir para conteúdo
Fórum Script Brasil
  • 0

mestre/detalhes com imagens


dan_visualdm

Pergunta

pessoal, boa tarde!

estou com um probleminha aqui... estou fazendo um sistema de imóveis, então nesse sistema tem todas informações do imovel e tambem podera ter ate 10 fotos.

bom, tah tudo pronto (praticamente)

a unica duvida minha é, vamos supor que eu esteja em um imovel.

Para ele terá 10 fotos cadastradas no bd (até aqui está ok)

O PROBLEMA: - como fazer um Next e um Prior só pra ir visualizando as imagens desse imovel?

IMPORTANTE: - meu BD é ACCESS

- as imagens não ficam no banco, ficam apenas o caminho da imagem.

veja abaixo a janela do meu sistema:

fotoss.JPG

Ah... para montar o esqueminha de imagem segui as explicações deste tópico:

http://scriptbrasil.com.br/forum/index.php?showtopic=131014

então.. a primeira imagem eu carrego utilizando o seguinte:

begin
  Image1.Picture.Bitmap := Nil;
  if dm.q_fotos.Fields.FieldByName('img01').AsString <> '' then
    if FileExists(dm.q_fotos.fields.fieldbyname('img01').AsString) then
      Image1.Picture.LoadFromFile(dm.q_fotos.fields.fieldbyname('img01').AsString)

end;

mas como ir dando next e/ou prior? e ainda... como limitar esse next e prior só para esse imovel? [porque se for dando next e/ou prior direto vai passar por todas as imgs do banco.,. e isso não pode! rssss...]

obrigado!

Editado por dan_visualdm
Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0
O PROBLEMA:

- vamos supor que eu esteja vizualisando um determinado imóvel, então para esse imóvel tenho 10 fotos cadastradas.

Como fazer o prior e o next para mudar somente as imagens cadastradas para esse imovel?

Voce teria que ter um arquivo somente com o codigo do imovel e as imagens ( ou endereço das imagens )

e usando o DBNavigator voce consegue dar next ou prior nas imagens ( maneira mais facil )

Isto se chama relacionamento de tabelas 1 para N ( ou seja um registro para N outros de outra tabela ) se voce usar a mesma tabela o campo a ser usado para guardar o caminho das imagens deveria ser um Memo .. daria para navegar nele usando outros recursos

abraço

OBS: Favor não duplicar Posts

Link para o comentário
Compartilhar em outros sites

  • 0
O PROBLEMA:

- vamos supor que eu esteja vizualisando um determinado imóvel, então para esse imóvel tenho 10 fotos cadastradas.

Como fazer o prior e o next para mudar somente as imagens cadastradas para esse imovel?

Voce teria que ter um arquivo somente com o codigo do imovel e as imagens ( ou endereço das imagens )

e usando o DBNavigator voce consegue dar next ou prior nas imagens ( maneira mais facil )

Isto se chama relacionamento de tabelas 1 para N ( ou seja um registro para N outros de outra tabela ) se voce usar a mesma tabela o campo a ser usado para guardar o caminho das imagens deveria ser um Memo .. daria para navegar nele usando outros recursos

abraço

OBS: Favor não duplicar Posts

olá...

então carinha,é que não quero usar o DBNavigator.. queria aprender a fazer a programação. Repare na imagem que eu postei que já deixei os bts pronto.

+ vo ve o que axo por ae. valeu

OBS: Este não é um post duplicado.

Este post foi editado por dan_visualdm: Hoje, 17:11

Voce o duplicou quando editou o post inicial de maneira incorreta ... mas ele já foi deletado

Editado por Jhonas
Erro do usuário ao editar o post
Link para o comentário
Compartilhar em outros sites

  • 0
então carinha,é que não quero usar o DBNavigator.. queria aprender a fazer a programação. Repare na imagem que eu postei que já deixei os bts pronto.

para usar os botões que voce colocou

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
   Query1.Next;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
   Query1.Prior;
end;
Substitua a query pelo nome da sua tabela ou pelo no da query que esta usando um exemplo usando cadstro de clientes e um cadastro de veiculos ( seria a mesma coisa que cadastro de imovel e cadastro de fotos ) Tem que fazer um relacionamento entre tabelas ( 1 para N ) Na query veiculos ( Query1 )
SELECT Clientes.COD, Clientes.NOME, Veiculos.MARCA, Veiculos.MODELO, Veiculos.ANO
FROM "CLIENTES.DB" Clientes
   INNER JOIN "Veiculos.DB" Veiculos
   ON  (Clientes.COD = Veiculos.COD_CLIENTE)
Na query Clientes ( Query2 )
SELECT COD, NOME
FROM "CLIENTES.DB" Clientes
WHERE COD = :CODC

Explicação: Na query clientes voce seleciona somente um cliente atraves de seu codigo

na query veiculos será selecionado todos os veiculos pertencentes a esse cliente ( dessa maneira a navegação de registros será feita somente em veiculos, mantendo o registro parado na tabela clientes)

voce pode aplicar a mesma analogia a sua tabela cadastro de imovel e as fotos desse imovel

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

agora deu certo aqui...

na verdade usando só o Prior e o Next não estava funcionando... ele ficava passeando em tudo....

ai fiz o seguinte:

begin
dm.q_fotos.close;
dm.q_fotos.SQL.clear;
dm.q_fotos.SQL.add('select * from tbl_fotos where id_relac like '''+ db_id.Text + '%''');
dm.q_fotos.Prepared;
dm.q_fotos.open;
begin
dm.q_fotos.Next; // e tb para o Prior
 Image1.Picture.Bitmap := Nil;
 if dm.q_fotos.Fields.FieldByName('img01').AsString <> '' then
 if FileExists(dm.q_fotos.fields.fieldbyname('img01').AsString) then
 Image1.Picture.LoadFromFile(dm.q_fotos.fields.fieldbyname('img01').AsString)
  end;  end;

ai ficou belezinha...

agora só tem + 1 probleminha:

- vamos supor que eu delete esse imovel... como fazer para que todos os caminhos de fotos que estiver relacionado para essa ID que acabei de deletar, ser deletado junto??

(preciso disso porque a qtd de imovel que entra e sai por semana é enorme, se não limpar isso ai quando deleta jájá o bd estará super lotado)

obrigado

Editado por dan_visualdm
Link para o comentário
Compartilhar em outros sites

  • 0
agora só tem + 1 probleminha:

- vamos supor que eu delete esse imovel... como fazer para que todos os caminhos de fotos que estiver relacionado para essa ID que acabei de deletar, ser deletado junto??

(preciso disso porque a qtd de imovel que entra e sai por semana é enorme, se não limpar isso ai quando deleta jájá o bd estará super lotado)

basta procurar o ID relacionado na outra tabela e usar um For para apagar todos os registros

exemplo usando o componente IBSQL ( modifique para o seu uso )

IBSQL1.Close;
   IBSQL1.SQL.Clear;
   IBSQL1.SQL.Append('DELETE FROM tbl_fotos WHERE FOTOS.id_relac = 23');  // ID DO RELACIONAMENTO
   IBSQL1.Prepare;
   IBSQL1.ExecQuery;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
agora só tem + 1 probleminha:

- vamos supor que eu delete esse imovel... como fazer para que todos os caminhos de fotos que estiver relacionado para essa ID que acabei de deletar, ser deletado junto??

(preciso disso porque a qtd de imovel que entra e sai por semana é enorme, se não limpar isso ai quando deleta jájá o bd estará super lotado)

basta procurar o ID relacionado na outra tabela e usar um For para apagar todos os registros

exemplo usando o componente IBSQL ( modifique para o seu uso )

IBSQL1.Close;
   IBSQL1.SQL.Clear;
   IBSQL1.SQL.Append('DELETE FROM tbl_fotos WHERE FOTOS.id_relac = 23');  // ID DO RELACIONAMENTO
   IBSQL1.Prepare;
   IBSQL1.ExecQuery;
abraço
olá amigo... o que seria esse - FOTOS.id_relac ?? tentei da seguinte forma:
begin
   dm.q_fotos.Close;
   dm.q_fotos.SQL.Clear;
   dm.q_fotos.SQL.Append('DELETE FROM tbl_fotos WHERE id_relac = '''+ db_id.Text + '%''');  // ID DO RELACIONAMENTO
   dm.q_fotos.Prepared;
   dm.q_fotos.ExecSQL;
end;

mas o seguinte erro é apresentado:

o parametro id_relac não tem valor padrão

como resolver? obrigado mais uma vez! =D

Link para o comentário
Compartilhar em outros sites

  • 0
o que seria esse - FOTOS.id_relac ??

tentei da seguinte forma:

begin

dm.q_fotos.Close;

dm.q_fotos.SQL.Clear;

dm.q_fotos.SQL.Append('DELETE FROM tbl_fotos WHERE id_relac = '''+ db_id.Text + '%'''); // ID DO RELACIONAMENTO

dm.q_fotos.Prepared;

dm.q_fotos.ExecSQL;

end;

mas o seguinte erro é apresentado:

o parametro id_relac não tem valor padrão

[ que seria esse - FOTOS.id_relac ?? ]

Isto é apenas um exemplo que te passei ... voce deve usar o campo que esta em sua tabela que representa o identificador das fotos

[o parametro id_relac não tem valor padrão]

o campo id_relac é string ou numerico ?

O erro aparentemente é porque voce não passou um valor para ele

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

olá amigo, mudei o campo do banco de dados, fiz os relacionamentos e agora deu tudo certo...

ou melhor, quase tudo certo...

eu exclui o imovel, não deu erro nenhum... porem os itens relacionados a ele não foram apagados do banco...

o que sera que tem de errado??

- a programação que estou usando é a mesma que está acima

- e o tipo de campo, que você perguntou ali em cima, é Texto

o que sera que tem de errado? será que estou indicando certo da onde o ele busca o codigo?

'''+ f_incluir_imoveis.db_id.Text + '%''' ???

olha a janela do erro:

err.JPG

olha como está aqui:

begin
with dm.q_fotos do
begin
  Close;
  SQL.Clear;
  SQL.Add('select * from tbl_fotos WHERE id_ligar = '''+ f_incluir_imoveis.db_id.Text + '%''');
  SQL.Append('DELETE * FROM tbl_fotos WHERE id_ligar = '''+ f_incluir_imoveis.db_id.Text + '%''');
  Open;
  Prepared;
  ExecSQL;
  end;
begin
dm.q_loja.Delete;
f_incluir_imoveis.close;
close;
end; end;

obrigado!

Editado por dan_visualdm
Link para o comentário
Compartilhar em outros sites

  • 0
SQL.Add('select * from tbl_fotos WHERE id_ligar = '''+ f_incluir_imoveis.db_id.Text + '%''');

SQL.Append('DELETE * FROM tbl_fotos WHERE id_ligar = '''+ f_incluir_imoveis.db_id.Text + '%''');

Observe que no erro apresentado ( operador faltando ) ocorre em função das aspas na expressão estar colocada de forma errada

voce não pode usar um select e um delete na mesma sentença SQL de uma query ... alias voce não pode usar Delete dentro de uma sentença SQL de uma query

para isto voce deveria usar o componente UpdateSQL fazendo uso da propriedade DeleteSQL do componente

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

SQL.Add('select * from tbl_fotos WHERE id_ligar = '''+ f_incluir_imoveis.db_id.Text + '%''');

observe o erro

'id_ligar='7%'

lembre-se que cada 3 aspas imprime uma ... no seu caso a aspa esta errada antes do id_ligar

este é um exemplo apenas para demonstrar como uma sentença deve estar dentro da query

procedure TForm1.Button1Click(Sender: TObject);
var s : string; var i, NUMFICHA : integer;
begin
 i := 1;
 NUMFICHA := 35;

 S := 'update EXAMES_ATESTA SET FICHA_NUM = ' +  '''' + inttostr(i) + '''' +
      ' where FICHA_NUM = ' + '''' + inttostr(NUMFICHA) + '''' + ' and ID = 1';

 showmessage(s);
end;

Veja como deveria ficar na visualização a sentença... voce deve mudar o seu código para ver algo semelhante em relação as aspas

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

olá...

agora arrumei esse erro... veja como ficou:

begin
with dm.q_fotos do
begin
  Close;
  SQL.Clear;
  SQL.Append('DELETE * FROM tbl_fotos WHERE id_ligar = '''+'%' +  f_incluir_imoveis.db_id.Text + '%''');
  Open;
  Prepared;
  ExecSQL;
  end;
begin
dm.q_loja.Delete;
f_incluir_imoveis.close;
close;
end; end;

bom, vamos lá. Minha dúvida era como eu deletar todos os regitros relacionados a um outro registo (mestre / detalhes)

então, meu relacionamento está feito da seguinte maneira:

(vou colocar aqui o exemplo que peguei num outro forum pra fazer)

1º) Imagine que você tem em seu form uma Query1 ligado DataSource1 e uma Table1 ligado com DataSource2. A Query1 (tbl_cliente) vai ser sua tabela mestre, e a Table1 vai ser sua tabela detalhes ...

2º) Na propriedade SQL de Query1 monta um select pra selecionar todos os registros da tabela clientes

CODE

SELECT * FROM tbl_cliente

3º) Agora da duplo clique na Query1 e Adiciona todos os fields lá (CTRL + F)...

4º) Na Table1, Ligue TableName com a tabela tbl_relatorio_clientes. MasterSource ligue com DataSource1. Agora de duplo clique nos (...) tres pontinhos da propriedade MasterFields.

5º) Vai aparecer uma janela: Field Link Designer. Ligue agora o campo codigo da tabela tbl_relatorio_clientes com o campo codigo de tbl_clientes e pra finalizar clique Add e logo Ok.

Prontinho .... Ative Query1 e Table1 e rode o projeto ....

beleza... o relacionamento está funcionando legal... agora o problema das aspas eu resolvi aqui... só que quando eu clico em deletar, agora aparece esse erro:

o provedoratual não oferece suporte para retornar varios conjuntos de registro de uma unica execucao

poxa vida... não consigo fazer isso! aonde foi que eu errei agora? :wacko: :wacko:

Link para o comentário
Compartilhar em outros sites

  • 0

Quando se faz relacionamentos de tabelas, voce pode fazer pesquisas, mas não deleção de registros

voe tem que usar outra maneira de fazer isso. Uma delas é passar um parametro para uma consulta SQL, a qual filtrará os registros que voce deseja deletar, e depois é só dar o comando de deleção.

exemplo:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Cadcli_IB.Active := false;
  CDS_Cadcli.Active := false;
  CDS_Cadcli.Params[0].AsInteger := codcliente;
  Cadcli_IB.Active := true;
  CDS_Cadcli.Active := true;

  Veiculo_IB.Active := false;
  CDS_Veiculo.Active := false;
  CDS_Veiculo.Params[0].AsInteger := codcliente;
  Veiculo_IB.Active := true;
  CDS_Veiculo.Active := true;

  if MessageDlg('Deseja Apagar o Registro ?' + #13 + #13 + 'COD N° : ' +
     CDS_CadcliCOD.AsString + #13 + #13 + 'NOME : ' + CDS_CadcliNOME.AsString ,
     mtConfirmation, [mbYes, mbNo], 0) = mrYes then
     begin
        CDS_Cadcli.Delete;
        CDS_Cadcli.ApplyUpdates(-1);

        for i := 1 to CDS_Veiculo.RecordCount do
           CDS_Veiculo.Delete;
         CDS_Veiculo.ApplyUpdates(-1);
     end;
end;

OBS: Veja que tenho 2 querys ... uma com a tabela clientes e outra com a tabela veiculos

o parametro passado para as duas é o codigo do cliente ( codcliente ) ... desta maneira eu terei apenas um cliente para N veiculos desse cliente, e quando eu deletar esse cliente, todos os veiculos relacionados a esse cliente tambem serão deletados da tabela veiculos.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
na verdade não entendi a programação... tem como explicar as partes dela o que cada uma faz pra mim?

procedure TForm1.Button1Click(Sender: TObject);
begin
  Cadcli_IB.Active := false;
  CDS_Cadcli.Active := false;
  CDS_Cadcli.Params[0].AsInteger := codcliente;
  Cadcli_IB.Active := true;
  CDS_Cadcli.Active := true;


  Veiculo_IB.Active := false;
  CDS_Veiculo.Active := false;
  CDS_Veiculo.Params[0].AsInteger := codcliente;
  Veiculo_IB.Active := true;
  CDS_Veiculo.Active := true;

  if MessageDlg('Deseja Apagar o Registro ?' + #13 + #13 + 'COD N° : ' +
     CDS_CadcliCOD.AsString + #13 + #13 + 'NOME : ' + CDS_CadcliNOME.AsString ,
     mtConfirmation, [mbYes, mbNo], 0) = mrYes then
     begin
        CDS_Cadcli.Delete;
        CDS_Cadcli.ApplyUpdates(-1);

        for i := 1 to CDS_Veiculo.RecordCount do
           CDS_Veiculo.Delete;
         CDS_Veiculo.ApplyUpdates(-1);
     end;
end;

1 - usar os seguintes componentes para acesso ao banco de dados

TQuery1 - DataSetProvider1 - ClientDataSet1 - DataSource1

2 - Trocar os nomes dos componentes pelos respectivos nomes

Cadcli_IB - DSP_Cadcli - CDS_Cadcli - DS_Cadcli

Veiculo_IB - DSP_Veiculo - CDS_Veiculo - DS_Veiculo

3 - fazer os links entre os componentes

4 - Na propriedade SQL do Cadcli_IB

Selec * from Clientes Where COD = :CODC

Crie o paramentro como integer

5 - Na propriedade SQL do Veiculo_IB

Selec * from Veiculos Where COD = :CODV

Crie o paramentro como integer

6 - Passar o codigo do cliente ( codcliente ) como parametro para a SQL

7 - Ao ser ativada as querys com o codigo do cliente já passado, será perguntado se deseja deletar o cliente e conseguentemente os veiculos pertencentes a esse cliente

OBS: Como voce esta ainda no nível básico de programação, sugiro a voce ler apostilas sobre o delphi, para poder entender melhor sobre o assunto

http://www.apostilasbr.com.br/linkmenu.asp?acao=133

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

beleza... vo ler amanha com calma e testar aqui... ve se consigo fazer isso funciona!

agora anoite terminei tudo do sistema, a unica coisa que falta é isso e mais uma outra coisa de relatorio... mas que achei um tuto aqui e entendi como faz! (ta quase pronto!) xD

obrigado pela força... tah me ajudando muito mesmo...

baxei umas apostilas aqui do link que você passo e mais umas que achei por ai... vo ler sim! é que esse projeto que to fazendo preciso entregar semana que vem... caso de vida ou morte mesmo... por isso acabei enxendo aqui de perguntas... [mas aprendi mtooo com ele!]

mas é isso ae... a ideia agora é resolver esse sisteminha aqui e depois estudar pra aprender mais!

o mais foda é que esse ano é ultimo da facul então vai ter uma pancada de coisa... [publicidade e propaganda] - rs... diferente as areas! xD

sem contar que eu tenho uma agencia de comunicacao aqui em Limeira/SP então tambem tenho que me dedicar muito lá...

+ quero aprender e me aprofundar em programaçao.... tenho umas ideias e uns projetos aqui que se Deus quiser vai dar certo.... hehe

brigadaoo carinha! [e desculpa o monte de perguntas.... rs..]

abraços

Editado por dan_visualdm
Link para o comentário
Compartilhar em outros sites

  • 0
existe a possibilidade de abrir um GIF com o OpenPictureDialog e depois carregá-la no TImage ?

voce pode abrir com o OpenPictureDialog e depois carregá-la no TImage as seguintes extensões

*.gif

*.jpg

*.jpeg

*.bmp

*.ico

*.emf

*.wmf

abraço

então... li isso na internet...

ai num estava aprarecendo nem JPG e JPEG e nem GIF...

ai fui na USES e adicionei JPG.. ai beleza, o JPG e JPEG começaram a aparecer...

mas e o GIF... esse num quer aparecer... o que tenho que fazer?

abraços!

Link para o comentário
Compartilhar em outros sites

  • 0
ai num estava aprarecendo nem JPG e JPEG e nem GIF...

ai fui na USES e adicionei JPG.. ai beleza, o JPG e JPEG começaram a aparecer...

mas e o GIF... esse num quer aparecer... o que tenho que fazer?

Coloque um componente TImage no form e na propriedade Picture do componente carregue um GIF que ele aparecerá no TImage.

Se não aparecer pode ser um arquivo GIF corrompido... então tente com outros para ver se acontece a mesma coisa.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
ai num estava aprarecendo nem JPG e JPEG e nem GIF...

ai fui na USES e adicionei JPG.. ai beleza, o JPG e JPEG começaram a aparecer...

mas e o GIF... esse num quer aparecer... o que tenho que fazer?

Coloque um componente TImage no form e na propriedade Picture do componente carregue um GIF que ele aparecerá no TImage.

Se não aparecer pode ser um arquivo GIF corrompido... então tente com outros para ver se acontece a mesma coisa.

abraço

não pode ser GIF corrompido, porque quando rodo o sistema e abre a dialog pra escolher qual imagem eu quero inserir nem aparece a opção nas extensões de GIF? não tem nem como selecionar....

na prop do TImagem carrega em edição... e na execução do sistema acontece isso...

Link para o comentário
Compartilhar em outros sites

  • 0

Olha na propriedade filter do componente OpenPictureDialog1

tera que aparecer isto

All (*.gif;*.jpg;*.jpeg;*.bmp;*.ico;*.emf;*.wmf)|*.gif;*.jpg;*.jpeg;*.bmp;*.ico;*.emf;*.wmf|CompuServe GIF Image (*.gif)|*.gif|JPEG Image File (*.jpg)|*.jpg|JPEG Image File (*.jpeg)|*.jpeg|Bitmaps (*.bmp)|*.bmp|Icons (*.ico)|*.ico|Enhanced Metafiles (*.emf)|*.emf|Metafiles (*.wmf)|*.wmf

se não aparecer .. copie e cole lá

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Olha na propriedade filter do componente OpenPictureDialog1

tera que aparecer isto

All (*.gif;*.jpg;*.jpeg;*.bmp;*.ico;*.emf;*.wmf)|*.gif;*.jpg;*.jpeg;*.bmp;*.ico;*.emf;*.wmf|CompuServe GIF Image (*.gif)|*.gif|JPEG Image File (*.jpg)|*.jpg|JPEG Image File (*.jpeg)|*.jpeg|Bitmaps (*.bmp)|*.bmp|Icons (*.ico)|*.ico|Enhanced Metafiles (*.emf)|*.emf|Metafiles (*.wmf)|*.wmf

se não aparecer .. copie e cole lá

abraço

olá amigo...

demorei pra testar isso porque vendi meu note e comprei um novo só que demoro pra chegar...

pois bem, fiz o que você falou acima... quando rodo o sistema e tento abrir um GIF agora aparece nba lista de imagens, mas quando eu clico para abrir ela aparece o seguinte erro:

Project imobcad.exe raised exception class EInvalidGraphic with message 'Unknown picture file extension (*.gif)'. Process stopped. Use Step or Run to continue.

porque será que não quer abrir gif?

Link para o comentário
Compartilhar em outros sites

  • 0
Project imobcad.exe raised exception class EInvalidGraphic with message 'Unknown picture file extension (*.gif)'. Process stopped. Use Step or Run to continue.

use um componente do RX chamado RxGIFAnimator1

http://br.geocities.com/all_software/download.htm

abraço

olá amigo

é esse que eu tenho que baixar --> RX Library v. 2.75

??

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...