реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Аналог "as" из Delphi в C++ Builder, Импорт графиков TeeChart в C++ Builder
katmani
сообщение Aug 21 2018, 14:46
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 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

Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 21 2018, 14:54
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 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;


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
DASM
сообщение Aug 21 2018, 15:41
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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++.»
Go to the top of the page
 
+Quote Post
DASM
сообщение Aug 21 2018, 17:12
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Господи, это самый TChart, графики на который я в борланде выводил 17 лет назад, он еще жив? Круто тогда
Go to the top of the page
 
+Quote Post
katmani
сообщение Aug 22 2018, 05:53
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 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, правда еще не пробовал, но хочется sm.gif


Go to the top of the page
 
+Quote Post
DASM
сообщение Aug 22 2018, 07:02
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



выдает ошибку на nullptr, - замените на NULL
Go to the top of the page
 
+Quote Post
katmani
сообщение Aug 22 2018, 07:57
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 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;

Go to the top of the page
 
+Quote Post
esaulenka
сообщение Aug 22 2018, 08:13
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 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-го года.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
katmani
сообщение Aug 22 2018, 08:38
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 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.


Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 22 2018, 10:56
Сообщение #10


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(katmani @ Aug 22 2018, 11:38) *
Вообще то он 2017 года

Так обновитесь. Все уже давно юзают версию 2018 года

Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 22 2018, 11:52
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(esaulenka @ Aug 22 2018, 11:13) *
Господи, срам-то какой!

Имхо, срам - это в 18м году строчить на билдере, когда есть visual studio и Qt ? wacko.gif
Мне чего-то казалось, что билдер с дельфями уже давно загнулись ...


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
DASM
сообщение Aug 22 2018, 15:01
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Ну раз такая пьянка, то срам это юзать Qt, а не С# с windows forms sm.gif [правда я сам только к этому подбираюсь, пока латаю legacy страшно сказать на MFC написанном]
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 22 2018, 15:22
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(DASM @ Aug 22 2018, 18:01) *
Ну раз такая пьянка, то срам это юзать Qt, а не С# с windows forms sm.gif

Так никогда не скажет тот, кому приходилось работать в обеих средах. Каждая хороша для свои задач.
Если выбирать из этих двух, то в эмбеддерских делах, имхо, Qt более предпочтителен. Хотя бы потому, что тоже на плюсах (один и тот же код не нужно плодить на плюсах и шарпе).


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
DASM
сообщение Aug 22 2018, 15:39
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Цитата(Forger @ Aug 22 2018, 18:22) *
Так никогда не скажет тот, кому приходилось работать в обеих средах. Каждая хороша для свои задач.
Если выбирать из этих двух, то в эмбеддерских делах, имхо, Qt более предпочтителен. Хотя бы потому, что тоже на плюсах (один и тот же код не нужно плодить на плюсах и шарпе).

Вид у прог на нем какой то жуткий, из 90х, что я видел. Да и на шарпе пробовал немного - все очень даже понятно. Начинающий точно быстрее разберётся, чем с Qt. Да и плюсы сейчас - вообще наверное самый сложный из всех языков (и самый опасный)
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 22 2018, 16:36
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(DASM @ Aug 22 2018, 18:39) *
Вид у прог на нем какой то жуткий, из 90х, что я видел.

Теперь все ясно, вы в нем не работали - судите о "конфете" по обертке, а не по содержимому.

Цитата
Да и на шарпе пробовал немного - все очень даже понятно.

Пробовать и применять - это разные вещи.

Шарп требует дотнет со всеми вытекающими, а плюсы вообще не зависят от платформы, ведь даже убогие 8-битники его нормально держат (например, та же ардуина).
Поэтому я повторюсь: каждый инструмент хорош для свои задач.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th April 2024 - 23:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.02801 секунд с 7
ELECTRONIX ©2004-2016