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

[resolvido] Contar Horas Num Período


Eder

Pergunta

Ola...Pessoal

Estou num dilema.....preciso montar um aplicativo que conta horas, mas nem imagino como faz... :blush:

Exemplo:

data saida: 20/06/2007 as 20:00 horas

data chegada 25/06/2007 as 10:00 horas

alguém poderia me ajudar??

Grato

Link para o comentário
Compartilhar em outros sites

16 respostass a esta questão

Posts Recomendados

  • 0

Churc...bza?

Carinha poderias colocar um exemplinho pratico aqui??

parece que este negocio de calcular horas e meio embolado....tem o lance de chegar até a meia noite...vira a gora...em fim...se puderes colocar um exemplinho...agradeço

valeu :D

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --felipe --
Churc...bza?

Carinha poderias colocar um exemplinho pratico aqui??

parece que este negocio de calcular horas e meio embolado....tem o lance de chegar até a meia noite...vira a gora...em fim...se puderes colocar um exemplinho...agradeço

valeu :D

procedure TPrincipalForm.SpeedButton5Click(Sender: TObject);
var
  s:variant;
begin
  s:=HoursBetween(strtodatetime('01:08:08'),strtodatetime('03:08:08'));

quanto a essa parte de depois que passa da meia noite, eu testei e o resultado vem errado mesmo,

vo almoçar dpois eu tento arrumar

e posto ai

falow ;D

Link para o comentário
Compartilhar em outros sites

  • 0

Dois amigos me ajudaram a montar o codigo ficando assim:

procedure TForm1.EditHETotalEnter(Sender: TObject);

Var

Inicio: TDateTime;

Final: TDateTime;

total, total2 : real;

Dias: double;

begin

EditDataSaida.text := formatDateTime('dd/mm/yy',StrToDateTime(EditDataSaida.text));

EditDataChegada.text := formatDateTime('dd/mm/yy',StrToDateTime(EditDataChegada.text));

Inicio := StrToDate(EditDataSaida.Text) + StrToTime(EditHoraSaida.Text);

Final := StrToDate(EditDataChegada.Text) + StrToTime(EditHoraChegada.Text);

Dias := Final - Inicio;

EditHETotal.Text := FormatDateTime('HH:MM', Frac(Dias)); //se colocar assim na formatação HH:MM:SS aparecerá assim: 10:00:00

EditHETotal.Text := IntToStr(Trunc(Dias) * 24 + strtoint(copy(EditHETotal.text,1,2))) + copy(EditHETotal.text,3,3);

end;

deste total que aparece no EditHETotal eu precisaria saber qtos são DIURNAS E qtas são NOTURNAS....sendo que a NOTURNA compreende do horario de 22:00 as 05:00 do outro dia...o restante considera-se DIURNAS...

Micheus..Tens alguma ideia??(este negocio de data e hora é pedreira...nunca me entendi com este negocio).

Grato

:(

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

  • 0
Micheus..Tens alguma ideia??(este negocio de data e hora é pedreira...nunca me entendi com este negocio).
Só vou poder ver isso pela madrugada.

Enquanto isso, dá uma olha deste post (forum ActiveDelphi) que eu tinha visto por lá há algum tempo.

Tem também um recente - tá incompleto, mas vai que dá para aproveitar algo.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Micheus

Carinha..dei uma olhada neste tópico

tópico

e achei esta dica:

procedure TForm1.Button1Click(Sender: TObject);

var

h,h1,h2,m,m2,m1,s,s1,s2,ms,ms1,ms2:word;

inicio,fim:TTime;

i,x,cont:smallint;

begin

cont:=0;

inicio:=strtotime(edit1.Text);

fim:=strtotime(edit2.Text);

decodeTime(inicio,h,m,s,ms); //desmembro a hora inicio

decodeTime(fim,h1,m1,s1,ms1); //desmembro a hora final

resta:=fim-inicio; //calculo a diferença entre as duas

if (h1=0) or (h1<h) then

resta:=resta+strtotime(\'23:59:59\')+strtotime(\'00:00:01\'); //corrigo bug se houver

label3.Caption:=timetostr(resta); //resultado da subtração

decodeTime(resta,h2,m2,s2,ms2); //desmembro o resultado

for i:=0 to h2 do //para i=0 até o numero de hora trabalhada(h2)

begin

x:=h+i; // x recebe hora inicio(h) +1

if x > 24 then //se a soma for maior que 24

x:=x-24; //corrigo o bug pois o n° pode dar 25,30 etc...

if x in[22,23,0..5]then //aqui verifico se a hora é adicional noturno

cont:=cont+1

end;

if (h in[0..5]) then //correção de + um bug senão ira contar já a hora inicio

cont:=cont-1; //** se começar em 0,1,2,3,4 não contar o a primeira hora

label4.Caption:=inttostr(cont); //Eu ia me esquecendo cont representa a quantidade de hora adicional noturno que a pessoa trabalhou

tentei compilar este codigo...mas deu erro nesta linha:

parace que falta algo:

resta:=fim-inicio; //calculo a diferença entre as duas
da erro: [Error] Unit1.pas(39): Undeclared identifier: 'resta'

parece uma variavel né??

:huh:

Link para o comentário
Compartilhar em outros sites

  • 0
resta:=fim-inicio; //calculo a diferença entre as duas
da erro: [Error]Unit1.pas(39): Undeclared identifier: 'resta'

parece uma variavel né??

Exato. Talvez o cara tenha definido ela globalmente.

Declara ela local como TDateTime (junto com as que já estão declaradas) e vê no que dá.

Link para o comentário
Compartilhar em outros sites

  • 0
Declara ela local como TDateTime (junto com as que já estão declaradas) e vê no que dá.
R.: Carinha..fiz o que me disse....e ai ele funciona em partes

até encrementei tipo a Hora Diurna que seria a total - Noturna.(que não tinha no codigo)

Porem o programa se perde por exemplo se eu escolher a

hora inicial 22:00:00 e a final: 03:30:00

neste caso a noturna deveria dar 05:30 e a diurna nada.

porem o resultado sai assim:

noturna: 05:00

Diurna: 00:30

Parece que é quando a hora não é cheia...tipo 30 minutos, 40 minutos etc...ele se perde

foi o Bug que achei...pelo menos..só este.

*também não consegui formatar a hora noturna no label.....ela esta como numero inteiro

segue abaixo o codigo completo:

procedure TForm1.Button1Click(Sender: TObject);

var

h,h1,h2,m,m2,m1,s,s1,s2,ms,ms1,ms2:word;

inicio,fim:TTime;

i,x,cont:smallint;

Resta:TDateTime;

noturna:real;

begin

cont:=0;

inicio:=strtotime(edit1.Text);

fim:=strtotime(edit2.Text);

decodeTime(inicio,h,m,s,ms); //desmembro a hora inicio

decodeTime(fim,h1,m1,s1,ms1); //desmembro a hora final

resta:=fim-inicio; //calculo a diferença entre as duas

if (h1=0) or (h1<h) then

resta:=resta+strtotime('23:59:59')+strtotime('00:00:01'); //corrigo bug se houver

label3.Caption:=timetostr(resta); //resultado da subtração

decodeTime(resta,h2,m2,s2,ms2); //desmembro o resultado

for i:=0 to h2 do //para i=0 até o numero de hora trabalhada(h2)

begin

x:=h+i; // x recebe hora inicio(h) +1

if x > 24 then //se a soma for maior que 24

x:=x-24; //corrigo o bug pois o n° pode dar 25,30 etc...

if x in[22,23,0..5]then //aqui verifico se a hora é adicional noturno

cont:=cont+1

end;

if (h in[0..5]) then //correção de + um bug senão ira contar já a hora inicio

cont:=cont-1; //** se começar em 0,1,2,3,4 não contar o a primeira hora

label4.Caption:=inttostr(cont); //Eu ia me esquecendo cont representa a quantidade de hora adicional noturno que a pessoa trabalhou

noturna:=StrToTime(label4.caption); //recebe a hora noturna

label5.caption:=timetostr(Resta-noturna); //aqui é o total de horas Dirnas...ele pega o total de horas - a noturna...

end;

Poderias dar uma olhadinha??

Valeu..Grato..... :)

Link para o comentário
Compartilhar em outros sites

  • 0
Porem o programa se perde por exemplo se eu escolher a

hora inicial 22:00:00 e a final: 03:30:00

neste caso a noturna deveria dar 05:30 e a diurna nada.

porem o resultado sai assim:

noturna: 05:00

Diurna: 00:30

Não estou podendo queimar muita pestana por agora (e nos próximos dias), então a dica é que este problema pode estar relacionado ao fato de que você não está levando em conta a data.

Por ex., o sujeito bate o cartão:

- Entrada 30/06/2007 23:35

- Saída 01/07/2007 08:40

Bom, se eu não estiver errado, o ADN começa às 22:00 e encerra às 05:00. Se você leu os links que coloquei no post do dia 28/06/2007 - 16:10, vai entender que podemos somar a data e a hora para termos uma informação só:

dtEntrada := StrToDate('30/06/2007');
hrEntrada := StrToTime('23:35');
dtSaida := StrToDate('01/07/2007');
hrSaida := StrToTime('08:40');

// total de horas trabalhadas
qtHorasTrabalhadas := (dtSaida +hrSaida) -(dtEntrada +hrEntrada);
// calculando total de horas noturnas (ADN)
qtHoraADN := 0;
if hrEntrada >= 22 then
begin
  if qtHorasTrabalhadas > (24 -hrEntrada) then  // significa que hora de saída é no outro dia
  begin
    qtHoraADN := (24 -hrEntrada);  // até o final do dia - 24:00
    if hrSaida >= 5 then  // se o cara saiu depois das 5, recebe até ai
      qtHoraADN := qtHoraAdicional +5
    else
      qtHoraADN := qtHoraADN +hrSaida;  // o cara saiu antes das 5
  end;
end else  // o cara poderá ter entrado após as 00:00
  if hrEntrada < 5 then
  begin
    if hrSaida >= 5 then  // se o cara saiu depois das 5, recebe até ai
      qtHoraADN := 5 -qtEntrada
    else
      qtHoraADN := hrSaida -hrEntrada;  // o cara saiu antes das 5
  end;
acredito que lógica esteja clara e fazendo o cálculo correto. Veja se você consegue trabalhar com algo mais parecido com isto - parece-me um pouco mais claro (só não sei se as fórmulas estão corretas - não fiz nada com folha de pagamento)
Parece que é quando a hora não é cheia...tipo 30 minutos, 40 minutos etc...ele se perde foi o Bug que achei...pelo menos..só este. *também não consegui formatar a hora noturna no label.....ela esta como numero inteiro
será que utilizando o esquema data/hora como coloquei, este problema não sumirá? Abraços p.s.: quando postar código, utilize a tag CODE e não QUOTE. Veja como fica mais legível:
procedure TForm1.Button1Click(Sender: TObject);
var
  h,h1,h2,m,m2,m1,s,s1,s2,ms,ms1,ms2:word;
  inicio,fim:TTime;
  i,x,cont:smallint;
  Resta:TDateTime;
  noturna:real;
begin
  cont:=0;
  inicio:=strtotime(edit1.Text);
  fim:=strtotime(edit2.Text);
  decodeTime(inicio,h,m,s,ms); //desmembro a hora inicio
  decodeTime(fim,h1,m1,s1,ms1); //desmembro a hora final
  resta:=fim-inicio; //calculo a diferença entre as duas
  if (h1=0) or (h1<h) then
    resta:=resta+strtotime('23:59:59')+strtotime('00:00:01'); //corrigo bug se houver
  label3.Caption:=timetostr(resta); //resultado da subtração
  decodeTime(resta,h2,m2,s2,ms2); //desmembro o resultado
  for i:=0 to h2 do //para i=0 até o numero de hora trabalhada(h2)
  begin
    x:=h+i; // x recebe hora inicio(h) +1
    if x > 24 then //se a soma for maior que 24
      x:=x-24; //corrigo o bug pois o n° pode dar 25,30 etc...
    if x in[22,23,0..5]then //aqui verifico se a hora é adicional noturno
      cont:=cont+1
  end;
  if (h in[0..5]) then //correção de + um bug senão ira contar já a hora inicio
    cont:=cont-1; //** se começar em 0,1,2,3,4 não contar o a primeira hora
  label4.Caption:=inttostr(cont); //Eu ia me esquecendo cont representa a quantidade de hora adicional noturno que a pessoa trabalhou
  noturna:=StrToTime(label4.caption); //recebe a hora noturna
  label5.caption:=timetostr(Resta-noturna); //aqui é o total de horas Dirnas...ele pega o total de horas - a noturna...
end;

Link para o comentário
Compartilhar em outros sites

  • 0

Carinha....testei o seu codigo:

procedure TForm1.Button2Click(Sender: TObject);
Var
DtEntrada, HrEntrada, DtSaida, HrSaida,
QtHorasTrabalhadas, QtHoraADN, QtHoraAdicional, QtEntrada : TDateTime;
begin
dtEntrada := StrToDate('30/06/2007');
hrEntrada := StrToTime('21:00');
dtSaida := StrToDate('01/07/2007');
hrSaida := StrToTime('10:00');
// total de horas trabalhadas
qtHorasTrabalhadas := (dtSaida + hrSaida) - (dtEntrada + hrEntrada);
// calculando total de horas noturnas (ADN)
qtHoraADN := 0;
if hrEntrada >= 22 then
begin
  if qtHorasTrabalhadas > (24 -hrEntrada) then  // significa que hora de saída é no outro dia
  begin
    qtHoraADN := (24 -hrEntrada);  // até o final do dia - 24:00
    if hrSaida >= 5 then  // se o cara saiu depois das 5, recebe até ai
      qtHoraADN := qtHoraAdicional +5
    else
      qtHoraADN := qtHoraADN +hrSaida;  // o cara saiu antes das 5
  end;
end else  // o cara poderá ter entrado após as 00:00
  if hrEntrada < 5 then
  begin
    if hrSaida >= 5 then  // se o cara saiu depois das 5, recebe até ai
      qtHoraADN := 5 -qtEntrada
    else
      qtHoraADN := hrSaida -hrEntrada;  // o cara saiu antes das 5
  end;
      Label9.Caption:=timetostr(qtHorasTrabalhadas);  //resultado horas trabalhadas
      Label10.Caption:=timetostr(qtHoraADN); //resultado horas noturnas
      label11.caption:=timetostr(QtHorasTrabalhadas - QtHoraAdn); //resultado horas Diurnas
      end;

No final do codigo coloquei os labels pra receber os resultados

As Horas Trabalhadas(label9) ta calculando certinho.

As Horas Noturnas(label10) não ta calculando certo

As Horas restantes que são as dirnas(label11) que seria o (QrHorasTrabalhadas-QtHorasAdn)também não esta porque a noturna não calcula certo, mas se a noturna calcular certo ela vai calcular também.

tentei com este exemplo de datas:

dtEntrada := StrToDate('30/06/2007');

hrEntrada := StrToTime('21:00');

dtSaida := StrToDate('01/07/2007');

hrSaida := StrToTime('06:00');

total de horas:9

noturnas:15

Diurnas(restante):0

se usar assim:

dtEntrada := StrToDate('01/07/2007');

hrEntrada := StrToTime('01:00');

dtSaida := StrToDate('01/07/2007');

hrSaida := StrToTime('07:00');

total de horas:6

noturnas:6

Diurnas(restante):0

Tentei mudar o seu codigo ....mas ai me perdi....porque é um monte de if´s e me enrrolei todo.

Grato. :(

Link para o comentário
Compartilhar em outros sites

  • 0

É tinha alguns errinhos. :rolleyes:

ADN = Adicional Noturno.

procedure TForm1.Button1Click(Sender: TObject);
const
  ADNInicio = (22 /24);  // 22:00
  ADNTermino = (5 /24);  // 05:00
Var
  DtEntrada, HrEntrada, DtSaida, HrSaida, HrInicioADN, HrTerminoADN,
  QtHorasTrabalhadas, QtHoraADN : TDateTime;
begin
  dtEntrada := StrToDate('30/06/2007');
  hrEntrada := StrToTime('21:00');
  dtSaida := StrToDate('01/07/2007');
  hrSaida := StrToTime('10:00');
  // total de horas trabalhadas
  qtHorasTrabalhadas := ((dtSaida + hrSaida) - (dtEntrada + hrEntrada));
  // calculando total de horas noturnas (ADN)
  qtHoraADN := 0;
  if (ADNInicio >= hrEntrada) and ((hrEntrada +qtHorasTrabalhadas) > ADNInicio) then
  begin                         // período onde as 22:00 está dentro - calcula ADN (Adicional Noturno)
   // determinar hora de início do ADN
    if hrEntrada < ADNInicio then
      HrInicioADN := ADNInicio
    else
      HrInicioADN := hrEntrada;
   // determinar hora de término do ADN
    if hrSaida < hrEntrada then // significa saida APÓS as 24:00 do dia de entrada
    begin
      if hrSaida >= ADNTermino then      // se o cara saiu depois das 5, recebe até ai
        HrTerminoADN := ADNTermino
      else
        HrTerminoADN := hrSaida;   // o cara saiu antes das 5
    end else                    // significa saída ANTES das 24:00 do dia da entrada
      HrTerminoADN := hrSaida;

    qtHoraADN := ((dtSaida + HrTerminoADN) - (dtEntrada + HrInicioADN));
  end;
  Label1.Caption:=timetostr(qtHorasTrabalhadas);  //resultado horas trabalhadas
  Label2.Caption:=timetostr(qtHoraADN); //resultado horas noturnas
  label3.caption:=timetostr(QtHorasTrabalhadas - QtHoraAdn); //resultado horas Diurnas
end;
tenta assim. Observe os comentários - acho que explicam tenho dúvida se esta linha será sempre válida para todas as situações (tem testar - verifique):
qtHoraADN := ((dtSaida + HrTerminoADN) - (dtEntrada + HrInicioADN));

o lance de dividir por 24, está associado ao que já mencionei (posts acima) sobre o formato do campo TDateTime - tenha isso em mente.

Link para o comentário
Compartilhar em outros sites

  • 0

Carinha.....testei de todas as formas....mas encontrei um probleminha...acredito que era isto que você se referia no final do post.

o lance de dividir por 24, está associado ao que já mencionei (posts acima) sobre o formato do campo TDateTime - tenha isso em mente.
quando for hora inicio maior que 22:00

tipo exemplo:

entrada: 23:00

saida: 06:00

o programa se perde, ele mostra assim:

total de horas: 07:00

Noturnas: 00:00

Restante(diurnas):07:00

deveria ser assim né?

Total: 07:00

Noturnas: 06:00

Diurnas: 01:00

haaaa.......eu acho que eu não tinha te explicado que estes calculos não são ponto de funcionarios especifico....são pra viagem de caminhoneiros....ou seja o cara sai num dia numa determinada hora e a viagem as vezes demora dias......ai o programa se perdi.....pois se ele sair no dia 30/06 as 08:00 e chegar dia 0107 as 08:00, as horas totais...deveria dar 24....e da zero..alias ele se perde totalmente....acho que é porque você fez pra analizar sempre dois dias, um antes e outro depois.

Mas beleza........primeiro vou aprender assim...pra depois inovar.

Valeu...muito Agradecido.

Link para o comentário
Compartilhar em outros sites

  • 0
haaaa.......eu acho que eu não tinha te explicado que estes calculos não são ponto de funcionarios especifico....são pra viagem de caminhoneiros....ou seja o cara sai num dia numa determinada hora e a viagem as vezes demora dias......ai o programa se perdi.....pois se ele sair no dia 30/06 as 08:00 e chegar dia 0107 as 08:00, as horas totais...deveria dar 24....e da zero..alias ele se perde totalmente....acho que é porque você fez pra analizar sempre dois dias, um antes e outro depois.
com certeza este era um ponto importante. Parti do princípio que o indivíduo não trabalharia mais que 24:00hs.

Veja se você consegue adaptar, se não der avisa.

Link para o comentário
Compartilhar em outros sites

  • 0
com certeza este era um ponto importante. Parti do princípio que o indivíduo não trabalharia mais que 24:00hs.

Veja se você consegue adaptar, se não der avisa.

R.: Carinha...tentei hoje a tarde, mas não consegui, não sei se é porque mexo pouco com programação, pois quando é uma rotina um pouco grande para desenvolver a lógica... tenho muito dificuldade. Não é falta de vontade...tentar eu até tento...mas não deu..

valeu...muito Grato. :(

Link para o comentário
Compartilhar em outros sites

  • 0

Solução:

segue unit completa pra quem vir a precisar:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Mask, Buttons;

type
  TForm1 = class(TForm)
    MaskEdit1: TMaskEdit;
    MaskEdit2: TMaskEdit;
    MaskEdit3: TMaskEdit;
    MaskEdit4: TMaskEdit;
    MaskEdit5: TMaskEdit;
    MaskEdit6: TMaskEdit;
    BitBtn1: TBitBtn;
    LabeL4: TLabel;
    Label1: TLabel;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function IncDay(const AValue: TDateTime;
  const ANumberOfDays: Integer = 1): TDateTime;
begin
  Result := AValue + ANumberOfDays;
end;

function IncMinute(const AValue: TDateTime;
  const ANumberOfMinutes: Integer = 1): TDateTime;
begin
  Result := ((AValue * 1440) + ANumberOfMinutes) / 1440;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  Inicio: TDateTime;
  Final: TDateTime;
  Dias: Double;
  //
  i: Integer;
  TimHora, recebe: TDateTime;
  StrFim: String;
  IntTotMin: Integer;
  StrHoraAtual: String;
  StrIniNoturno: String;
  StrFimNoturno: String;
begin
  // não checa se as strings são datas ou horários válidos...
  // se não for, gera exceção
  if MaskEdit4.Text = '24:00' then
     begin
        MaskEdit4.Text:= '00:00';
        MaskEdit3.Text:= datetostr(incday(strtodate(MaskEdit3.Text)));
  end;
  Inicio := StrToDate(MaskEdit1.Text) + StrToTime(MaskEdit2.Text);
  Final := StrToDate(MaskEdit3.Text) + StrToTime(MaskEdit4.Text);
  Dias := Final - Inicio;
  label4.caption:=  formatdatetime('HH:MM:SS', Frac(Dias));
  //label4.caption:=  IntToStr(Trunc(Dias) * 24 + strtoint(copy(Label4.caption,1,2))) + copy(label4.caption,3,3);
  //
  TimHora:= Inicio;
  IntTotMin:= 0;
  StrFim:= '';
  StrIniNoturno:= copy(maskedit5.text,1,2) + copy(maskedit5.text,4,2);
  StrFimNoturno:= copy(maskedit6.text,1,2) + copy(maskedit6.text,4,2);
  i:= 0;
  while strfim = '' do
     begin
        inc(i);
        if incminute(TimHora,i) > Final then
           begin
              strfim:= 'f';
           end
        else
           begin
              incminute(TimHora,i);
              StrHoraAtual:=  copy(datetimetostr(incminute(TimHora,i)),12,2) + copy(datetimetostr(incminute(TimHora,i)),15,2);
              if (StrHoraAtual > StrIniNoturno) or (StrHoraAtual <= StrFimNoturno) then
                 begin
                    inc(IntTotMin);
              end;
        end;
  end;
  strfim:= inttostr(IntTotMin div 60) + ':' + inttostr(IntTotMin mod 60);
  recebe := StrToTime(StrFim); //
  Label1.caption:=  formatdatetime('HH:MM',(recebe));
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
shortdateformat:= 'dd/mm/yyyy';
end;

Aquela função acima...é devido eu trabalhar com delphi 4 e o mesmo não possui a DateUtils, então a função substitui ela....agora pra quem tem a DateUtils não precisa da função ele funciona perfeito.

Micheus Valeu a AJUDA...muito grato mesmo

Abraço..t+ :D

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...