Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

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





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, 15:41   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Использовать не счетчик
Цитата:
Код:
Dec(secs);
а реальное время(Now) и контрольное время (время в которое "счетчик" должен обнулиться).
Код:
secs:=SecondsBetween(x,Now);
Цитата:
как сделать чтобы ты к примеру выключил программу,а потом включил и он не сбивался
сохранять контрольное время в файле и при повторном запуске считывать его оттуда.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 31.12.2017, 17:57   #3
Viktoria14
Новичок
Джуниор
 
Регистрация: 27.12.2017
Сообщений: 17
По умолчанию

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

Цитата:
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 Кб, 98 просмотров)
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 03.01.2018, 00:04   #5
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Вот код для работы таймера с сохронением
Код:
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 в 00:08.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Принтер 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 04:40