Форум: "Начинающим";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];
Внизпочему то происходит обращение к удаленному 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.109 c