
17.11.2010, 15:27
|
Прохожий
|
|
Регистрация: 17.11.2010
Сообщения: 3
Репутация: 10
|
|
CheckListBox
Здравствуйте, помогите со следующей задачей.
на форме находятся объекты 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.
|