AlexKoblov 0 21 августа, 2018 Опубликовано 21 августа, 2018 · Жалоба Всем Привет! Подскажите плиз, как можно перевести данную строку на 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; а вот как к Тулсам обращаться через Chart1 непонятно. Нашел пример на делфи, но как его переделать на C++ не пойму. Вроде есть typeid, typeinfo, но как их переменить непонятно. p.s. Embarcadero® C++Builder 10.2, TeeChart Pro v2017.20.170306 32bit VCL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 21 августа, 2018 Опубликовано 21 августа, 2018 · Жалоба Подскажите плиз, как можно перевести данную строку на C++: (Chart1.Tools.Items[0] as TCursorTool).FollowMouse:=true; Как-то так: (TCursorTool*)(Chart1->Tools->Items[0])->FollowMouse = true; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 21 августа, 2018 Опубликовано 21 августа, 2018 · Жалоба Всем Привет! Подскажите плиз, как можно перевести данную строку на 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; а вот как к Тулсам обращаться через 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++.» Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 21 августа, 2018 Опубликовано 21 августа, 2018 · Жалоба Господи, это самый TChart, графики на который я в борланде выводил 17 лет назад, он еще жив? Круто тогда Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexKoblov 0 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба Как-то так: (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= выход за пределы"; } } } 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' Спасибо за подсказку! может тут тоже нужно было немного добавить и заработало бы, но я не понял что Господи, это самый TChart, графики на который я в борланде выводил 17 лет назад, он еще жив? Круто тогда Да жив и на разных платформах работает (сайт TeeChart): Даже на iOS, правда еще не пробовал, но хочется :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба выдает ошибку на nullptr, - замените на NULL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexKoblov 0 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба выдает ошибку на nullptr, - замените на NULL Работает. Спасибо! TCursorTool* t = NULL; t = dynamic_cast <TCursorTool*> (Chart1->Tools->Items[0]); t->FollowMouse = true; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба Embarcadero® C++Builder 10.2 Выдает ошибку на nullptr nullptr (since C++11) Господи, срам-то какой! си++ билдер 2018 года выпуска "из коробки" не знает про стандарт 11-го года. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexKoblov 0 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба Господи, срам-то какой! си++ билдер 2018 года выпуска "из коробки" не знает про стандарт 11-го года. Вообще то он 2017 года Embarcadero® C++Builder 10.2 Version 25.0.26309.314 Copyright © 2017 Embarcadero Technologies, Inc. All Rights Reserved. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба Вообще то он 2017 года Так обновитесь. Все уже давно юзают версию 2018 года Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба Господи, срам-то какой! Имхо, срам - это в 18м году строчить на билдере, когда есть visual studio и Qt ? :wacko: Мне чего-то казалось, что билдер с дельфями уже давно загнулись ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба Ну раз такая пьянка, то срам это юзать Qt, а не С# с windows forms :) [правда я сам только к этому подбираюсь, пока латаю legacy страшно сказать на MFC написанном] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба Ну раз такая пьянка, то срам это юзать Qt, а не С# с windows forms :) Так никогда не скажет тот, кому приходилось работать в обеих средах. Каждая хороша для свои задач. Если выбирать из этих двух, то в эмбеддерских делах, имхо, Qt более предпочтителен. Хотя бы потому, что тоже на плюсах (один и тот же код не нужно плодить на плюсах и шарпе). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба Так никогда не скажет тот, кому приходилось работать в обеих средах. Каждая хороша для свои задач. Если выбирать из этих двух, то в эмбеддерских делах, имхо, Qt более предпочтителен. Хотя бы потому, что тоже на плюсах (один и тот же код не нужно плодить на плюсах и шарпе). Вид у прог на нем какой то жуткий, из 90х, что я видел. Да и на шарпе пробовал немного - все очень даже понятно. Начинающий точно быстрее разберётся, чем с Qt. Да и плюсы сейчас - вообще наверное самый сложный из всех языков (и самый опасный) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба Вид у прог на нем какой то жуткий, из 90х, что я видел. Теперь все ясно, вы в нем не работали - судите о "конфете" по обертке, а не по содержимому. Да и на шарпе пробовал немного - все очень даже понятно. Пробовать и применять - это разные вещи. Шарп требует дотнет со всеми вытекающими, а плюсы вообще не зависят от платформы, ведь даже убогие 8-битники его нормально держат (например, та же ардуина). Поэтому я повторюсь: каждый инструмент хорош для свои задач. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться