Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37

Есть ли в компоненте chart свойство, которое возвращает текущую позицию

17.11.2013, 23:40. Показов 2571. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. Подскажите есть ли в компоненте chart свойство, которое возвращает текущую позицию, которую мы каким-то способом выделили. К примеру, кнопкой мыши. Просто задача стоит вырезать определенный кусок из файла, который мы видим на графике. Так вот для того, чтобы его вырезать мне необходимо знать его начало и конец. Очень буду благодарен за любую помощь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.11.2013, 23:40
Ответы с готовыми решениями:

Функция или свойство DataGridWiev, которое возвращает выбранный объект
И снова здравствуйте! Подскажите функцию или свойство dataGridWiev которое возвращает выбранный объект как comboBox.SelectedItem()

Есть ли свойство которое определяет закрашен элемент списка или просто обрамлен
Помогите разобраться, Господа. Ситуация следующая: когда в ListView щелкнуть мышкой не на элементе списка а в 'молоко' то элемент списка...

График в компоненте Chart [Delphi]
Люди помогите!!! Половину сделал а дальше никак. Задание:Найти координаты точки, симметричной данной точке М, с координатами (х1,y1)...

19
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
18.11.2013, 09:48
Цитата Сообщение от Robbie4LFC Посмотреть сообщение
возвращает текущую позицию, которую мы каким-то способом выделили
Мне вот сходу придумывается два пути:
1) У chart-а есть метод выделения участка с последующим увеличением. Вот можно из него попробовать достать координаты выбранной области.
2) Просто получать позицию курсора и высчитывать его положение относительно шкалы.
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
18.11.2013, 11:06
Цитата Сообщение от SatanaXIII Посмотреть сообщение
У chart-а есть метод выделения участка с последующим увеличением. Вот можно из него попробовать достать координаты выбранной области.
Robbie4LFC, при Chart1->AllowZoom=true (можно настроить в свойствах Chart'а) действует метод выделения области левой кнопкой мыши - слева направо для увеличения, справа налево для уменьшения. В событии OnZoom получаем границы выделенной области.
C++
1
2
3
4
        x0=Chart1->IZoom->X0;
        y0=Chart1->IZoom->y0;
        x1=Chart1->IZoom->X1;
        y0=Chart1->IZoom->y0;
0
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
18.11.2013, 19:16  [ТС]
Извините, но я не совсем понимаю. Я могу выделить кусок графика и увеличить его. Но мне надо, чтобы автоматически координаты записывались. А тут я так понимаю я просто визуально могу понять где начинается мой фрагмент и где кончается. То есть сам бы я спокойно смог его вырезать, но конечному пользователю это не должно быть открыто. Он должен выделить фрагмент и получить его в файле. Но эти переменные почему-то возвращают ноль
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
18.11.2013, 19:46
Цитата Сообщение от Robbie4LFC Посмотреть сообщение
свойство, которое возвращает текущую позицию, которую мы каким-то способом выделили
То есть вы хотите использовать невизульно график? Я перефразирую: зачем вам свойство графика, когда можно ввести ваши значения начала и конца интервала в какие-нибудь Edit?

Цитата Сообщение от Robbie4LFC Посмотреть сообщение
А тут я так понимаю я просто визуально могу понять где начинается мой фрагмент и где кончается.
Вы можете ткнуть в то место, откуда хотите чтобы начинался ваш интервал.
Разве не это вам надо?

Цитата Сообщение от Robbie4LFC Посмотреть сообщение
и получить его в файле
Вот с этого момента поподробнее.
0
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
18.11.2013, 22:06  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
То есть вы хотите использовать невизульно график? Я перефразирую: зачем вам свойство графика, когда можно ввести ваши значения начала и конца интервала в какие-нибудь Edit?

Вы можете ткнуть в то место, откуда хотите чтобы начинался ваш интервал.
Разве не это вам надо?

Вот с этого момента поподробнее.
Ткнуть? То есть нажатие мыши вернет какие-то координаты? Просто я смог приблизить график, а все мои щелчки мышкой на нужном месте в графике ни к чему не привели.
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
18.11.2013, 22:23
Robbie4LFC, подробно объясните ЧТО Вам нужно сделать с графиком, о каких именно форматах данных и файлов идёт речь. Иначе на воде вилами фигуры рисуем...
0
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
18.11.2013, 22:38  [ТС]
Цитата Сообщение от Kulgar Посмотреть сообщение
Robbie4LFC, подробно объясните ЧТО Вам нужно сделать с графиком, о каких именно форматах данных и файлов идёт речь. Иначе на воде вилами фигуры рисуем...
Ситуация такая: необходимо записать слово, которое говорит пользователь для проверки схожести его с другими словами. Ну что-то типа идентификации пароля. Для этого я записываю фрагмент и из него вырезаю определенный кусок, который соответствует слову, сказанному пользователем. На графике прекрасно видно его. То есть пользователь выделяет его и все, далее мне необходимы координаты выделенного фрагмента, чтобы вырезать его и записать в файл.
Формат char.
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
19.11.2013, 08:03
Цитата Сообщение от Robbie4LFC Посмотреть сообщение
На графике прекрасно видно его. То есть пользователь выделяет его и все, далее мне необходимы координаты выделенного фрагмента, чтобы вырезать его и записать в файл.
Позвольте полюбопытствовать, как Вы реализовали анализатор голоса?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
19.11.2013, 09:04
Цитата Сообщение от Robbie4LFC Посмотреть сообщение
Просто задача стоит вырезать определенный кусок из файла, который мы видим на графике.
Слуууушайте, а может вы пишете что-то типа аудиоредактора?

0
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
19.11.2013, 11:53  [ТС]
Цитата Сообщение от Kulgar Посмотреть сообщение
Позвольте полюбопытствовать, как Вы реализовали анализатор голоса?
Эта программа пишется мной больше для обучения, то есть она никогда и нигде реально задействована не будет. Я просто пишу все подряд на микрофон, а слово, которое нужно, будет визуально видно на графике. И я его спокойно смогу выделить оттуда.

Добавлено через 2 минуты
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Слуууушайте, а может вы пишете что-то типа аудиоредактора?
Вряд ли это можно назвать так, мне просто нужны точки на графике, которые отвечают за начало и конец слова. Дальше уже все довольно просто. Но я не могу понять как через компонент chart вернуть их. То есть приблизить и посмотреть их, а потом вбить их в edit можно, но хотелось бы чтоли более красиво все сделать
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
19.11.2013, 12:12
Цитата Сообщение от Robbie4LFC Посмотреть сообщение
То есть приблизить и посмотреть их, а потом вбить их в edit можно
А вы без приближения попадете?
И если да, то копайте в сторону предложенного Kulgar варианта. Только перехватывайте потом изменение масштабирования. Просто значения получайте стандартным методом.
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
19.11.2013, 12:31
Цитата Сообщение от Robbie4LFC Посмотреть сообщение
Я просто пишу все подряд на микрофон, а слово, которое нужно, будет визуально видно на графике. И я его спокойно смогу выделить оттуда.
Если хотите оставить задачу "выделения слова из графика" на пользователе, то можно получить границы выделенной зоны таким образом:
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Chart1Zoom(TObject *Sender)
{
    Edit1=Chart1->IZoom->X0;
    Edit2=Chart1->IZoom->y0;
    Edit3=Chart1->IZoom->X1;
    Edit4=Chart1->IZoom->y0;
    Chart1->UndoZoom();
}

Цитата Сообщение от SatanaXIII Посмотреть сообщение
А вы без приближения попадете?
И если да, то копайте в сторону предложенного Kulgar варианта. Только перехватывайте потом изменение масштабирования. Просто значения получайте стандартным методом.
Это не совсем красивое решение. Полагаю у Chart'а должны быть методы позволяющие именно выделять участок графика. Я до них ещё не добрался.
0
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
20.11.2013, 10:12  [ТС]
Это не совсем красивое решение. Полагаю у Chart'а должны быть методы позволяющие именно выделять участок графика. Я до них ещё не добрался.[/QUOTE]

То есть при выделении области на графике мне должны вернуться координаты выделенного участка? Просто у меня при выделении ничего все-равно не происходит и возвращаются нули
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
20.11.2013, 10:14
Robbie4LFC, выложите код, пожалуйста.
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
20.11.2013, 10:27
Robbie4LFC, код Kulgar прекрасно работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TForm1::FormCreate(TObject *Sender)
{
for( int i=0; i<100; i++ )
  {
  Series1->AddXY(i, i*i );
  }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Chart1Zoom(TObject *Sender)
{
    Edit1->Text=Chart1->IZoom->X0;
    Edit2->Text=Chart1->IZoom->Y0;
    Edit3->Text=Chart1->IZoom->X1;
    Edit4->Text=Chart1->IZoom->Y0;
    Chart1->UndoZoom();
}
P.S. Белый квадрат выделения плохо видно на графике, но, присмотревшись, найти можно.
Миниатюры
Есть ли в компоненте chart свойство, которое возвращает текущую позицию  
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
20.11.2013, 10:31
Robbie4LFC, извините, только щас увидел опечатку:
C++
1
    Edit4->Text=Chart1->IZoom->Y1;
Однако, как заметил SatanaXIII, на возврат нулей это не должно влиять.
0
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
20.11.2013, 19:56  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void __fastcall TForm1::Button23Click(TObject *Sender)
{
        FILE * file;
        if ( SaveDialog2->Execute())
                Edit7->Text = SaveDialog2->FileName;
        file = fopen (SaveDialog2->FileName.c_str(),"wb");
        wavform.wFormatTag = WAVE_FORMAT_PCM;
        wavform.nChannels = 1;
        wavform.nSamplesPerSec = 22050;
        wavform.nAvgBytesPerSec = 22050*2;
        wavform.nBlockAlign = 2;
        wavform.wBitsPerSample = 16;
        wavform.cbSize = 0;
        waveInOpen(&hwi, WAVE_MAPPER, &wavform,0, 0, CALLBACK_NULL);
        wavbuf.lpData = (LPSTR)buff;
        wavbuf.dwBufferLength = sizeof(buff) ;
        wavbuf.dwFlags = 0;
        wavbuf.dwLoops = 0;
        waveInPrepareHeader(hwi, &wavbuf, sizeof(wavbuf));
        waveInAddBuffer(hwi, &wavbuf, sizeof(wavbuf));
        waveInStart(hwi);
        Sleep(2000);
        for (int i=0;i<22050;i++)
                Series1->Add(buff[i]);
        Edit1->Text=Chart1->IZoom->X0;
        Edit2->Text=Chart1->IZoom->Y0;
        Edit3->Text=Chart1->IZoom->X1;
        Edit4->Text=Chart1->IZoom->Y0;
        Chart1->UndoZoom();
}
Добавлено через 4 минуты
Цитата Сообщение от Kulgar Посмотреть сообщение
Robbie4LFC, выложите код, пожалуйста.
Я примерно понимаю в чем проблема. Я просто неверно записал это в программу. То есть все в кучу свалил. Но помогите все исправить и, если не сложно, объясните, чтобы я больше таких ошибок не допускал
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
20.11.2013, 20:26
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void __fastcall TForm1::Button23Click(TObject *Sender)
{
        if ( SaveDialog2->Execute())
                {
                int magic = 22050;
                FILE * file;
                Edit7->Text = SaveDialog2->FileName;
                file = fopen (SaveDialog2->FileName.c_str(),"wb");
                wavform.wFormatTag = WAVE_FORMAT_PCM;
                wavform.nChannels = 1;
                wavform.nSamplesPerSec = magic;
                wavform.nAvgBytesPerSec = magic*2;
                wavform.nBlockAlign = 2;
                wavform.wBitsPerSample = 16;
                wavform.cbSize = 0;
                waveInOpen(&hwi, WAVE_MAPPER, &wavform,0, 0, CALLBACK_NULL);
                wavbuf.lpData = (LPSTR)buff;
                wavbuf.dwBufferLength = sizeof(buff) ;
                wavbuf.dwFlags = 0;
                wavbuf.dwLoops = 0;
                waveInPrepareHeader(hwi, &wavbuf, sizeof(wavbuf));
                waveInAddBuffer(hwi, &wavbuf, sizeof(wavbuf));
                waveInStart(hwi);
                Sleep(2000);
                for ( int i=0; i<magic; i++ )
                        Series1->Add(i, buff[i]);
                Edit1->Text=Chart1->IZoom->X0;
                Edit2->Text=Chart1->IZoom->Y0;
                Edit3->Text=Chart1->IZoom->X1;
                Edit4->Text=Chart1->IZoom->Y0;
                Chart1->UndoZoom();
                }
}

Во-первых все, что должно происходить вызова диалога сохранения файла надо заключить в логические скобки. Чтобы это все выполнялось только когда диалог отработал. (4 и 32 строка)
Во-вторых ваше магическое число 22050 лучше бы заменить переменной. (5 строка)
В-третьих метод Series1->Add() принимает два параметра: координату по x и координату по y. (26 строка)
0
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
20.11.2013, 23:23  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Во-первых все, что должно происходить вызова диалога сохранения файла надо заключить в логические скобки. Чтобы это все выполнялось только когда диалог отработал. (4 и 32 строка)
Во-вторых ваше магическое число 22050 лучше бы заменить переменной. (5 строка)
В-третьих метод Series1->Add() принимает два параметра: координату по x и координату по y. (26 строка)
Извините, но вы поняли меня неверно. Главная задача - это возвращение координат. А они не возвращаются. Вот по тому коду, котоырй я скинул все-равно возвращаются нули.

Добавлено через 2 часа 17 минут
Все, спасибо, решил все самостоятельно. Просто нужно учить матчасть. Всем спасибо за помощь)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.11.2013, 23:23
Помогаю со студенческими работами здесь

Построение графика tg(x) в компоненте chart
непойму как построить tg(x) именно нужно в компоненте chart помогите плз =)

Фон графика в компоненте Chart
Здравствуйте! Подскажите пожалуйста, как изменить фон компонента Chart. Только не всего компонента, а именно участка где находится сам...

Неправильный график в компоненте Chart
Добрый день! Рисую график по координатам (время, скорость). Данные берутся из БД, в которой проблем нет. Там все очень внимательно...

Как узнать текущую позицию в каталоге
Нужно работать с файлами, для этого необходимо знать пути к ним. Перед запуском моей программы с помощью команды cd в командной строке...

Как узнать текущую позицию slimScroll?
если кто работал с этим плагинов подскажите пожалуйста , как узнать текущую позицию ? есть скрипт ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 05.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru