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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 15.05.2014, 12:41   #1
Spiritas
Пользователь
 
Регистрация: 05.12.2010
Сообщений: 22
По умолчанию Проблема в обратном отсчете

Нужно сделать чтобы в Label5 при числе взятом с ini файла начинался обратный отсчет и останавливался при 0.
Беру число и ini файла но не знаю как прикрепить к нему уменьшение на 1
Ну чтоб на label было 30 потом 29 и т.д

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
const DefaulttimeValue = 60;
var Ini : TIniFile;
  //time_ini : integer;
begin
  Ini := TIniFile.Create( ExtractFilePath(Application.ExeName)+'1.ini' );
//  time_ini     := Ini.ReadInteger( 'Timer', 'Time', DefaulttimeValue );
  label5.caption:=(inif.ReadString('Timer','time',''));
  Ini.Free;
  begin
    Timer1.Enabled := False; 
  end;
end;
В низу сам ини файл откуда идут данные
з.ы сделал сам но забыл сохраниться....и нервы после этого уже на пределе(
Вложения
Тип файла: txt ini.txt (221 байт, 119 просмотров)

Последний раз редактировалось Spiritas; 15.05.2014 в 12:47.
Spiritas вне форума
Старый 15.05.2014, 12:54   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) я же в прошлой вашей теме давал рабочий исходник.
Не подошло?

2) чтение из ini файла нужно вынести из процедуры, назначенной на таймер.
Это нужно делать либо на событии открытия формы, либо на том событии, которое у Вас запускает обратный отсчёт (на кнопку "Старт", например).
Serge_Bliznykov вне форума
Старый 15.05.2014, 13:25   #3
Spiritas
Пользователь
 
Регистрация: 05.12.2010
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) я же в прошлой вашей теме давал рабочий исходник.
Не подошло?

2) чтение из ini файла нужно вынести из процедуры, назначенной на таймер.
Это нужно делать либо на событии открытия формы, либо на том событии, которое у Вас запускает обратный отсчёт (на кнопку "Старт", например).
1)не не подошло(


2) ну допустим
TForm1.FormCreate
label5.caption:=(inif.ReadString('T imer','time',''));
timer1.enabled:=true;
но он же по сути пойдет вперед

мы идем по кругу....но я повторюсь что совершенно забыл как сделать этот обратный отсчет

Последний раз редактировалось Spiritas; 15.05.2014 в 13:31.
Spiritas вне форума
Старый 15.05.2014, 14:35   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так. ещё одна попытка.

вот рабочее-крестьянский (простой, как плуг) вариант:
Код:
implementation

{$R *.DFM}

var
  time_remain : integer;


procedure TForm1.FormCreate(Sender: TObject);
const DefaulttimeValue = 60;
var Ini : TIniFile;
begin
  Ini := TIniFile.Create( ExtractFilePath(Application.ExeName)+'1.ini' );
  time_remain := ini.ReadInteger('Timer','time', DefaulttimeValue);
  Ini.Free;
  label5.caption:= 'Осталось '+IntToStr(time_remain);
  Timer1.Interval := 1000; {раз в секунду}
  Timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Dec(time_remain);
  if time_remain>=0 then
    label5.caption:= 'Осталось '+IntToStr(time_remain)
  else
  begin
     label5.caption := 'Время вышло!';
     Timer1.Enabled := false
  end;
end;
события назначить на открытие формы и на таймер соответственно.
Если этот вариант не подходит, тогда я пас. Я проще уже ничего не смогу написать...


p.s. но всё таки, я Вам ОЧЕНЬ рекомендую вариант с обратным отсчётом на основе системных часов.
Он отличаться будет буквально парой строчек, а по качеству/надёжности превосходит вариант с простым счётчиком на порядок!!
Serge_Bliznykov вне форума
Старый 15.05.2014, 15:44   #5
Spiritas
Пользователь
 
Регистрация: 05.12.2010
Сообщений: 22
По умолчанию

пардон но у меня вылезла ошибка программа не в курсе что такое dec
хотя я помню что это уменьшение/
стоит делфи 7

сама ошибка - unknown directive dec

Последний раз редактировалось Spiritas; 15.05.2014 в 15:46.
Spiritas вне форума
Старый 15.05.2014, 16:31   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Spiritas Посмотреть сообщение
пардон но у меня вылезла ошибка программа не в курсе что такое dec
хотя я помню что это уменьшение/
стоит делфи 7

сама ошибка - unknown directive dec
Что-то Вы не то делаете!!!

Покажите, пожалуйста скриншот с ошибкой (желательно так, чтобы было виден код, на котором эта ошибка возникла)

p.s. да, dec(Переменная) - это уменьшение целочисленного значения переменной; по сути тоже самое, что и
Переменная := Переменная - 1;
Serge_Bliznykov вне форума
Старый 15.05.2014, 17:16   #7
Spiritas
Пользователь
 
Регистрация: 05.12.2010
Сообщений: 22
По умолчанию

эту проблему я решил бегина нехватало
Проблемка теперь в том что он всегда берет число 60/ а надо чтобы он брал число из ini из значение time
забавно но он берет значение DefaulttimeValue которое 60... игнорируя при этом в ini time=30

Последний раз редактировалось Spiritas; 15.05.2014 в 17:36.
Spiritas вне форума
Старый 16.05.2014, 00:12   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) как у Вас называется ini файл (в коде открывается файл 1.INI)
2) где он лежит (в какой папке)? (должен лежать там же, где и EXE-шник программы)
Serge_Bliznykov вне форума
Старый 16.05.2014, 08:55   #9
Spiritas
Пользователь
 
Регистрация: 05.12.2010
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) как у Вас называется ini файл (в коде открывается файл 1.INI)
2) где он лежит (в какой папке)? (должен лежать там же, где и EXE-шник программы)
1) ну название меняется от выбранного ini файла а сам путь программа находить через
if OpenDialog1.Execute then
IniF:= TIniFile.Create (OpenDialog1.FileName); (надеюсь эта та строка)
2) в папке он находится под названием test внутри папки с программой

p.s в самом первом посте он брал откуда надо время(

Последний раз редактировалось Spiritas; 16.05.2014 в 09:13.
Spiritas вне форума
Старый 16.05.2014, 08:59   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Spiritas Посмотреть сообщение
1) ну название меняется от выбранного ini файла
2) в папке он находится test внутри папки с программой
ну вот Вам и ответ на ваш вопрос (почему время не берётся из ini файла)!!
В программе Вы этот факт не учитываете:
Цитата:
Код:
... TIniFile.Create( ExtractFilePath(Application.ExeName)+'1.ini' );
перевожу на русский -
Создать экземляр класса TIniFile и открыть файл
с именем, полученным из имени папки, откуда запущен EXEшник (ваш проект) и имени файла "1.ini"

напишите в этой строке имя вашего INI файла и будет время браться из него
Serge_Bliznykov вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перестановка байтов в обратном порядке с++ Niklitel Помощь студентам 1 17.03.2014 09:10
Столбцы в обратном порядке Арианна Microsoft Office Excel 5 16.01.2014 06:05
переписать массив в обратном порядке Настя22 Паскаль, Turbo Pascal, PascalABC.NET 1 25.02.2011 11:01
печать страниц в обратном порядке Олекса Microsoft Office Word 4 30.03.2009 09:45
В обратном порядке mari.ha Общие вопросы C/C++ 7 25.12.2008 21:36