Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 31.12.2017, 15:47   #1
Viktoria14
Новичок
 
Регистрация: 27.12.2017
Сообщений: 15
Репутация: -5
Радость Отсчёт времени без остановки

Есть таймер ,но при запуске он начинает заново отсчитывать как сделать чтобы ты к примеру выключил программу,а потом включил и он не сбивался а продолжал отсчитывать время?





unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls;

type

{ TForm1 }

TForm1 = class(TForm)


Label1: TLabel;
Timer1: TTimer;

procedure FormCreate(Sender: TObject);
procedure Label1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
secs : integer; // <---
end;

var
Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }



procedure TForm1.FormCreate(Sender: TObject);
begin
secs:= 86400;
Form1.BorderStyle := bsSingle;
Form1.BorderStyle:=bsDialog;
end;

procedure TForm1.Label1Click(Sender: TObject);
begin

end;

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

end.
Viktoria14 вне форума   Ответить с цитированием
Старый 31.12.2017, 16:41   #2
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,682
Репутация: 2097
По умолчанию

Использовать не счетчик
Цитата:
Код:

Dec(secs);

а реальное время(Now) и контрольное время (время в которое "счетчик" должен обнулиться).
Код:

secs:=SecondsBetween(x,Now);

Цитата:
как сделать чтобы ты к примеру выключил программу,а потом включил и он не сбивался
сохранять контрольное время в файле и при повторном запуске считывать его оттуда.
__________________
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума   Ответить с цитированием
Старый 31.12.2017, 18:57   #3
Viktoria14
Новичок
 
Регистрация: 27.12.2017
Сообщений: 15
Репутация: -5
По умолчанию

Выдаёт ошибку
unit1.pas(60,24) Error: Identifier not found "x"
unit1.pas(60,9) Error: Identifier not found "SecondsBetween"
Viktoria14 вне форума   Ответить с цитированием
Старый 01.01.2018, 17:16   #4
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,682
Репутация: 2097
По умолчанию

Цитата:
unit1.pas(60,24) Error: Identifier not found "x"
Код:

var x: ????
...
x:=???

Цитата:
unit1.pas(60,9) Error: Identifier not found "SecondsBetween"
uses ????
Изображения
Тип файла: png Снимок.PNG (37.7 Кб, 22 просмотров)
__________________
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума   Ответить с цитированием
Старый 03.01.2018, 01:04   #5
Aliens_wolfs
Участник клуба
 
Регистрация: 16.12.2009
Адрес: WWW ЛЕНИНГРАД СПб точка РУ
Сообщений: 843
Репутация: 435
По умолчанию

Вот код для работы таймера с сохронением
Код:

var
  Form1: TForm1;
  TimeStart: TDateTime;

implementation

{$R *.dfm}
uses
IniFiles;

//Функция для чтения из ini файла
Function ReadStringIniFile(const IniFile, Section, Ident: String; Default: String=''): String;
var
  Ini: TIniFile;
begin
  Ini := TIniFile.Create(IniFile);
  result := Ini.ReadString(Section, Ident, Default);
  Ini.Free;
end;

//Функция для записи в ini файл
procedure WriteStringIniFile(const IniFile, Section, Ident: String; Default: String);
var
  Ini: TIniFile;
begin
  Ini := TIniFile.Create(IniFile);
  Ini.WriteString(Section, Ident, Default);
  Ini.Free;
end;

//сброс таймера
procedure TForm1.Button1Click(Sender: TObject);
begin
TimeStart:= Now;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
Times: string;
begin
Times:= ReadStringIniFile(ExtractFilePAth(Application.ExeName) + 'config.ini', 'Options', 'Times');
if Times <> '' then
TimeStart:= StrToDateTime(Times)
else
TimeStart:= Now;
Timer1.Interval:= 100;
Timer1.Enabled:= true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption:= FormatDateTime('hh:mm:ss', now - TimeStart);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
WriteStringIniFile(ExtractFilePAth(Application.ExeName) + 'config.ini', 'Options', 'Times', DateTimeTostr(TimeStart));
end;


Последний раз редактировалось Aliens_wolfs; 03.01.2018 в 01:08.
Aliens_wolfs вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Принтер Kyocera FS-2000D печатает без остановки MooNDeaR Железо 10 17.10.2014 11:01
Отсчёт времени Heimdaller JavaScript, Ajax 1 12.08.2013 23:18
Обратный отсчёт времени Che Guevara JavaScript, Ajax 2 05.05.2011 14:03
Отсчёт времени(сколько осталось до...) acmilan JavaScript, Ajax 2 23.07.2009 08:10
Ввод с клавиатуры без остановки программы ActioNs Общие вопросы C/C++ 1 25.12.2008 05:40


10:53.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru