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

 
 
> Аналог "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
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 19)
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
DASM
сообщение Aug 22 2018, 16:42
Сообщение #16


Гуру
******

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



Цитата(Forger @ Aug 22 2018, 19:36) *
Теперь все ясно, вы в нем не работали - судите о "конфете" по обертке, а не по содержимому.

Опять наезды? А Вы судя по всему вообще на ++ не пишите, коли советуете людям убогое С стиля приведение насильно типа (). О содержимом я посмотрел на форумах.. мне необязательно жрать гавно, чтобы судить. И вполне достаточно разума понять, что Майкрософт явно сделает лучше работу со своей системой, чем сраные остатки нокии, пошедшие по рукам. ТАКОЕ мне точно не надо.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 22 2018, 16:57
Сообщение #17


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

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



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

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

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

Но, не смотря на это, вон сколько его вылезло. Лукавите biggrin.gif


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


Гуру
******

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



Даже спорить не хочется. Типы тогда вообще уже костыль, полностью динамические и вперед. Проехали. У человека лаконичное и четкое использование as в замечательном языке Дельфи. Вы, прекрасно понимая уродливость плюсов советуете (), а в оргинале у него имнно as, в дельфи хрень типа (кошка *) бульдозер -> творить нельзя. а вы советуете именно это, с умным видом "я ваще типы не привожу, синлтоны и статик не пользую, я супергуру."
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 22 2018, 17:28
Сообщение #19


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

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



Цитата(DASM @ Aug 22 2018, 20:14) *
Даже спорить не хочется.

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


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

Уродливость тут не плюсов, а того, как он применяется.
Что голое приведение типов (), что ***_cast - все одно это костыли.
Но для данного случая это вообще не имеет значения - посмотрите сам код, и все станет понятно.


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


Ally
******

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



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

Подумать только, мему "а я думал что Delphi умер" исполняется 20 лет!
Многие кто так думал давно на пенсии, а Delphi цветет и пахнет.
В последнем родмапе планы по дальнейшему совершенствованию VCL компонентов.
Что ни говори, а такие легенды как RXlib, AsynсPro, DevExpress, TeeChart на VCL никто не смог превзойти.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:57
Рейтинг@Mail.ru


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