Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 20.10.2014
Сообщений: 24
1

ShowMessage() и его использование в методе класса

29.11.2014, 00:10. Показов 3391. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.
К сожалению, не получается правильно вывести сообщение функцией ShowMessage()
Принцип работы программы:
Есть расписание в формате String (XML файл).
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
<Railway>
  <Train>
    <Number>6433/6638</Number>
    <Route>Коростень - Киев</Route>
    <DepartureStation>Коростень-Подольский</DepartureStation>
    <ArrivalStation>Киев-Пассажирский</ArrivalStation>
    <ArrivalTime>00:09</ArrivalTime>
    <DepartureTime>-</DepartureTime>
  </Train>
  <Train>
    <Number>776П</Number>
    <Route>Киев - Харьков</Route>
    <DepartureStation>Киев-Пассажирский</DepartureStation>
    <ArrivalStation>Харьков-Пассажирский</ArrivalStation>
    <ArrivalTime>-</ArrivalTime>
    <DepartureTime>00:18</DepartureTime>
  </Train>
</Railway>
Есть класс Msg и метод класса ArrivalMsg(...)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Msg
{
    public:
    void ArrivalMsg(String ArrivalTimeTrain, String Time, String NumberTrain, String RouteTrain); //, String TypeTrain, String Track, String Platform
};
//---------------------------------------------------------------------------
void Msg::ArrivalMsg(String ArrivalTimeTrain, String Time, String NumberTrain, String RouteTrain)   //, String TypeTrain, String Track, String Platform
{
    if (Time - ArrivalTimeTrain == String("00:05:00"))
    {
        ShowMessage(String("поезд #") + NumberTrain + String(" ") + RouteTrain + String(" прибывает на ")  + String(" путь ") + String(". Время прибытия: ") + ArrivalTimeTrain);
    }
    else if (Time - ArrivalTimeTrain == String("00:02:30"))
    {
        ShowMessage(String("поезд #") + NumberTrain + String(" ") + RouteTrain + String(" прибывает на ") + String(" путь ") + String(". Время прибытия: ") + ArrivalTimeTrain);
    }
    else if (Time - ArrivalTimeTrain == String("00:01:00"))
    {
        ShowMessage(String("поезд #") + NumberTrain + String(" ") + RouteTrain + String(" прибывает на ") + String(" путь ") + String(". Время прибытия: ") + ArrivalTimeTrain);
    }
};
Примерно так это выглядит.
Вызывается этот метод каждый раз, когда срабатывает TTimer с интервалом 1000 ms.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm3::TimerTimer(TObject *Sender)
{
    DTP->Time = DTP->Time + String("00:00:01");
    Text->Caption = DateTimeToStr(DTP->Time);
    _di_IXMLRailwayType Railway = GetRailway(XML);
    for (int i = 0; i < Railway->Count; i++)
    {
        if (Railway->Train[i]->Get_ArrivalTime() != String("-"))
        {
            Msg Trains;
            Trains.ArrivalMsg(Railway->Train[i]->Get_ArrivalTime(), DTP->Time, Railway->Train[i]->Get_Number(), Railway->Train[i]->Get_Route());
        }
    }
}
Сама программа компилируется нормально, запускается, но после первой же секунды (то есть после первого срабатывания таймера, вылетает ошибка с сообщением "Project *.exe raised exception class EVariantTypeCastError with message 'Could not convert variant of type (String) into type (Double)'.
Я, конечно, понимаю суть написанного, но не могу понять, где используется тип данных Double и как исправить проблему?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2014, 00:10
Ответы с готовыми решениями:

Использование в методе шаблонного класса сразу 2-х шаблонных параметров
Доброго времени суток форумчане! Мой вопрос находится в примере ... //##### ..... ##### //...

Как правильно создать массив объектов текущего класса в методе данного класса?
Привет! Ставится задача создания метода, который формирует массив объектов. Правильно ли делать...

Обратиться к элементам класса в методе ButtonClick
Здравствуйте. Есть класс class Elem{ public: int a; }; и метод void __fastcall...

Передача параметров в методе Queue или Synchronize класса TThtread
Доброго времени суток! Пожалуйста, помогите разобраться с принципами работы лямбда функций или...

6
120 / 142 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
29.11.2014, 06:04 2
Наверное это <Number>6433/6638</Number> считается как double так как там деление двух чисел
0
0 / 0 / 0
Регистрация: 20.10.2014
Сообщений: 24
29.11.2014, 15:16  [ТС] 3
Цитата Сообщение от demmax2004 Посмотреть сообщение
Наверное это <Number>6433/6638</Number> считается как double так как там деление двух чисел
В XML Data Binding Wizard это String, а не Double.
Интуиция мне подсказывает, что неправильно считается время в условии:
C++
1
2
3
4
if (Time - ArrivalTimeTrain == String("00:05:00"))
    {
        ShowMessage(String("поезд #") + NumberTrain + String(" ") + RouteTrain + String(" прибывает на ")  + String(" путь ") + String(". Время прибытия: ") + ArrivalTimeTrain);
    }
Time в формате 00:00:00, ArrivalTimeTrain в формате 00:00.
Время в XML файле я уже ставил и в формате 00:00:00, но не помогло.
В чем может быть ошибка?
Миниатюры
ShowMessage() и его использование в методе класса  
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
01.12.2014, 08:53 4
Выставьте точки остановки, пройдитесь в пошаговом режиме и воочию пронаблюдайте где выскочит ошибка.

И вообще работать так со строками очень плохо. Сама задумка ужасает.

Используйте кстати заместо ShowMessage лучше потоконезависимую MessageBox.
0
120 / 142 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
01.12.2014, 09:33 5
Цитата Сообщение от SatanaXIII Посмотреть сообщение
лучше потоконезависимую MessageBox.
С уточнением MessageBox(NULL, ............)
0
0 / 0 / 0
Регистрация: 20.10.2014
Сообщений: 24
01.12.2014, 14:46  [ТС] 6
Цитата Сообщение от SatanaXIII Посмотреть сообщение
И вообще работать так со строками очень плохо. Сама задумка ужасает.
Что именно?

Цитата Сообщение от SatanaXIII Посмотреть сообщение
Используйте кстати заместо ShowMessage лучше потоконезависимую MessageBox.
Решил вместо всплывающих окон сделать log-окно.
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
02.12.2014, 08:36 7
Цитата Сообщение от Dynortice Посмотреть сообщение
Что именно?
Из времени вычитать строку и сравнивать с константой, преобразованной в строку. Фарш.

P.S.
C++
ShowMessage( String().sprintf( "Поезд #%s %s прибывает на %s путь. Время прибытия: %s",
                                NumberTrain, RouteTrain, Track, ArrivalTimeTrain ) );
1
02.12.2014, 08:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2014, 08:36
Помогаю со студенческими работами здесь

Использование метода класса как функции в качестве типизированного аргумента в методе класса
Использование метода класса как функции в качестве типизированного аргумента в методе класса ...

Использование this в методе класса
Добрый день! Пытаюсь написать класс красно-чёрного дерева. Вот фрагмент класса: class Tree { ...

Использование ПП с входным объектом в методе того же класса
Такая ситуация: в классе page должна использоваться ПП void replace(page* a). Но как это сделать?...

Использование соединения первого класса в методе второго
вот явный пример, который выдает ошибку: Fatal error: Cannot access empty property class Main...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru