делаю так 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);
}
}
}
}
{
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);
}
}
}
}