Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TChart (недоразумения) 
:(
    Опции темы
Гость_Nobody
Дата 2.4.2005, 23:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Возникли проблемы с компонентом TChart.
TChart Имеет несколько серий (создаются динамически), для каждой свой DataSource (тоже создается динамически в программе), далее в цикле, перебором наносятся точки из датасорса. Вот. Есть несколько моментов, которые пока не могу решить:
1. Выводить среднее значение по всему чарту (т.е. по всем сериям) и по одной, выбранной серии.
Причем не способом
(chart1.Series[0].MaxXValue-chart1.Series[0].MinXValue)/2
А именно среднее, путем складывания всех точек и деления на количество. Причем хочется не в ручную перебором..
2. Как обратится к серии, по ее имени, для, например, ее удаления
FindComponent('Series1').Free; не получается почему-то..
3.надо сделать ползунок, типа такой длинной полосы, которую можно двигать по чарту, и должно отображаться значение на графике, соответствующее точке, где он пересекается с полосой. Короче как можно узнать значение величины по оси Y (графика), в точке с заданными координатами. Хотя нет. С одной только координатой Х, Y= пересечению полосы и графика, его тоже как-то еще надо найти..


Помогите, пожалуйста... smile
  Вверх
FRAGNATIC
Дата 3.4.2005, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: нет
Всего: 11



smile чёт всех на ТЧарты потянула даж мне нужно за сегодня одну прогу замутить))) smile
один вопрос один топик см правила форума
PM MAIL   Вверх
Гость_Nobody
Дата 3.4.2005, 11:37 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











проще было сказать банальное "незнаю"... smile
  Вверх
Alex
Дата 3.4.2005, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 1
Всего: 162



Модератор: Пожалуйста, один топик - один вопрос.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Alex
Дата 3.4.2005, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 1
Всего: 162



Перенесено из раздела Дельфи


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Satana
Дата 3.4.2005, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 564
Регистрация: 15.9.2004
Где: Ставрополь, СЗ ра йон

Репутация: 1
Всего: 5



Ну говоришь что перебором не хочешь а кто тебе мешает ввести новую переменную и в момент подстановки в датасорс складывать и считать общее количество?
Код

///Заполняем чарт
procedure TForm1.Button1Click(Sender: TObject);
begin
Chart1.Series[0].AddXY(1,2);
Chart1.Series[0].AddXY(2,3);
Chart1.Series[0].AddXY(3,4);
Chart1.Series[0].AddXY(4,5);
Chart1.Series[0].AddXY(5,6);
end;

////Присваиваем трекбару (ползунку) количество точек равное количеству точек по Х)
procedure TForm1.Button2Click(Sender: TObject);
begin
TrackBar1.Max:=Chart1.Series[0].Count-1;
end;

///При перемещении ползунка выводим в лейбл У при текущем Х)
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
label1.Caption:=floattostr(Chart1.Series[0].YValue[TrackBar1.Position]);
end;



А так освобождать:
Код

Chart1.Series[0].Free;


Это сообщение отредактировал(а) Satana - 3.4.2005, 14:25


--------------------
 Работай на себя 
www.abalentsev.com - Сайт портфолио.
www.pokushau.ru - Рецепты со всего мира.
PM MAIL WWW ICQ   Вверх
Гость_Nobody
Дата 3.4.2005, 20:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











во-первых спасибо smile , во вторых
Цитата(Satana @ 3.4.2005, 14:08)
А так освобождать:
Код Pascal/Delphi
1:

Chart1.Series[0].Free;


это не по названию, а по номеру серии, поскольку серии создаются динамически, и им динамически же присваиваются имена, то нужно именно по имени, что-то типа FindComponent но в данном случае он не подходит. думаю понадобится массив с именем серии и ее номером... хотя хотелось бы именно по имени., это быстрее

Цитата(Satana @ 3.4.2005, 14:08)
Ну говоришь что перебором не хочешь а кто тебе мешает ввести новую переменную и в момент подстановки в датасорс складывать и считать общее количество?


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


Цитата(Satana @ 3.4.2005, 14:08)
////Присваиваем трекбару (ползунку)


под ползунком немного не это имелось ввиду, но эту проблему уже решила =) smile


  Вверх
Satana
Дата 3.4.2005, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 564
Регистрация: 15.9.2004
Где: Ставрополь, СЗ ра йон

Репутация: 1
Всего: 5



Тек с удалением действительно почемуто проблемы smile
Ну а с датасорсом у тебя есть выход написать хранимую процедуру или вьющку где у тебя будут высчитываться необходимые параметры а тебе будет передаваться только конечные результаты

хотя есть способ:
Код

with TLineSeries(FindComponent('Series1')) do
Free;


ЗЫ ток тут есть один Ньюанс - если у тебя диаграмма то будет TBarSeries ну и т.п. в общем тип графика ты должна посмотреть инспекторе объектов, вверху, напротив имени серии будет ее тип.

Это сообщение отредактировал(а) Satana - 3.4.2005, 22:11


--------------------
 Работай на себя 
www.abalentsev.com - Сайт портфолио.
www.pokushau.ru - Рецепты со всего мира.
PM MAIL WWW ICQ   Вверх
Гость_Nobody
Дата 3.4.2005, 23:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Satana @ 3.4.2005, 22:01)

хотя есть способ:
Код Pascal/Delphi
1:
2:

with TLineSeries(FindComponent('Series1')) do
Free;


я так и пробовала. именно так и не получается, хотя именно так и нада .. smile


Цитата(Satana @ 3.4.2005, 22:01)
Ну а с датасорсом у тебя есть выход написать хранимую процедуру или вьющку где у тебя будут высчитываться необходимые параметры а тебе будет передаваться только конечные результаты


Думаю сервак напрягать такими "мелочами" не лучший вариант.
  Вверх
Satana
Дата 4.4.2005, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 564
Регистрация: 15.9.2004
Где: Ставрополь, СЗ ра йон

Репутация: 1
Всего: 5



ты внимательнее посмотри что я написал и что ты написала в своем примере:
не

with TChart(FindComponent('Series1')) do Free;

а

with TLineSeries(FindComponent('Series1')) do Free;

Это сообщение отредактировал(а) Satana - 4.4.2005, 07:06


--------------------
 Работай на себя 
www.abalentsev.com - Сайт портфолио.
www.pokushau.ru - Рецепты со всего мира.
PM MAIL WWW ICQ   Вверх
Guest
Дата 4.4.2005, 08:41 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Satana @ 4.4.2005, 07:04)
не

with TChart(FindComponent('Series1')) do Free;

а

with TLineSeries(FindComponent('Series1')) do Free;


дубль два:


Цитата
именно так и не получается, хотя именно так и нада

а когда пишу так:
Код

with TLineSeries(FindComponent('qwerty')) do
begin
Active := false;
Free;
end;

вообще аксэс виалейшн.. smile
  Вверх
Satana
Дата 4.4.2005, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 564
Регистрация: 15.9.2004
Где: Ставрополь, СЗ ра йон

Репутация: 1
Всего: 5



Цитата(Guest @ 4.4.2005, 08:41)
Цитата(Satana @ 4.4.2005, )
не

with TChart(FindComponent('Series1')) do Free;

а

with TLineSeries(FindComponent('Series1')) do Free;


дубль два:


Цитата
именно так и не получается, хотя именно так и нада

а когда пишу так:
Код

with TLineSeries(FindComponent('qwerty')) do
begin
Active := false;
Free;
end;

вообще аксэс виалейшн.. smile

не знаю почему у тебя не получается я проверял код рабочий

ЗЫ У тебя какой тип графика? диаграмма, пай, вектора или просто линия? очень многое зависит от типа графика, дай пример кода где ты создаешь график и я тебе дам рабочий код уничтожения этого графика

Это сообщение отредактировал(а) Satana - 4.4.2005, 09:57


--------------------
 Работай на себя 
www.abalentsev.com - Сайт портфолио.
www.pokushau.ru - Рецепты со всего мира.
PM MAIL WWW ICQ   Вверх
Guest
Дата 4.4.2005, 12:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

// Создаем НОВЫЙ экземпляр класса TDataSource
  ds_new := TDataSource.Create(F_Main);
// чтобы имена у всех отличались, беру номер кадастра (уникальный) из листбокса
  ds_new.Name :='DS_'+ListBox_Kadastr.Items.Strings[ListBox_Kadastr.ItemIndex];
  ds_new.DataSet:=
//'Q_'+ListBox_Kadastr.Items.Strings[ListBox_Kadastr.ItemIndex] - квери, с датасетом на выбранный //кадастр
   TDataSet(FindComponent('Q_'+ListBox_Kadastr.Items.Strings[ListBox_Kadastr.ItemIndex]));
   
//создаем новую серию на графике
begin
   with Graphic do
   begin
    Title.Text.Clear;
     Title.Text.Add('Графики измерений выбранных кадастров');
//#####################################################
// ############   тут создаю серию    ########################
//#########################################
    ChartSer_new := TLineSeries.Create(nil);
    with  ChartSer_new do
    begin
          Clear;
          ParentChart := Graphic;
          AllowPanning :=pmBoth;
// ето коментарии для себя, с какого-то сайта =)
          {Определяет возможность пользователя прокручивать наблюдаемую часть графика во время выполнения, нажимая правую кнопку мыши:
pmNone – прокрутка запрещена;
pmHorizontal – разрешена прокрутка только в горизонтальном направлении;
pmVertical – только в вертикальном
pmBoth – в обоих напрвлениях}
          AllowZoom := true; {
    Позволяет пользователю изменять во время выполнения масштаб изображения, вырезая фрагменты диаграммы или графика курсором мыши.}
          Marks.ArrowLength := 8 ;
          Marks.Visible := CB_Graphic_Marks.Checked;
          XValues.DateTime := True      ;
          XValues.Name := 'X'           ;
          XValues.Order := loAscending           ;
          XValues.ValueSource := 'dat'    ;
          YValues.DateTime := False             ;
          YValues.Name := 'Y'                  ;
          YValues.Order := loNone           ;
          YValues.ValueSource := 'lev'     ;
// определяю уникальное имя для серии, по этому имени потом хочу удалять
          Name := 'CS_'+ListBox_Kadastr.Items.Strings[ListBox_Kadastr.ItemIndex];
          Title := ListBox_Kadastr.Items.Strings[ListBox_Kadastr.ItemIndex];
          Active:= true;
     end;
 q_new.First;
// ну и заполняю занчениями из датасорса
    while not q_new.Eof do
     begin
       if  q_new.FieldValues['lev']<>null then
       ChartSer_new.AddXY(q_new.FieldValues['dat'],q_new.FieldValues['lev']);
       q_new.Next;
     end;
   end;
end;
{procedure TF_Main.SE_WithChange(Sender: TObject);
var i : integer;
begin
for i:=0 to Graphic.SeriesList.Count-1  do
   begin
    with Graphic.SeriesList.Series[i]  as TLineSeries do
    LinePen.Width := SE_With.Value;
   end ;
end;}
SE_WithChange(self);
ListBox_Kadastr.DeleteSelected;


вот такой код...млин.. короче серия- обычная линия
  Вверх
Guest
Дата 4.4.2005, 12:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











а, и еще такой вопросик, если я посчитаю среднее для каждой серии, как бы мне ето среднее сохранить? хочется в Tag, но ето среднее будет нецелочисленное. Как нибудь так, чтобы было соответствие между серией и средним для нее.... smile
  Вверх
Satana
Дата 4.4.2005, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 564
Регистрация: 15.9.2004
Где: Ставрополь, СЗ ра йон

Репутация: 1
Всего: 5



Цитата(Guest @ 4.4.2005, 12:04)
а, и еще такой вопросик, если я посчитаю среднее для каждой серии, как бы мне ето среднее сохранить? хочется в Tag, но ето среднее будет нецелочисленное. Как нибудь так, чтобы было соответствие между серией и средним для нее.... smile

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


--------------------
 Работай на себя 
www.abalentsev.com - Сайт портфолио.
www.pokushau.ru - Рецепты со всего мира.
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.