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

 
 
> удаление точки графика Chart
123kill12
сообщение May 30 2011, 10:38
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 12-05-10
Пользователь №: 57 217



хочу удалить одну точку с графика Series.

делаю так Series->Delete(i) где i номер нужной точки.
выдает ошибку "list index out of bounds".
я думаю это связано с тем что удаляя элемент из списка я оставляю пустое место. может нужно как то сдвинуть все элементы.
если забивать на эту ошибку. то точка удалится, а остальные не будут удаляться((((

удалить весь график и построить снова не вариант.

Код
void mouse_point(TPoint cPt)
{
    int Xx;
    double T;
    T=((double)0xFFFF)/(HorRes-90-170);
    Xx=(int)(T*(cPt.x-170));
    Form2->Series13->AddXY(Xx,general_buff[Xx],' ',clGreen);
    TLabel* l=new TLabel(Form1);
    T=((double)((Xx*20)-(otstup*20)))/1000;
    l->Caption="T:="+FloatToStr(T)+"ms";
    l->Parent=Form2->Chart1;
    l->Name="Label" + IntToStr(GNP+500);
    l->Transparent=true;
    l->Font->Size=10;
    l->Font->Color=clGreen;
    l->Top=cPt.y;
    l->Left=cPt.x;
    l->BringToFront();
    LabelList->Add(l);
    GNP++;
    l=new TLabel(Form1);
    l->Caption="U:="+FloatToStr(general_buff[Xx])+"V";
    l->Parent=Form2->Chart1;
    l->Name="Label" + IntToStr(GNP+500);
    l->Transparent=true;
    l->Font->Size=10;
    l->Font->Color=clGreen;
    l->Top=cPt.y+20;
    l->Left=cPt.x;
    l->BringToFront();
    GNP++;
}


void __fastcall TForm2::Chart1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  TPoint cPt;
  double HorX, VertY;
  int Xx;
  double T;
  HDC Disp_DC = CreateDC("DISPLAY", NULL, NULL, NULL);
  HorRes = GetDeviceCaps(Disp_DC, HORZRES);
  VertRes = GetDeviceCaps(Disp_DC, VERTRES);
  DeleteDC(Disp_DC);
  GetCursorPos(&cPt);
  if(cPt.x>170 && cPt.x<(HorRes-90))
  {
      if(cPt.y>60 && cPt.y<(VertRes-140))
      {
        if(Button == mbRight)
        {
            for(int i=0;i<(GNP/2);i++)
            {
               int Ny=((TLabel*)LabelList->Items[i])->Top;
               int Nx=((TLabel*)LabelList->Items[i])->Left;
               if(Nx>=(cPt.x-4) && Nx<=(cPt.x+4))
               {
                 if(Ny>=(cPt.y-20) && Ny<=(cPt.y+20))
                 {
                     Form2->Series13->Delete(i);
                     AnsiString S="Label"+IntToStr(i*2+500);
                     TComponent* Tc = Form1->FindComponent(S);
                     TLabel *vTl;
                     vTl = dynamic_cast<TLabel*>(Tc);
                     delete vTl;
                     S="Label"+IntToStr(i*2+500+1);
                     Tc = Form1->FindComponent(S);
                     vTl = dynamic_cast<TLabel*>(Tc);
                     delete vTl;
                 }
               }
            }
        }
        else
        {
          mouse_point(cPt);
        }
      }
  }
}
Go to the top of the page
 
+Quote Post



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

 


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


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