|
Аналог "as" из Delphi в C++ Builder, Импорт графиков TeeChart в C++ Builder |
|
|
|
Aug 21 2018, 14:46
|
Участник
Группа: Свой
Сообщений: 67
Регистрация: 7-12-05
Из: Ростов-на-Дону
Пользователь №: 11 911
|
Всем Привет!
Подскажите плиз, как можно перевести данную строку на C++: (Chart1.Tools.Items[0] as TCursorTool).FollowMouse:=true;
Chart1.Tools.Items[0] типа TTeeCustomTool, а обратиться к нему нужно как к TCursorTool Просто назначить тоже не получается ошибку выдает на такое присвоение ChartTool1=Chart1->Tools->Items[0]; [bcc32 Error] bletest1.cpp(1594): E2034 Cannot convert 'TTeeCustomTool *' to 'TCursorTool *'
т.е. мне нужно получить координаты ChartTool1->XValue; но после импорта графика из файла *.tee, ChartTool1 пропадает, как и Series1. Как к сериям после импорта обращаться, я уже научился: Chart1->Series[9]->YValues->Value[i]; а вот как к Тулсам обращаться через Chart1 непонятно. Нашел пример на делфи, но как его переделать на C++ не пойму. Вроде есть typeid, typeinfo, но как их переменить непонятно.
p.s. Embarcadero® C++Builder 10.2, TeeChart Pro v2017.20.170306 32bit VCL
|
|
|
|
|
Aug 21 2018, 14:54
|
Профессионал
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831
|
Цитата(katmani @ Aug 21 2018, 17:46) Подскажите плиз, как можно перевести данную строку на C++: (Chart1.Tools.Items[0] as TCursorTool).FollowMouse:=true; Как-то так: Код (TCursorTool*)(Chart1->Tools->Items[0])->FollowMouse = true;
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Aug 21 2018, 15:41
|
Гуру
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493
|
Цитата(katmani @ Aug 21 2018, 17:46) Всем Привет!
Подскажите плиз, как можно перевести данную строку на C++: (Chart1.Tools.Items[0] as TCursorTool).FollowMouse:=true;
Chart1.Tools.Items[0] типа TTeeCustomTool, а обратиться к нему нужно как к TCursorTool Просто назначить тоже не получается ошибку выдает на такое присвоение ChartTool1=Chart1->Tools->Items[0]; [bcc32 Error] bletest1.cpp(1594): E2034 Cannot convert 'TTeeCustomTool *' to 'TCursorTool *'
т.е. мне нужно получить координаты ChartTool1->XValue; но после импорта графика из файла *.tee, ChartTool1 пропадает, как и Series1. Как к сериям после импорта обращаться, я уже научился: Chart1->Series[9]->YValues->Value[i]; а вот как к Тулсам обращаться через Chart1 непонятно. Нашел пример на делфи, но как его переделать на C++ не пойму. Вроде есть typeid, typeinfo, но как их переменить непонятно.
p.s. Embarcadero® C++Builder 10.2, TeeChart Pro v2017.20.170306 32bit VCL TCursorTool* t = nullptr; t = dynamic_cast <TCursorTool*> (Chart1->Tools->Items[0]); if (t != nullptr) t->FollowMouse = true; В принципе на нулл в данном случае проверять не надо. https://ru.m.wikipedia.org/wiki/Динамическа...ция_типа_данных" Оператор is позволяет проверить, является ли объект или тип наследником определённого типа, а оператор as используется для приведения объектов или интерфейсов от одного типа к другому, являясь аналогом dynamic_cast в C++.»
|
|
|
|
|
Aug 22 2018, 05:53
|
Участник
Группа: Свой
Сообщений: 67
Регистрация: 7-12-05
Из: Ростов-на-Дону
Пользователь №: 11 911
|
Цитата(Forger @ Aug 21 2018, 17:54) Как-то так: Код (TCursorTool*)(Chart1->Tools->Items[0])->FollowMouse = true; Добавил скобки и заработало. Спасибо! Код ((TCursorTool*)(Chart1->Tools->Items[0]))->FollowMouse = true; Итоговый вариант доступа к графику через Chart1, а не через Series1 и ChartTool1, после импорта из *.tee файла, выглядит так: Код void __fastcall TForm1::Chart1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { AnsiString str,str2;
str=Chart1->Tools->Items[0]->Description(); str2="Cursor";
if((Chart1->Tools->Count>0)&&(CompareText(str, str2)==0)) { str="Х="; str+=(int)(((TCursorTool*)(Chart1->Tools->Items[0]))->XValue); str+=" Y="; str+=(int)(((TCursorTool*)(Chart1->Tools->Items[0]))->YValue); Label20->Caption=str;
if(GLOBAL_DATA_LEN>(int)(((TCursorTool*)(Chart1->Tools->Items[0]))->XValue)) { str="VCNL="; str+=Chart1->Series[0]->YValues->Value[(int)(((TCursorTool*)(Chart1->Tools->Items[0]))->XValue)]; Label21->Caption=str; str="ACC X="; str+=Chart1->Series[1]->YValues->Value[(int)(((TCursorTool*)(Chart1->Tools->Items[0]))->XValue)]; Label22->Caption=str; str="ACC Y="; str+=Chart1->Series[2]->YValues->Value[(int)(((TCursorTool*)(Chart1->Tools->Items[0]))->XValue)]; Label23->Caption=str; str="ACC Z="; str+=Chart1->Series[3]->YValues->Value[(int)(((TCursorTool*)(Chart1->Tools->Items[0]))->XValue)]; Label24->Caption=str; } else { Label21->Caption="VCNL= выход за пределы"; Label22->Caption="ACC X= выход за пределы"; Label23->Caption="ACC Y= выход за пределы"; Label24->Caption="ACC Z= выход за пределы"; }
} } Цитата(DASM @ Aug 21 2018, 18:41) TCursorTool* t = nullptr; t = dynamic_cast <TCursorTool*> (Chart1->Tools->Items[0]); if (t != nullptr) t->FollowMouse = true; Выдает ошибку на nullptr, хотя на экране это слово выделено как зарезервированное слово (типа как int или double) [bcc32 Error] bletest1.cpp(1585): E2451 Undefined symbol 'nullptr' Спасибо за подсказку! может тут тоже нужно было немного добавить и заработало бы, но я не понял что Цитата(DASM @ Aug 21 2018, 20:12) Господи, это самый TChart, графики на который я в борланде выводил 17 лет назад, он еще жив? Круто тогда Да жив и на разных платформах работает ( сайт TeeChart): Даже на iOS, правда еще не пробовал, но хочется
|
|
|
|
|
Aug 22 2018, 07:57
|
Участник
Группа: Свой
Сообщений: 67
Регистрация: 7-12-05
Из: Ростов-на-Дону
Пользователь №: 11 911
|
Цитата(DASM @ Aug 22 2018, 10:02) выдает ошибку на nullptr, - замените на NULL Работает. Спасибо! Код TCursorTool* t = NULL; t = dynamic_cast <TCursorTool*> (Chart1->Tools->Items[0]); t->FollowMouse = true;
|
|
|
|
|
Aug 22 2018, 08:13
|
Профессионал
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877
|
Цитата(katmani @ Aug 21 2018, 17:46) Embarcadero® C++Builder 10.2 Цитата(katmani @ Aug 22 2018, 08:53) Выдает ошибку на nullptr Цитата("cppreference.com") nullptr (since C++11) Господи, срам-то какой! си++ билдер 2018 года выпуска "из коробки" не знает про стандарт 11-го года.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Aug 22 2018, 08:38
|
Участник
Группа: Свой
Сообщений: 67
Регистрация: 7-12-05
Из: Ростов-на-Дону
Пользователь №: 11 911
|
Цитата(esaulenka @ Aug 22 2018, 11:13) Господи, срам-то какой! си++ билдер 2018 года выпуска "из коробки" не знает про стандарт 11-го года. Вообще то он 2017 года Embarcadero® C++Builder 10.2 Version 25.0.26309.314 Copyright © 2017 Embarcadero Technologies, Inc. All Rights Reserved.
|
|
|
|
|
Aug 22 2018, 15:39
|
Гуру
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493
|
Цитата(Forger @ Aug 22 2018, 18:22) Так никогда не скажет тот, кому приходилось работать в обеих средах. Каждая хороша для свои задач. Если выбирать из этих двух, то в эмбеддерских делах, имхо, Qt более предпочтителен. Хотя бы потому, что тоже на плюсах (один и тот же код не нужно плодить на плюсах и шарпе). Вид у прог на нем какой то жуткий, из 90х, что я видел. Да и на шарпе пробовал немного - все очень даже понятно. Начинающий точно быстрее разберётся, чем с Qt. Да и плюсы сейчас - вообще наверное самый сложный из всех языков (и самый опасный)
|
|
|
|
|
Aug 22 2018, 16:36
|
Профессионал
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831
|
Цитата(DASM @ Aug 22 2018, 18:39) Вид у прог на нем какой то жуткий, из 90х, что я видел. Теперь все ясно, вы в нем не работали - судите о "конфете" по обертке, а не по содержимому. Цитата Да и на шарпе пробовал немного - все очень даже понятно. Пробовать и применять - это разные вещи. Шарп требует дотнет со всеми вытекающими, а плюсы вообще не зависят от платформы, ведь даже убогие 8-битники его нормально держат (например, та же ардуина). Поэтому я повторюсь: каждый инструмент хорош для свои задач.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|