Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.11.2010, 15:27
Antihrist174 Antihrist174 вне форума
Прохожий
 
Регистрация: 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.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:46.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025