Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удаление созданных компонентов [D7, XP]


Страницы:   1 2

Annn ©   (2007-02-13 13:51:00) 

Здраствуйте. Помогите решить мне такою проблемку (немогу корректно
удвлить "выделенные" объекты
)

Var
``````````````````````
I_:array[1..100] of TImage;
          il:integer=0;
  SelObj:TStringList;
``````````````````````
//Создание списка на удаление
procedure TForm1.FormActivate(Sender: TObject);
begin
SelObj:=TStringList.Create;
end;

//Так создаю компоненты (Массив нужен для обрашения к комнентам)
`````````````````````````
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
il:=il+1;
 I_[il]:=TImage.Create(self);
with I_[il] do begin
 Parent:=Form1;
  Name:='I'+IntToStr(il);
    Transparent:=True;
     Left:=StrToInt(sl);
      Top:=StrToInt(st);
       Width:=60;
        Height:=40;
        Tag:=3;
         Picture:=Form3.Image1.Picture;
            OnClick:=DelImg.OnClick;
end;
end;
//Это событие присваеваю всем созданным компонентам
// OnClick:=DelImg.OnClick;
`````````````````````````````````````
procedure TForm1.DelImgClick(Sender: TObject);
begin
SelObj.Add((Sender as TImage).Name);
SelObj.Sort;
end;

//Кнопка удаления объектов списка
//Вот сдесь и возникает какая то ошибка
//иногда удаляет и иногда выдают ошибку
`````````````````````````````````````
procedure TForm1.Button3Click(Sender: TObject);
var
del,so : Integer;
begin

for del := Pred(ComponentCount) downto 0 do
if (Components[del] is TImage)and
((Components[del] as TImage).Left>=162)and
 ((Components[del] as TImage).Top>=58)
 then
 for so:=0 to SelObj.Count-1 do
 if SelObj.Strings[so]=(Components[del] as TImage).Name
 then

 TImage(Components[del]).Free;
     SelObj.Clear;

   end;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
SelObj.Clear;
end;


Elen   (2007-02-13 15:05:00) [21]


> for i:=0 to Form1.ComponentCount-1 do
> Components[i].Free;

Кстати попробуй вместо этого вот это while Form1.ComponentCount>=1 do  form1.Components[Form1.ComponentCount-1].Free;


Elen   (2007-02-13 14:56:00) [22]


> А почему при Components[i].Free; не проверяеш его на nil?

Ой не это кажись фигню морожу.
Лучше скажи в какой строке останавливается.?


Elen   (2007-02-13 14:55:00) [23]


> дело не в том наверное
> вот такой код выдаёт ту же ошибку
> //form.OnClik
> var
> i:integer;
> begin
> for i:=0 to Form1.ComponentCount-1 do
> Components[i].Free;
> end;

А почему при Components[i].Free; не проверяеш его на nil?


Annn   (2007-02-13 14:47:00) [24]

дело не в том наверное
вот такой код выдаёт ту же ошибку
//form.OnClik
var
i:integer;
begin
for i:=0 to Form1.ComponentCount-1 do
Components[i].Free;
end;


icWasya   (2007-02-13 14:22:00) [25]

Скорее всего
SelObj:=TStringList.Create;
SelObj.Duplicates := dupIgnore;//<<<===-----

и по стилю - поскольку Name и Free есть прямо у TComponent, то вот это

for so:=0 to SelObj.Count-1 do
if SelObj.Strings[so]=(Components[del] as TImage).Name
then
TImage(Components[del]).Free;


можно заменить на это


if SelObj.IndexOf(Components[del] .Name) >0
then
  Components[del].Free;


Annn   (2007-02-13 14:09:00) [26]

Progect Progect1.exe raiset exception class ELisrError with message`List index out of bounts(3)`Такая вот ошибка(ну может и не там)


Elen   (2007-02-13 13:58:00) [27]


> Annn   (13.02.07 13:51)
//Вот сдесь и возникает какая то ошибка

Если не секрет в какой строке?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо