![]() |
|
#1
|
|||
|
|||
![]() Здравствуйте, помогите со следующей задачей.
на форме находятся объекты Timage, listbox, checklistbox и кнопка удалить. на image по щелчку ставятся точки, их координаты отображаются в листбоксах. Проблемы с реализацией удаления: по нажатию кнопки удалить должны удаляться выбранные в чеклистбоксе точки и соответственно их координаты в чеклистбоксе. точки то удаляются, но появляется ошибка list index out of bounds(..) Код:
unit Lab3; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, jpeg, CheckLst; type mass = array[1..1000] of integer; TForm1 = class(TForm) Path: TImage; ListBox1: TListBox; CheckListBox1: TCheckListBox; Button1: TButton; procedure PathMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ListBox1DblClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; a,b:mass; m,n:integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin a[1]:=-10; b[1]:=-10; n:=2; end; function Check(x,y:integer):boolean; begin Check:=true; a[n]:=x; b[n]:=y; for m:=1 to N-1 do begin if (sqrt(sqr(a[m]-x)+sqr(b[m]-y))<=10) then begin Check:=false; break; end; end; inc(n); end; procedure TForm1.PathMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var st:string; begin if Check(X,Y) then begin Path.Canvas.Brush.Color:=clblack; Path.Canvas.Ellipse(X-3,Y-3,X+3,Y+3); st:='('+inttostr(X)+','+inttostr(Y)+')'; Listbox1.Items.Add(st); CheckListBox1.Items.Add(st); end; end; procedure TForm1.ListBox1DblClick(Sender: TObject); var z,i,j:integer; s,s1,s2:string; begin z:=listbox1.ItemIndex; s:=ListBox1.Items[ListBox1.ItemIndex]; for i:=2 to length(s) do begin if s[i]=',' then break else s1:=s1+s[i]; j:=i; end; for i:=j+2 to length(s) do begin if s[i]=')' then break else s2:=s2+s[i]; end; Path.Canvas.Pen.Color:=clwhite; Path.Canvas.Brush.Color:=clwhite; Path.Canvas.Ellipse(strtoint(s1)-3,strtoint(s2)-3,strtoint(s1)+3,strtoint(s2)+3); listbox1.Items.Delete(z); end; procedure TForm1.Button1Click(Sender: TObject); var p,z,i,j:integer; s,s1,s2:string; begin for p:=0 to CheckListBox1.Count-1 do begin if CheckListBox1.Checked[p] then begin z:=CheckListBox1.ItemIndex; s:=CheckListBox1.Items[p]; for i:=2 to length(s) do begin if s[i]=',' then break else s1:=s1+s[i]; j:=i; end; for i:=j+2 to length(s) do begin if s[i]=')' then break else s2:=s2+s[i]; end; Path.Canvas.Pen.Color:=clwhite; Path.Canvas.Brush.Color:=clwhite; Path.Canvas.Ellipse(strtoint(s1)-3,strtoint(s2)-3,strtoint(s1)+3,strtoint(s2)+3); CheckListBox1.Items.Delete(z); end; end; end; end. |