Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Аналог "as" из Delphi в C++ Builder
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
katmani
Всем Привет!

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

Forger
Цитата(katmani @ Aug 21 2018, 17:46) *
Подскажите плиз, как можно перевести данную строку на C++:
(Chart1.Tools.Items[0] as TCursorTool).FollowMouse:=true;


Как-то так:
Код
(TCursorTool*)(Chart1->Tools->Items[0])->FollowMouse = true;
DASM
Цитата(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++.»
DASM
Господи, это самый TChart, графики на который я в борланде выводил 17 лет назад, он еще жив? Круто тогда
katmani
Цитата(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


DASM
выдает ошибку на nullptr, - замените на NULL
katmani
Цитата(DASM @ Aug 22 2018, 10:02) *
выдает ошибку на nullptr, - замените на NULL


Работает. Спасибо!
Код
    TCursorTool* t = NULL;
    t = dynamic_cast <TCursorTool*> (Chart1->Tools->Items[0]);
    t->FollowMouse = true;

esaulenka
Цитата(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-го года.
katmani
Цитата(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.


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

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

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

Имхо, срам - это в 18м году строчить на билдере, когда есть visual studio и Qt ? wacko.gif
Мне чего-то казалось, что билдер с дельфями уже давно загнулись ...
DASM
Ну раз такая пьянка, то срам это юзать Qt, а не С# с windows forms sm.gif [правда я сам только к этому подбираюсь, пока латаю legacy страшно сказать на MFC написанном]
Forger
Цитата(DASM @ Aug 22 2018, 18:01) *
Ну раз такая пьянка, то срам это юзать Qt, а не С# с windows forms sm.gif

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

Вид у прог на нем какой то жуткий, из 90х, что я видел. Да и на шарпе пробовал немного - все очень даже понятно. Начинающий точно быстрее разберётся, чем с Qt. Да и плюсы сейчас - вообще наверное самый сложный из всех языков (и самый опасный)
Forger
Цитата(DASM @ Aug 22 2018, 18:39) *
Вид у прог на нем какой то жуткий, из 90х, что я видел.

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

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

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

Шарп требует дотнет со всеми вытекающими, а плюсы вообще не зависят от платформы, ведь даже убогие 8-битники его нормально держат (например, та же ардуина).
Поэтому я повторюсь: каждый инструмент хорош для свои задач.
DASM
Цитата(Forger @ Aug 22 2018, 19:36) *
Теперь все ясно, вы в нем не работали - судите о "конфете" по обертке, а не по содержимому.

Опять наезды? А Вы судя по всему вообще на ++ не пишите, коли советуете людям убогое С стиля приведение насильно типа (). О содержимом я посмотрел на форумах.. мне необязательно жрать гавно, чтобы судить. И вполне достаточно разума понять, что Майкрософт явно сделает лучше работу со своей системой, чем сраные остатки нокии, пошедшие по рукам. ТАКОЕ мне точно не надо.
Forger
Цитата(DASM @ Aug 22 2018, 19:42) *
Опять наезды? А Вы судя по всему вообще на ++ не пишите, коли советуете людям убогое С стиля приведение насильно типа ().

Однако, обратите внимание, что ТС применил именно "убогое приведение типа". А для данного "кода" оно в самый раз wink.gif
Но, если серьезно подходить к этой задаче, то я бы вообще избежал любого приведения типа, ибо это всегда есть костыль.
Для каждой задачи - свое решение.

Цитата
О содержимом я посмотрел на форумах.. мне необязательно жрать гавно, чтобы судить. И вполне достаточно разума понять, что Майкрософт явно сделает лучше работу со своей системой, чем сраные остатки нокии, пошедшие по рукам.

Но, не смотря на это, вон сколько его вылезло. Лукавите biggrin.gif
DASM
Даже спорить не хочется. Типы тогда вообще уже костыль, полностью динамические и вперед. Проехали. У человека лаконичное и четкое использование as в замечательном языке Дельфи. Вы, прекрасно понимая уродливость плюсов советуете (), а в оргинале у него имнно as, в дельфи хрень типа (кошка *) бульдозер -> творить нельзя. а вы советуете именно это, с умным видом "я ваще типы не привожу, синлтоны и статик не пользую, я супергуру."
Forger
Цитата(DASM @ Aug 22 2018, 20:14) *
Даже спорить не хочется.

Именно что спорить тут не о чем - универсальных решений не бывает, равно как и не бывает плохих или хороших инструментов.
Просто, есть те, кто не умеет пользоваться разными инструментами и все пытается делать одним, ругая все остальные wink.gif


Цитата
Вы, прекрасно понимая уродливость плюсов советуете (),

Уродливость тут не плюсов, а того, как он применяется.
Что голое приведение типов (), что ***_cast - все одно это костыли.
Но для данного случая это вообще не имеет значения - посмотрите сам код, и все станет понятно.
AlexandrY
Цитата(Forger @ Aug 22 2018, 14:52) *
Имхо, срам - это в 18м году строчить на билдере, когда есть visual studio и Qt ? wacko.gif
Мне чего-то казалось, что билдер с дельфями уже давно загнулись ...

Подумать только, мему "а я думал что Delphi умер" исполняется 20 лет!
Многие кто так думал давно на пенсии, а Delphi цветет и пахнет.
В последнем родмапе планы по дальнейшему совершенствованию VCL компонентов.
Что ни говори, а такие легенды как RXlib, AsynсPro, DevExpress, TeeChart на VCL никто не смог превзойти.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.