Blackleaf Postado Maio 3, 2008 Denunciar Share Postado Maio 3, 2008 Eu queria saber como faço para somar um "timer2" com outro "timer3" e que o resultado apareça em popup tipo ShowMessage. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Maio 3, 2008 Denunciar Share Postado Maio 3, 2008 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éiasse 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Blackleaf Postado Maio 3, 2008 Autor Denunciar Share Postado Maio 3, 2008 é 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!) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Maio 3, 2008 Denunciar Share Postado Maio 3, 2008 é 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 windowsvoce pode usar o codigo acima para marcar o tempo inicial e para o tempo final voce chama um provedor para ajustar o horario do relogioabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Blackleaf Postado Maio 3, 2008 Autor Denunciar Share Postado Maio 3, 2008 Já vi o pessoal fazer isso q eu tou dizendo facilmente com o codigo tipo:Label4.caption:=(Time1 + Time2);Algo do tipos não lembra, me explica direito como pegar a hora de um servidor. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Maio 4, 2008 Denunciar Share Postado Maio 4, 2008 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 seriaprocedure 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.htmlhttp://www.ntp.br/ntp.htmlhttp://ntp.br/utilizando.htmlabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 4, 2008 Denunciar Share Postado Maio 4, 2008 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Blackleaf Postado Maio 4, 2008 Autor Denunciar Share Postado Maio 4, 2008 (editado) É 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);?? Editado Maio 4, 2008 por Blackleaf Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Maio 4, 2008 Denunciar Share Postado Maio 4, 2008 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 7unit 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Blackleaf Postado Maio 5, 2008 Autor Denunciar Share Postado Maio 5, 2008 (editado) Eu consegui aqui ;)Mas como eu posso evitar q alterem o "edit1"?Sou seu fã Jhonas ;) Editado Maio 5, 2008 por Blackleaf Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 5, 2008 Denunciar Share Postado Maio 5, 2008 (editado) 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 Maio 5, 2008 por Micheus Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Blackleaf
Eu queria saber como faço para somar um "timer2" com outro "timer3" e que o resultado apareça em popup tipo ShowMessage.
Link para o comentário
Compartilhar em outros sites
10 respostass a esta questão
Posts Recomendados
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.