Перейти к содержанию
    

Аналог "as" из Delphi в C++ Builder

Всем Привет!

 

Подскажите плиз, как можно перевести данную строку на 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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите плиз, как можно перевести данную строку на C++:

(Chart1.Tools.Items[0] as TCursorTool).FollowMouse:=true;

 

Как-то так:

(TCursorTool*)(Chart1->Tools->Items[0])->FollowMouse = true;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем Привет!

 

Подскажите плиз, как можно перевести данную строку на 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++.»

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Господи, это самый TChart, графики на который я в борланде выводил 17 лет назад, он еще жив? Круто тогда

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как-то так:

(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'

 

image.png

 

Спасибо за подсказку! может тут тоже нужно было немного добавить и заработало бы, но я не понял что

 

 

 

 

Господи, это самый TChart, графики на который я в борланде выводил 17 лет назад, он еще жив? Круто тогда

Да жив и на разных платформах работает (сайт TeeChart):

image.png

 

Даже на iOS, правда еще не пробовал, но хочется :)

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

выдает ошибку на nullptr, - замените на NULL

 

Работает. Спасибо!

    TCursorTool* t = NULL;
    t = dynamic_cast <TCursorTool*> (Chart1->Tools->Items[0]);
    t->FollowMouse = true;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Embarcadero® C++Builder 10.2

Выдает ошибку на nullptr

 

nullptr (since C++11)

 

Господи, срам-то какой!

си++ билдер 2018 года выпуска "из коробки" не знает про стандарт 11-го года.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Господи, срам-то какой!

си++ билдер 2018 года выпуска "из коробки" не знает про стандарт 11-го года.

 

Вообще то он 2017 года

 

Embarcadero® C++Builder 10.2 Version 25.0.26309.314

Copyright © 2017 Embarcadero Technologies, Inc. All Rights Reserved.

 

222.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще то он 2017 года

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

dxa4vmt9hs9mfwadisaqyonknwg.jpeg

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Господи, срам-то какой!

Имхо, срам - это в 18м году строчить на билдере, когда есть visual studio и Qt ? :wacko:

Мне чего-то казалось, что билдер с дельфями уже давно загнулись ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну раз такая пьянка, то срам это юзать Qt, а не С# с windows forms :) [правда я сам только к этому подбираюсь, пока латаю legacy страшно сказать на MFC написанном]

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну раз такая пьянка, то срам это юзать Qt, а не С# с windows forms :)

Так никогда не скажет тот, кому приходилось работать в обеих средах. Каждая хороша для свои задач.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так никогда не скажет тот, кому приходилось работать в обеих средах. Каждая хороша для свои задач.

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

Вид у прог на нем какой то жуткий, из 90х, что я видел. Да и на шарпе пробовал немного - все очень даже понятно. Начинающий точно быстрее разберётся, чем с Qt. Да и плюсы сейчас - вообще наверное самый сложный из всех языков (и самый опасный)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вид у прог на нем какой то жуткий, из 90х, что я видел.

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

 

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

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

 

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

Поэтому я повторюсь: каждый инструмент хорош для свои задач.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...