Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 03.04.2014
Сообщений: 9

Таймер из Delphi в С++

07.04.2014, 20:26. Показов 1523. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу помощи в перекладке кода таймера из Делфи на Си++, ну или хотя бы подсказки, чем заменить Ttime

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.tmr1Timer(Sender: TObject);
var
  Temp : TTime;
begin
  Temp := TimeVal - Time;
  if Temp <= 0 then
   begin
    Tmr1.Enabled := False;
    lbl5.Visible := false;
    edt2.Visible := true;
    btn3.Visible := true;
    Edt2.SetFocus;
    Lbl1.Caption := FormatDateTime('hh:mm:ss', 0); 
    Exit;
   end;
  Lbl1.Caption := FormatDateTime('hh:mm:ss', Temp);
end;
//---------------При нажатии на кнопку---------------------
 Period := StrToInt(edt1.Text)  / (24 * 60 * 60); 
  TimeVal := Time + Period;  
  Lbl1.Caption := FormatDateTime('hh:mm:ss', Period); 
  Tmr1.Enabled := True;
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.04.2014, 20:26
Ответы с готовыми решениями:

Таймер похожий на таймер в delphi
Добрый всем)В общем хочу создать класс таймера похожий на класс таймера на delphi.Суть в том,что я хочу включать и выключать таймер за счет...

Таймер из Delphi в С++
Прошу помощи в перекладке кода таймера из Делфи на Си++, ну или хотя бы подсказки, чем заменить Ttime procedure...

Delphi 7 таймер
Всем привет! Подскажите как приостановить таймер. У меня программа выполняет действие по таймеру, но если клиент нажимает клавишу...

15
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
07.04.2014, 20:29
Зачем куда-то чего-то перекладывать? В Билдере есть точно такой же таймер. TTime, кстати, тоже. Не можешь сам убрать двоеточия из операции присваивания и заменить точки на -> ?
1
0 / 0 / 0
Регистрация: 03.04.2014
Сообщений: 9
07.04.2014, 20:52  [ТС]
Ок, лажанула серьезно.
Но тут еще один тупик возник [C++ Error] Unit1.cpp(21): E2015 Ambiguity between '_fastcall System::operator -(const System::AnsiString &,const System::Variant &)' and '_fastcall System::operator -(int,const System::Variant &)'
0
☆ Форумчанин(FSC)☆
 Аватар для 2ima
911 / 292 / 27
Регистрация: 28.04.2013
Сообщений: 2,466
Записей в блоге: 10
07.04.2014, 21:00
funfun, покажите свой билдеровский код
0
0 / 0 / 0
Регистрация: 03.04.2014
Сообщений: 9
07.04.2014, 21:08  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//---------------------------------------------------------------------------
#include <iostream>
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{ TTime TimeVal=0;
   TTime Temp;
  Temp = TimeVal - Time;
  if (Temp <= 0)
   {
    Timer1->Enabled = False;
    //lbl5->Visible = false;
    //edt2->Visible = true;  еще не добавлены на форму
    //btn3->Visible = true;
    //Edt2->SetFocus;  }
    Label1->Caption = FormatDateTime("hh:mm:ss", 0);
    return ;
   }
  Label1->Caption = FormatDateTime("hh:mm:ss", Temp);
}
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.04.2014, 22:30
C++
1
Temp = TimeVal - Time();  //  Скобки!!!
1
0 / 0 / 0
Регистрация: 03.04.2014
Сообщений: 9
08.04.2014, 19:16  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <vcl.h>
#pragma hdrstop
TTime TimeVal=0;
#include "Unit1.h"
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{ TTime Temp;
  Temp = TimeVal - Time();
  if (Temp <= 0)
   {
    Timer1->Enabled = False;
    //lbl5->Visible = false;
  //  edt2->Visible = true;
  //  btn3->Visible = true;
  //  Edt2->SetFocus;  }
    Label1->Caption = FormatDateTime("hh:mm:ss", 0);
    return ;
   }
  Label1->Caption = FormatDateTime("hh:mm:ss", Temp);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ TTime Period;
 Period = StrToInt(Edit1->Text)  / (24 * 60 * 60);
  TimeVal = Time + Period;
  Label1->Caption = FormatDateTime("hh:mm:ss", Period);
  Timer1->Enabled = True;
}
Build
[C++ Error] Unit1.cpp(21): E2015 Ambiguity between '_fastcall TDateTime::operator double() const' and '_fastcall TDateTime::operator int() const'
[C++ Error] Unit1.cpp(36): E2015 Ambiguity between '_fastcall System::TDateTime::operator =(const System::TDateTime &)' and '_fastcall System::TDateTime::operator =(const double)'
[C++ Error] Unit1.cpp(37): E2060 Illegal use of floating point

к своему стыду, вообще не очень понимаю, что в программе с типами происходит на данный момент
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.04.2014, 19:22
C++
1
TimeVal = Time() + Period; // Скобки они же грабли...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
08.04.2014, 19:38
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
TTime TimeVal;
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    TTime temp = TimeVal - Time();
    if ((int)temp <= 0)
    {
        Timer1->Enabled = false;
        Label1->Caption = FormatDateTime("hh:mm:ss", 0);
        return;
    }
    Label1->Caption = FormatDateTime("hh:mm:ss", temp);
 
}
// ---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TTime Period = StrToInt(Edit1->Text) / (24 * 60 * 60);
    TimeVal = Time() + Period;
    Label1->Caption = FormatDateTime("hh:mm:ss", Period);
    Timer1->Enabled = true;
}
Нет никаких ошибок...
1
0 / 0 / 0
Регистрация: 03.04.2014
Сообщений: 9
08.04.2014, 20:18  [ТС]
Спасибо большое, но почему-то таймер не отсчитывает время, хотя особых ошибок в алгоритме я отследить не могу, да и на делфи он исправен, может подскажите?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
08.04.2014, 20:55
Цитата Сообщение от funfun Посмотреть сообщение
почему-то таймер не отсчитывает время
Отсчитывает. По крайней мере, если ввести в Edit1 значение больше чем 172799
0
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,405
Записей в блоге: 3
08.04.2014, 21:10
Вот это и странно... Тот же код Delphi работает при любом значении Edit1, если объявить глобально
Delphi
1
var Period : Extended;
Аналогичная фишка в Buildere не проходит.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
08.04.2014, 21:19
Лучший ответ Сообщение было отмечено funfun как решение

Решение

В Паскале деление всегда вещественное, вот поэтому оно там работает сразу, а здесь компилятору надо носом ткнуть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
TTime TimeVal = 0;
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    TTime temp = TimeVal - Time();
    if ((double)temp <= 0)
    {
        Timer1->Enabled = false;
        Label1->Caption = FormatDateTime("hh:mm:ss", 0);
        return;
    }
    Label1->Caption = FormatDateTime("hh:mm:ss", temp);
 
}
// ---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TTime Period = (double)(StrToFloat(Edit1->Text) / (24 * 60 * 60));
    TimeVal = Time() + Period;
    Label1->Caption = FormatDateTime("hh:mm:ss", Period);
    Timer1->Enabled = true;
}
2
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.04.2014, 23:04
Цитата Сообщение от UI Посмотреть сообщение
C++
1
TTime Period = (double)(StrToFloat(Edit1->Text) / (24 * 60 * 60));
А зачем сдесь double ? Компилятору достаточно того что делимое float

И вероятно проще
C++
1
if (temp <= 0. )
Добавлено через 5 минут
Кстати для сравнения дат/времени, есть специальная ф-ция.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
09.04.2014, 00:17
Цитата Сообщение от Avazart Посмотреть сообщение
Компилятору достаточно того что делимое float
А ты откомпилировать пробовал без double?
[BCC32 Error] E2015 Ambiguity between '_fastcall System::TDateTime::TDateTime(const double) at e:\program files\embarcadero\rad studio\9.0\include\windows\rtl\systdate. h:49' and '_fastcall System::TDateTime::TDateTime(const int) at e:\program files\embarcadero\rad studio\9.0\include\windows\rtl\systdate. h:50'
Я ничего просто так, без проверки, не пишу, пора бы уже это понять.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.04.2014, 01:17
Ну так это не из-за целочисленного деления, а из-за конструктора.

Логичнее было интервал мерить в double а не TTime
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
TTime TimeVal = 0;
// ---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
        double temp = TimeVal - Time();
        if (temp <= 0.)
        {
                Timer1->Enabled = false;
                Label1->Caption = FormatDateTime("hh:mm:ss", 0);
                return;
        }
        Label1->Caption = FormatDateTime("hh:mm:ss", temp);
}
// ---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        double Period = StrToFloat(Edit1->Text)/(24 * 60 * 60);
        TimeVal = Time() + Period;
        Label1->Caption = FormatDateTime("hh:mm:ss", Period);
        Timer1->Enabled = true;
}
// --------------------------------------------------------------------------


Добавлено через 14 минут
Цитата Сообщение от Avazart Посмотреть сообщение
А зачем сдесь double ? Компилятору достаточно того что делимое float
Блин там не float, а long double поэтому неоднозначность с конструктором
(long double возврящает StrToFloat)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.04.2014, 01:17
Помогаю со студенческими работами здесь

Пример использования таймера в DLL-проекте
Можете пожалуйста показать пример использования таймера в DLL проэкте?

таймер циклов в Delphi
привет. помогите пожалуйста переделать программу из С++ на qtcreator в Delphi. Нужно отобразить время, за которое выполняются циклы for,...

Как обнулить таймер в DElphi
как вернуть состояние объекта Timer в стандартное положение, как бы обнулить его например как Label1.Caption:=''; Как сделать что то...

Delphi, потоки таймер, Что не так?
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,...

Какой код надо прописать в Delphi (задать таймер на 30 дней (системное время,год,м) программа закрывается
год, Месяц, день программа закрывается после компеляции осталась время неизменно Надо чтобы в коде сразу прописать дату закрытия


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru