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

Soma e ShowMessage


Blackleaf

Pergunta

10 respostass a esta questão

Posts Recomendados

  • 0
Eu queria saber como faço para somar um "timer2" com outro "timer3" e que o resultado apareça em popup tipo ShowMessage.

Não entendi direito.... porque somar um timer com outro ??? ou seria somar um tempo incial com um tempo final ???

e porque mostrar num showmessage se o timer o chamaria para a cada segundo para mostrar ???

voce tem que ser um pouco mais claro nas suas idéias

se for para somar um tempo inicial com um tempo final ...

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Timer2: TTimer;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    Label4: TLabel;
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  TempoFinal, TempoInicial, Tempo : TTime;
  n : integer = 0;
implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   Label1.Caption:=FormatDateTime('hh:nn:ss',Time);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   n := n + 1;
   if n = 1 then
      begin
         TempoInicial:=StrToTime(Label1.Caption);
         Label2.Caption:= TimeToStr(TempoInicial);
      end
   else
      begin
         TempoFinal:=StrToTime(Label1.Caption);
         Label3.Caption:= TimeToStr(TempoFinal);
         Tempo:= TempoInicial + TempoFinal;  ///  ou pode ser o tempo inical - o tempo final
         n := 0;
      end;

   Label4.Caption:= TimeToStr(Tempo);
end;

end.

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

é porque eu tou fazendo um programa para o tempo do windows parar, aí para recuperar o horario, eu quero um botão que some o horário de quando eu comecei (ex: 13:00:00) com o tempo de uso (ex: 00:35:30). Aí quando eu apertar o botão, vai apercer uma janela dizendo: (ex: Hora recuperada = 13:35:30!)

Link para o comentário
Compartilhar em outros sites

  • 0
é porque eu tou fazendo um programa para o tempo do windows parar, aí para recuperar o horario, eu quero um botão que some o horário de quando eu comecei (ex: 13:00:00) com o tempo de uso (ex: 00:35:30). Aí quando eu apertar o botão, vai apercer uma janela dizendo: (ex: Hora recuperada = 13:35:30!)

Quando o tempo do relogio do windows (BIOS) for parado, voce não terá como contabilizar o tempo em que está usando, a não ser por um outro timer independente que estaria utilizando o processador para contabilizar o tempo, entretanto se por algum motivo o processador travar ou for exigido 100% de processamento, seu tempo vai ficar defasado.

A solução seria então pegar o horario de um provedor ou um site, para ajustar novamente o relogio do windows

voce pode usar o codigo acima para marcar o tempo inicial e para o tempo final voce chama um provedor para ajustar o horario do relogio

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

me explica direito como pegar a hora de um servidor.

basta usar o comando net time (DOS)

net time \\nome_da_maquina /SET /Y

aonde nome da maquina é o nome netbios, nome dns, ou IP

NET TIME

[\\computador | /DOMAIN[:domínio] | /RTSDOMAIN[:domínio]] [/sET]

[\\computador] /QUERYSNTP

[\\computador] /SETSNTP[:lista de servidores ntp]

usando o delphi para uma rede local seria

procedure TForm1.Button1Click(Sender: TObject);
begin
    WinExec(PChar('NET TIME \\nome da maquina /set /yes'),SW_Normal);
end;
se for um servidor externo, a paleta de componentes IndyClients já tem um componente que faz isso, que é o IdSNTP, onde SNTP significa Simple Network Time Protocol, disponivel para o delphi 7
procedure TForm1.Button1Click(Sender: TObject);
begin
   IdSNTP1.Active := True;
repeat
  edit1.Text := FormatDateTime('dd/mm/yyyy hh:mm:ss', IdSNTP1.DateTime);
Until (IdSNTP1.DateTime <> 0);
end;

Mais informações sobre o assunto:

NTP significa Network Time Protocol ou Protocolo de Tempo para Redes. É o protocolo que permite a sincronização dos relógios dos dispositivos de uma rede como servidores, estações de trabalho, roteadores e outros equipamentos à partir de referências de tempo confiáveis.

http://ntp.br/guia.html

http://www.ntp.br/ntp.html

http://ntp.br/utilizando.html

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Já vi o pessoal fazer isso q eu tou dizendo facilmente com o codigo tipo:

Label4.caption:=(Time1 + Time2);

Jhonas, apesar de tudo o que você já expôs ao colega Blackleaf, não custa nada corrigir este exemplo para dele:

Label4.caption := TimeToStr(Time1 + Time2);

mas isto, apenas mostrará a soma de dois horários (variáveis do tipo TTime) - mais nada.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Blackleaf ... fica ai a minha sugestão para voce... um programa para parar o relogio do windows num primeiro click de botão, e para atualizar o relogio do windows por um servidor externo com outro click de botão.

OBS: Para o Delphi 7

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdMessageClient, IdNNTP, IdUDPBase,
  IdUDPClient, IdSNTP;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    Label1: TLabel;
    IdSNTP1: TIdSNTP;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

  lig : integer = 0;

implementation

{$R *.DFM}


function SetNewTime(Hora, Min, Seg: word): boolean;
var
  st: TSYSTEMTIME;
begin
  GetLocalTime(st);           // Pega hora corrente
  st.wHour := Hora;
  st.wMinute := Min;
  st.wSecond := seg;
  if not SetLocalTime(st) then
    Result := FALSE
  else
    Result := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Present: TDateTime;
  Hour, Min, Sec, MSec: word;
  hh, mm, ss : shortstring;
begin
  Present:= Now;
  DecodeTime(Present, Hour, Min, Sec, MSec);

  sec := sec - 1;   // mantem o relogio parado entre um segundo e outro

  hh := IntToStr(hour);
  mm := IntToStr(min);
  ss := IntToStr(sec);

  SetNewTime(StrToInt(hh),StrToInt(mm),StrToInt(ss));

  Label1.Caption := 'horario atual = ' + hh+':'+mm+':'+ss;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  Present: TDateTime;
  Hour, Min, Sec, MSec: word;
  hh, mm, ss : shortstring;
begin
   lig := lig + 1;
   if lig = 1 then
      Timer1.Enabled := true
   else
      begin
         Timer1.Enabled := false;
         lig := 0;

         // atualiza o relogio do windows

         IdSNTP1.Host := 'time.nist.gov';
         IdSNTP1.Active := True;
         repeat
            edit1.Text := FormatDateTime('dd/mm/yyyy hh:mm:ss', IdSNTP1.DateTime);
         Until (IdSNTP1.DateTime <> 0);

         Present:= IdSNTP1.DateTime;
         DecodeTime(Present, Hour, Min, Sec, MSec);
         SetNewTime(Hour,Min,Sec);
      end;
end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Mas como eu posso evitar q alterem o "edit1"?
Que tal utilizar a propriedade ReadOnly? Defina-a como False.

[Editado] ----------------------------

Blackleaf, vejo que você editou sua resposta e conseguiu resolver o problema.

Só para não ficar esta dúvida, eu vou explicar esta dúvida, mas esta abordagem, aparentemente, não é a solução do seu problema.

É isso q eu quero, um negocio simples.

Mas para eu somar dois tempos (timer)

Tenho q colocar esse código:

Label4.caption := TimeToStr(Time2 + Time3);

neste exemplo, Time2 seria o tempo congelado (aquele inicial) e Time3 seria o tempo decorrido. Assim, somando o horário em que o relógio parou, com o tempo decorrido, você deveria ter o tempo corrigido (próximo ou igual ao atual)

As variáveis são do tipo TTime - nada tem a ver com o Timer (componente temporizador)

Editado por Micheus
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,4k
×
×
  • Criar Novo...