Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1187094594
Админостратар
2007-08-14 16:29
2007.09.09
Что-то терзает мутное сомнение...


15-1186754480
Александр Иванов
2007-08-10 18:01
2007.09.09
Не пройдет и полгода, и я появлюсь


2-1186460092
bagos
2007-08-07 08:14
2007.09.09
teechart


3-1178897039
DeadMeat
2007-05-11 19:23
2007.09.09
Identity


6-1168954957
TWINc_
2007-01-16 16:42
2007.09.09
Прием буфера из сокета





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский