Старый 11.09.2013, 19:31   #1   
///
 
Аватар для -=Женек=-
 
Сообщений: 9,724
Регистрация: 02.04.2005
Возраст: 43

-=Женек=- вне форума Не в сети
КТо-нибудь работал с TMS AdvChartView?

Есть прикольная штука - http://www.tmssoftware.com/site/advchart.asp

Скачал, поставил, стал разбираться. Дошел до построения графика.
Примеры прилагались, но они на Delphi.
В дельфи примере есть такая строка:
Цитата:
AdvGDIPChartView1.Panes[0].Series[0].AddSinglePoint(RandomRange(0, 50));
Стал адаптировать ее под Builder C++. Начался бардак.
Пишет что Series не является членом Panes, а функция AddSInglePoint неизвестна.

Интерактивные средства билдера дали понять, что доступ к Series и далее по тексту может быть осуществлен следующим образом:
Цитата:
AdvGDIPChartView1->Panes->Items[0]->Series->Items[0]->
То есть компилятор это проглатывает. Но график не рисуется.
А в дельфи примере все нормально....


Может быть кто подскажет для начала, как перевести на C строку
Цитата:
AdvGDIPChartView1.Panes[0].Series[0].AddSinglePoint(RandomRange(0, 50));

Последний раз редактировалось -=Женек=-; 11.09.2013 в 20:09.
  Ответить с цитированием
Старый 11.09.2013, 20:17   #2   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
-=Женек=-,
AdvGDIPChartView1->Panes[0]->Series[0]->AddSinglePoint(RandomRange(0, 50));
0 забыл подставить, вроде всё.
Там различия минимальные должны быть.
P.S.
У тебя ломаная или покупал?
  Ответить с цитированием
Старый 11.09.2013, 20:25   #3   
///
 
Аватар для -=Женек=-
 
Сообщений: 9,724
Регистрация: 02.04.2005
Возраст: 43

-=Женек=- вне форума Не в сети
Hopkroft,
Цитата:
AdvGDIPChartView1->Panes[0]->Series[0]->AddSinglePoint(RandomRange(0, 50));
Пишет вот что:
Цитата:
E2288 Pointer to structure required on left side of -> or ->*

Цитата:
У тебя ломаная или покупал?
Триал, скачаный с сайта разработчика. Единственное ограничение - надпись на графике, что версия ознакомительная.
  Ответить с цитированием
Старый 11.09.2013, 20:27   #4   
///
 
Аватар для -=Женек=-
 
Сообщений: 9,724
Регистрация: 02.04.2005
Возраст: 43

-=Женек=- вне форума Не в сети
Если нетрудно - качни ставится автоматом за 10 секунд, через exeшник.
Готовые примеры для экспериментов есть, но они под Дельфи.
  Ответить с цитированием
Старый 11.09.2013, 21:02   #5   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от -=Женек=- Посмотреть сообщение
Если нетрудно - качни ставится автоматом за 10 секунд, через exeшник.
Готовые примеры для экспериментов есть, но они под Дельфи.
Да вот и фишка в том что мне не трудно, и я уже качнул. Но у меня таже фигня выходит. Хидер по идее автоматом студия генерирует, и проблем быть не должно.
Я уже серии вручную добавлял, что-то результата пока нету.
Если получиться - отпишусь.
  Ответить с цитированием
Старый 11.09.2013, 21:19   #6   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
-=Женек=-, может лучше использовать что-то типа TeeChart. Который отдельно идёт. Вроде он как стандарт для построения всяких красивых графиков. Тем более можно найти ломаную и последнюю
  Ответить с цитированием
Старый 11.09.2013, 21:52   #7   
Форумец
 
Аватар для Spectator
 
Сообщений: 39,870
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от -=Женек=- Посмотреть сообщение
Пишет вот что:
а зачем ты пытаешься работать под С++ Builder, а не в Delphi, если С++ ты, похоже, не знаешь совсем.
я не о том что ты не сообразил сам что используются указатели, а о том что сообщение об ошибке более чем явно дает понять что надо делать, чтобы её исправить.
  Ответить с цитированием
Старый 11.09.2013, 22:18   #8   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Spectator, нравиться человеку работать с С++. А пишет что-бы навыки улучшить.
  Ответить с цитированием
Старый 12.09.2013, 05:40   #9   
///
 
Аватар для -=Женек=-
 
Сообщений: 9,724
Регистрация: 02.04.2005
Возраст: 43

-=Женек=- вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
сообщение об ошибке более чем явно дает понять что надо делать, чтобы её исправить.
Есть у меня одно предположение... Не по поводу того, как надо писать, а относительно твоих слов...
Не мог бы ты изложить свою мысль на языке С++, то есть привести правильное на твой взгляд написание этой строки.

Последний раз редактировалось -=Женек=-; 12.09.2013 в 05:56.
  Ответить с цитированием
Старый 12.09.2013, 09:16   #10   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от manifest Посмотреть сообщение
Интересно, Вас заставляют поддерживать дедушкино приложение или это особая форма извращений?
Там туева куча различных библиотек, и для домашних поделок самое то.

Цитата:
Сообщение от manifest Посмотреть сообщение
Там какой-то "особый" С++, больше похожий на Delphi. Скорее привьет плохой стиль чем научит языку, имхо.
+100500. Но как написал выше, для домашних поделок пойтёт. Хотя в последних версиях вроде как добавили поддержку С++11, поддержку 64-х разрядной архитектуры и другие свистелки-перделки.
  Ответить с цитированием
Старый 12.09.2013, 09:34   #11   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
-=Женек=-, так что по поводу TeeChart скажешь? Он достаточно навороченный, можно и его для графиков использовать. И вроде как стандарт для вывода графиков в различных бизнес приложениях. Плюс для него примеров много на C++.
Могу дать ссылку на ломаную версию.

Последний раз редактировалось Hopkroft; 12.09.2013 в 09:58.
  Ответить с цитированием
Старый 12.09.2013, 09:49   #12   
Форумец
 
Аватар для manifest
 
Сообщений: 231
Регистрация: 26.02.2007

manifest вне форума Не в сети
Автор просил не флудить в теме, поэтому постараюсь ограничиться только лишь одним ответом

Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Там туева куча различных библиотек, и для домашних поделок самое то.
Оставлю это здесь:
Qt SDK
Qt Creator
Qt Designer

А уж библиотек для "стандартного" С++ и Qt в частности не пересчитать.
И оно бесплатно даже для коммерческого использования, и не нужно ничего ломать и идти на компромисы с совестью
Все же 2013 год на носу.

Цитата:
Сообщение от Hopkroft Посмотреть сообщение
+100500. Но как написал выше, для домашних поделок пойтёт. Хотя в последних версиях вроде как добавили поддержку С++11, поддержку 64-х разрядной архитектуры и другие свистелки-перделки.
Builder имеет смысл пока пользуешся VCL, а VCL к С++ имеет весьма сомнительное отношение. Другими словами, пользователи Builder пишут на VCL а не на С++ описанном в стандарте, поэтому, что добавили они С++11 что нет, имхо, для пользователей Builder это практически ничего не меняет
  Ответить с цитированием
Старый 12.09.2013, 10:06   #13   
Форумец
 
Аватар для Spectator
 
Сообщений: 39,870
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от -=Женек=- Посмотреть сообщение
Есть у меня одно предположение... Не по поводу того, как надо писать, а относительно твоих слов...
Не мог бы ты изложить свою мысль на языке С++, то есть привести правильное на твой взгляд написание этой строки.
нет, конечно, надо смотреть типы членов объекта AdvGDIPChartView1, которого у меня нет (и не будет).
тебе посоветую научиться вот чему - пользоваться кнопкой F1, если с компонентом поставляется адекватная документация, или смотреть в хедерах (заголовочных H / HPP файлах) ТИПЫ ПЕРЕМЕННЫХ, с которыми ты работаешь (члены класса или нет - это не суть важно в данном случае).
Ты должен, обязан осознавать - ЧТО ТЫ ДЕЛАЕШЬ. и должен понимать какого типа КАЖДЫЙ член вот в этой строке AdvGDIPChartView1->Panes[0]->Series[0]->AddSinglePoint(RandomRange(0, 50));
иначе в лучшем случае будешь продолжать мучиться с компиляцией, в худшем - писать говнокод, который в Builder'е рождается просто замечательно и при достижении критической массы превращает программу в аццкое глюкало, которое можно только выкинуть.
  Ответить с цитированием
Старый 12.09.2013, 10:11   #14   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
AdvGDIPChartView1->Panes[0]->Series[0]->AddSinglePoint(RandomRange(0, 50));
Этот вариант уже рассматривался. К сожалению он не работает.
Я уже пробовал, удалять и вручную добавлять свои Panes и Series через конструктор. Один фиг не работает. Может где-нибудь нужно какую-то галку поставить, но обычно такие компоненты работают из "коробки" на ура.
  Ответить с цитированием
Старый 12.09.2013, 10:15   #15   
Форумец
 
Аватар для Spectator
 
Сообщений: 39,870
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Этот вариант уже рассматривался. К сожалению он не работает.
Я уже пробовал, удалять и вручную добавлять свои Panes и Series через конструктор. Один фиг не работает. Может где-нибудь нужно какую-то галку поставить, но обычно такие компоненты работают из "коробки" на ура.
в смысле???
это твой вариант.
ты должен понять, где надо заменить -> на .
пользуясь документацией и / или заголовочными файлами.
адекватный C/C++ программист должен уметь не задумываясь пользоваться и тем и другим способом.
  Ответить с цитированием
Старый 12.09.2013, 10:49   #16   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
в смысле???
это твой вариант.
ты должен понять, где надо заменить -> на .
пользуясь документацией и / или заголовочными файлами.
адекватный C/C++ программист должен уметь не задумываясь пользоваться и тем и другим способом.
Panes был объявлен как указатель на структуру, поэтому я и поставил ->. Плюс у него вроде как был определён оператор [](int).
Я конечно могу ошибаться, поэтому приложил hpp файл.
Можешь подсказать по hpp файлу?
Вложения
Тип файла: zip AdvChartViewGDIP.zip (5.1 Кб, 15 просмотров)
  Ответить с цитированием
Старый 12.09.2013, 11:15   #17   
///
 
Аватар для -=Женек=-
 
Сообщений: 9,724
Регистрация: 02.04.2005
Возраст: 43

-=Женек=- вне форума Не в сети
Spectator,
Цитата:
ты должен понять, где надо заменить -> на .
Вот.... именно это я и ожидал увидеть, именно об этом я спрашивал в посте №9.

Уважаемый! Ты грамотный программист, это чувствуется. Но когда же ты научишься читать посты и вникать в их суть, вместо того чтобы писать фразы типа "ты дурак, а как правильно делать я тебе не скажу." ?

Цитата:
а зачем ты пытаешься работать под С++ Builder, а не в Delphi, если С++ ты, похоже, не знаешь совсем.
я не о том что ты не сообразил сам что используются указатели, а о том что сообщение об ошибке более чем явно дает понять что надо делать, чтобы её исправить.
Внимательно перечитываем посты №№2,3. При вдумчивом чтении должно быть очевидным, что нет у меня проблем ни с указателями, ни с типами. Hopekroft предложил мне эту строку, я ее скормил компилятору и просто продемонстрировал полученный результат советчику. Изначально в своей программе я так не писал, проблем с указателями и с типами у меня не было.

Дальше, читаем пост №1
Цитата:
Пишет что Series не является членом Panes, а функция AddSInglePoint неизвестна.
Это он пишет как раз тогда, когда с точками и стрелочками все нормально. То есть обращение организовано правильно, но не к тем членам.

А к этому
Цитата:
AdvGDIPChartView1->Panes->Items[0]->Series->Items[0]->
я пришел пользуясь интерактивными возможностями билдера (наводишь куда надо курсор, жмешь CTRL+Space - вылазит список доступных функций и прочая и прочая...), так что учить меня пользоваться F1 не надо, к тому же мог бы и сообразить, что обладай я документацией адаптированной под C++, я бы здесь тем не создавал, а документация, как и примеры, адаптирована под Дельфи. Оно конечно читаемо и познаваемо, но вот именно в этом месте я споткнулся, ощущение складывается, что структуры под С и Дельфи по разному организованы.

А сама тема - я даже в заголовке указывал не саму проблему, а интересовался - есть ли люди, которые работали с этим VCL. Работали, значит тоже сталкивались с этой проблемой и как-то ее решали.

Описанный в последней цитате вариант не просто компилируется, но и не конфликтует со структурами, так как уже в ходе работы программы никаких ошибок, свидетельствуюищих об обращении к несуществующим элементам, не выдается. График просто не рисуется.
Что ж... вернусь домой попробую писать в элементы структур, а потом читать из них, может проблема чисто с отображением. Хотя я и свой компонент кидал на форму, и копировал из рабочей формы из примера для дельфи - результат один.
  Ответить с цитированием
Старый 12.09.2013, 11:21   #18   
///
 
Аватар для -=Женек=-
 
Сообщений: 9,724
Регистрация: 02.04.2005
Возраст: 43

-=Женек=- вне форума Не в сети
А ведь я оказался прав!
Пришло письмо от разработчика:
Цитата:
Hi,
Use the following code to add a point:
AdvChartView1->Panes->Items[0]->Series->Items[0]->AddSinglePoint(RandomRange
(0, 100));
То есть синтаксически я все сделал правильно и даже копнул в правильную сторону (Items[0]->). Так что вопрос по указателям можно закрыть.
Может объявится билдерист, который с этим работал...
  Ответить с цитированием
Старый 12.09.2013, 11:26   #19   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от -=Женек=- Посмотреть сообщение
А ведь я оказался прав!
Пришло письмо от разработчика:

То есть синтаксически я все сделал правильно и даже копнул в правильную сторону (Items[0]->). Так что вопрос по указателям можно закрыть.
Может объявится билдерист, который с этим работал...
Блин, опередил То-же самое хотел написать.
А что тебе нужно сделать? Я скачал pdf с мануалами, там вроде всё норм расписано.

я так понял ты использовал вначале AdvGDIPChartView1, т.к. хотел алиасинги и прочую красоту, а то в итоге хочешь получить?
  Ответить с цитированием
Старый 12.09.2013, 11:48   #20   
Форумец
 
Аватар для Spectator
 
Сообщений: 39,870
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Panes был объявлен как указатель на структуру, поэтому я и поставил ->. Плюс у него вроде как был определён оператор [](int).
Я конечно могу ошибаться, поэтому приложил hpp файл.
Можешь подсказать по hpp файлу?
__property TAdvGDIPChartPanes* Panes = {read=GetPanes, write=SetPanes};

теперь смотри.
если ты обращаешься к Panes, то, в соответствии с определением, надо использовать ->
НО, ты обращаешься не к Panes, а к элементам массива, на который ссылается Panes, следственно это будет уже [B].[B]
Panes[4].blahBlahBlah

операции -> и [] взаимоисключающие, как бы. вот если бы там было ДВЕ *, то одна бы ушла [], а другая - в ->

как правильно писать в Билдере проверяется, на самом деле, очень просто и не используя головной мозг - пишем ->, если Code Insight не срабатывает и список членов класса не вываливается, значит нужна точка. в частности, для перевода примера с Дельфей надо скопировать текст примера в код программы, закомментарить, а потом заново набрать руками, обращая внимание на то - срабатывает ли Code Insight на точки или на ->

если не научиться делать упомянутое выше на интуитивном уровне, работа со сторонними компонентами, портированными из дельфей, превратится в кромешный ад, так что настоятельно рекомендую разобраться.
  Ответить с цитированием
Старый 12.09.2013, 12:01   #21   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Spectator, вместо 10000 строк теории лучше бы 1 строчку кода. Про то как CodeInsight пользоваться думаю знают многие
  Ответить с цитированием
Старый 12.09.2013, 12:04   #22   
///
 
Аватар для -=Женек=-
 
Сообщений: 9,724
Регистрация: 02.04.2005
Возраст: 43

-=Женек=- вне форума Не в сети
Hopkroft,
Цитата:
Я скачал pdf с мануалами, там вроде всё норм расписано
там в мануале фрагменты кодя для билдера? Если для Дельфи, то выкинь его, в нем написано
Цитата:
AdvGDIPChartView1.Panes[0].Series[0].AddSinglePoint(RandomRange(0, 50));
А вот разработчик говорит что в С++ надо вставлять Items[0]->
То есть уже ясно, что мануал хоть и содержит много полезной информации, но может сбить с толку.
  Ответить с цитированием
Старый 12.09.2013, 12:19   #23   
///
 
Аватар для -=Женек=-
 
Сообщений: 9,724
Регистрация: 02.04.2005
Возраст: 43

-=Женек=- вне форума Не в сети
Spectator,
Цитата:
как правильно писать в Билдере проверяется, на самом деле, очень просто и не используя головной мозг - пишем ->, если Code Insight не срабатывает и список членов класса не вываливается, значит нужна точка. в частности, для перевода примера с Дельфей надо скопировать текст примера в код программы, закомментарить, а потом заново набрать руками, обращая внимание на то - срабатывает ли Code Insight на точки или на ->
В том то и дело, что CoedeInsight довел до нужной конструкции, которая компилируется и только.
  Ответить с цитированием
Старый 12.09.2013, 12:19   #24   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
-=Женек=-, да там просто можно подсмотреть как какой эффект сделать и в какой последовательности что вызывать.
Остальное можно додумать. Там основная фишка в том что обращаются либо к Series либо к Panes. А т.к. теперь известно что к ним через Items нужно обращаться, поэтому должно проще пойти.
  Ответить с цитированием
Старый 12.09.2013, 12:32   #25   
Форумец
 
Аватар для Spectator
 
Сообщений: 39,870
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от -=Женек=- Посмотреть сообщение
Spectator,

В том то и дело, что CoedeInsight довел до нужной конструкции, которая компилируется и только.
с CodeInsight есть один фокус, к которому на практике можно прийти. сначала всегда пробуй точку, а не ->
если точка срабатывает, пробуй откомпилироваться с ней. если ТОЧНО с точкой не выходит, тогда уже пробуем ->
это, конечно, танцы с бубном, но программирование в Builder - это в принципе танцы с бубном, так что карму мы этим не испортим, а на практике такая метода сильно облегчает жизнь при привинчивании криво портированных из дельфей библиотек.

а вот
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
-=Женек=-, да там просто можно подсмотреть как какой эффект сделать и в какой последовательности что вызывать.
Остальное можно додумать. Там основная фишка в том что обращаются либо к Series либо к Panes. А т.к. теперь известно что к ним через Items нужно обращаться, поэтому должно проще пойти.
к чему конкретно обращаться всё же можно и нужно смотреть в документации. это при портировании абсолютно не меняется, поэтому нужно не гадать, а прочитать и понять.
  Ответить с цитированием
Старый 12.09.2013, 12:40   #26   
///
 
Аватар для -=Женек=-
 
Сообщений: 9,724
Регистрация: 02.04.2005
Возраст: 43

-=Женек=- вне форума Не в сети
Производитель написал что нужно добавлять BeginUpdate() и EndUpdate().
Я видел в мануале информацию об этих функциях, но в дельфевых примерах работает и без них. Что ж вечером приду с работы попробую.
  Ответить с цитированием
Старый 12.09.2013, 12:47   #27   
///
 
Аватар для -=Женек=-
 
Сообщений: 9,724
Регистрация: 02.04.2005
Возраст: 43

-=Женек=- вне форума Не в сети
Spectator,
Цитата:
CodeInsight есть один фокус, к которому на практике можно прийти. сначала всегда пробуй точку, а не ->
если точка срабатывает, пробуй откомпилироваться с ней. если ТОЧНО с точкой не выходит, тогда уже пробуем ->
по-моему с -> ничего не вылазило, а с точкой открывался ниспадающий список, в котором нет Series. Зато есть Items, а вот в нем уже кроется Series.
  Ответить с цитированием
Старый 12.09.2013, 12:48   #28   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
-=Женек=-, если работает без них, то не значит что не нужно их выкидывать.
С их помощью ты предотвращаешь перерисовку компонента во время большого количества изменений. В противном случае либо тормозить начнёт либо мерцать будет.
Так что мануал лучше читать!
  Ответить с цитированием
Старый 12.09.2013, 13:37   #29   
///
 
Аватар для -=Женек=-
 
Сообщений: 9,724
Регистрация: 02.04.2005
Возраст: 43

-=Женек=- вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
-=Женек=-, если работает без них, то не значит что не нужно их выкидывать.
С их помощью ты предотвращаешь перерисовку компонента во время большого количества изменений. В противном случае либо тормозить начнёт либо мерцать будет.
Так что мануал лучше читать!
Я привык в первую очередь локализовывать любую проблему. Знаешь, коль код работающий в одной системе, не работает в другой, то в поисках ошибки логично для начала убрать весь мусор, а затем плясать от оставшейся, минмиально необходимой для работы части.

Да и потом, что значит выкидывать? По-моему в дельфевом примере вообще не было этих функций. Ну или они запускались где-то по какому-то другому событию. В общем, приду домой, попробую.
  Ответить с цитированием
Старый 12.09.2013, 16:24   #30   
///
 
Аватар для -=Женек=-
 
Сообщений: 9,724
Регистрация: 02.04.2005
Возраст: 43

-=Женек=- вне форума Не в сети
Hopkroft,
Цитата:
если работает без них, то не значит что не нужно их выкидывать.
Блин... да их там и не было. В дельфи идет без этой функции.

А так попробовал - наконец-то все заработало. Всем спасибо)))
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind