Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.09;
Скачать: CL | DM;

Вниз

почему то происходит обращение к удаленному Shape   Найти похожие ветки 

 
Тимофей_ка   (2007-08-19 16:22) [0]

const
 ShEnd1=5;
 ShEnd2=4;

var
 Sh: array [1..ShEnd1, 1..ShEnd2] of TShape;


for i := Low(sh) to ShEnd1 do
for j := Low(sh) to ShEnd2 do
begin
 if assigned(Sh[i,j]) then InRect(Sh[i,j]);
end;


вот процедура в которой идет удаление объекта:

procedure TForm4.InRect (Shapes: TShape);
begin

// здесь всякий код в котором идет обращение к объекту (здесь как раз и валится если Shape удален). По условию иногда Shape удаляется:

   Shapes.Free;
 end;

end;


так вот если Sh[i,j] удален, то выходит access violaton, хотя вроде проверку правильно сделал и в процедуру он лезть не должен, но почему то лезет, пожскажите что не так ?


 
Anatoly Podgoretsky ©   (2007-08-19 16:26) [1]

А nil будет Пушкин присваивать?


 
Тимофей_ка   (2007-08-19 16:27) [2]

да писал я и nil, все равно та же ошибка )))


 
Anatoly Podgoretsky ©   (2007-08-19 16:30) [3]

> Тимофей_ка  (19.08.2007 16:27:02)  [2]

Слова, слова и ничего кроме слов.
Я лично компилятору верю, а тебе нет.


 
Тимофей_ка   (2007-08-19 16:33) [4]

вот сейчас процедура уже такая:

procedure TForm4.InRect (Shapes: TShape);
var
IsDrop:boolean;

begin
 //всякий код
 if IsDrop=true then
 begin
   Shapes.Free;
   Shapes:=nil;
 end;
end;

end;


так вот он в эту процедуру все равно лезет при удаленном Shape...


 
Anatoly Podgoretsky ©   (2007-08-19 16:37) [5]

> Тимофей_ка  (19.08.2007 16:33:04)  [4]

Shapes никакого отношения к sh не имеет


 
Тимофей_ка   (2007-08-19 16:43) [6]


> Shapes никакого отношения к sh не имеет


надо вне процедуры обнулять ?

Sh[i,j].free;
Sh[i,j]:=nil;


 
Anatoly Podgoretsky ©   (2007-08-19 16:44) [7]

> Тимофей_ка  (19.08.2007 16:43:06)  [6]

Вот это другое дело и ты утверждаешь, что у тебя происходит вызов, не верю


 
Тимофей_ка   (2007-08-19 16:54) [8]

написал вот так:


var
IsDr:boolean;

for i := Low(sh) to ShEnd1 do
for j := Low(sh) to ShEnd2 do
begin
 if Sh[i,j]<>nil then InRect(Sh[i,j],IsDr);
 if IsDr=true then
 begin
   sh[i,j].Free;
   sh[i,j]:=nil;
 end;
end;


процедура:

procedure TForm4.InRect (Shapes: TShape; IsDrop:Boolean);
begin

//условие
 IsDrop:=True;
end;


теперь не валится, но и Shape с формы не удаляется.


 
Anatoly Podgoretsky ©   (2007-08-19 16:59) [9]

> Тимофей_ка  (19.08.2007 16:54:08)  [8]

Нигде не видать, что бы с формы чегото убиралось.
Опять молчишь, опять темнишь.
Слова, слова и ни видать желания.


 
Тимофей_ка   (2007-08-19 17:02) [10]

ну изначально массив Shape-ов создается на форме (визуальный компонент):

for i := Low(sh) to ShEnd1 do
 for j := Low(sh) to ShEnd2 do
 begin
   Sh[i,j]:=TShape.create(self);
   Sh[i,j].parent:=form4;
   with Sh[i,j] do
   begin
     parent := form4;
     height := 25;
     width := 80;
     top := i * 100 - 80;
     left := j* 180 - 140;
   end;
 end;


когда у меня было в коде: Shapes.free; соответствующий Shape удалялся с формы и это правльно, но при повторном обращении как я говорил вылатала ошибка.
сейчас при том куске кода что я написал выше,  Shape не удаляются с формы вообще.


 
Anatoly Podgoretsky ©   (2007-08-19 17:05) [11]

> Тимофей_ка  (19.08.2007 17:02:10)  [10]

Опять какой то неизвестный Shapes


 
Тимофей_ка   (2007-08-19 17:11) [12]

всё, понял, сделал. получилось
спасибо!


 
Юрий Зотов ©   (2007-08-19 17:16) [13]

> Тимофей_ка   (19.08.07 16:54) [8]

Перед проверкой IsDr нужно обновлять, иначе там хранится старое значение.

for i := Low(sh) to ShEnd1 do
 for j := Low(sh) to ShEnd2 do
 begin
   if Sh[i, j] <> nil then
   begin
     InRect(Sh[i, j], IsDr);
     if IsDr then
     begin
       sh[i, j].Free;
       sh[i, j]:=nil;
     end;
   end;
 end;



Страницы: 1 вся ветка

Текущий архив: 2007.09.09;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.027 c
9-1159546810
Ford
2006-09-29 20:20
2007.09.09
Ошибка в рендере ландшафта


15-1186642187
Проходящий
2007-08-09 10:49
2007.09.09
Opensource на Delphi


2-1187074172
Quart
2007-08-14 10:49
2007.09.09
BLOB


15-1187122325
AntiUser
2007-08-15 00:12
2007.09.09
Есть ли различия?


15-1187185177
Леонид Федьков
2007-08-15 17:39
2007.09.09
DELPHI 6 и 64-разрядные компьютеры.