Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2014, 22:59   #1
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию Ошибка при динамическом стирание объектов

Код:
procedure TForm1._ClickHODPers(Sender: TObject);
VAR I, I1:INTEGER;
begin
  Xpers:=(Sender AS TIMAGE).Left;
  Ypers:=(Sender AS TIMAGE).Top;
  for i := 0 to length(HODPers)-1 do for i1 := 0 to length(HODPers[0])-1 do begin
    if HODPers[i, i1] <> nil then
      HODPers[i, i1].Free;
  end;
end;

procedure TForm1._ClickPersonages(Sender: TObject);
begin

  if Personages.Left <> 0 then begin
    HODPers[(Personages.Left-32) div 32, Personages.Top div 32]:=TImage.Create(Scrollbox1);
    HODPers[(Personages.Left-32) div 32, Personages.Top div 32].Parent:=Scrollbox1;
    HODPers[(Personages.Left-32) div 32, Personages.Top div 32].Left:=Personages.Left-32;
    HODPers[(Personages.Left-32) div 32, Personages.Top div 32].Top:=Personages.Top;
    HODPers[(Personages.Left-32) div 32, Personages.Top div 32].AutoSize:=True;
    HODPers[(Personages.Left-32) div 32, Personages.Top div 32].Picture.LoadFromFile(PathFileExe+'\HodPers1.png');
    HODPers[(Personages.Left-32) div 32, Personages.Top div 32].OnClick:=_ClickHODPers;
  end;

  if Personages.Left+32 <> MAPS.Width then begin
    HODPers[(Personages.Left+32) div 32, Personages.Top div 32]:=TImage.Create(Scrollbox1);
    HODPers[(Personages.Left+32) div 32, Personages.Top div 32].Parent:=Scrollbox1;
    HODPers[(Personages.Left+32) div 32, Personages.Top div 32].Left:=Personages.Left+32;
    HODPers[(Personages.Left+32) div 32, Personages.Top div 32].Top:=Personages.Top;
    HODPers[(Personages.Left+32) div 32, Personages.Top div 32].AutoSize:=True;
    HODPers[(Personages.Left+32) div 32, Personages.Top div 32].Picture.LoadFromFile(PathFileExe+'\HodPers1.png');
    HODPers[(Personages.Left+32) div 32, Personages.Top div 32].OnClick:=_ClickHODPers;
  end;

  if Personages.Top <> 0 then begin
    HODPers[Personages.Left div 32, (Personages.Top-32) div 32]:=TImage.Create(Scrollbox1);
    HODPers[Personages.Left div 32, (Personages.Top-32) div 32].Parent:=Scrollbox1;
    HODPers[Personages.Left div 32, (Personages.Top-32) div 32].Left:=Personages.Left;
    HODPers[Personages.Left div 32, (Personages.Top-32) div 32].Top:=Personages.Top-32;
    HODPers[Personages.Left div 32, (Personages.Top-32) div 32].AutoSize:=True;
    HODPers[Personages.Left div 32, (Personages.Top-32) div 32].Picture.LoadFromFile(PathFileExe+'\HodPers1.png');
    HODPers[Personages.Left div 32, (Personages.Top-32) div 32].OnClick:=_ClickHODPers;
  end;

  if Personages.Top+32 <> MAPS.Height then begin
    HODPers[Personages.Left div 32, (Personages.Top+32) div 32]:=TImage.Create(Scrollbox1);
    HODPers[Personages.Left div 32, (Personages.Top+32) div 32].Parent:=Scrollbox1;
    HODPers[Personages.Left div 32, (Personages.Top+32) div 32].Left:=Personages.Left;
    HODPers[Personages.Left div 32, (Personages.Top+32) div 32].Top:=Personages.Top+32;
    HODPers[Personages.Left div 32, (Personages.Top+32) div 32].AutoSize:=True;
    HODPers[Personages.Left div 32, (Personages.Top+32) div 32].Picture.LoadFromFile(PathFileExe+'\HodPers1.png');
    HODPers[Personages.Left div 32, (Personages.Top+32) div 32].OnClick:=_ClickHODPers;
  end;

  if (Personages.Left <> 0)and(Personages.Top <> 0) then begin
    HODPers[(Personages.Left-32) div 32, (Personages.Top-32) div 32]:=TImage.Create(Scrollbox1);
    HODPers[(Personages.Left-32) div 32, (Personages.Top-32) div 32].Parent:=Scrollbox1;
    HODPers[(Personages.Left-32) div 32, (Personages.Top-32) div 32].Left:=Personages.Left-32;
    HODPers[(Personages.Left-32) div 32, (Personages.Top-32) div 32].Top:=Personages.Top-32;
    HODPers[(Personages.Left-32) div 32, (Personages.Top-32) div 32].AutoSize:=True;
    HODPers[(Personages.Left-32) div 32, (Personages.Top-32) div 32].Picture.LoadFromFile(PathFileExe+'\HodPers1.png');
    HODPers[(Personages.Left-32) div 32, (Personages.Top-32) div 32].OnClick:=_ClickHODPers;
  end;

  if (Personages.Left <> 0)and(Personages.Top+32 <> MAPS.Height) then begin
    HODPers[(Personages.Left-32) div 32, (Personages.Top+32) div 32]:=TImage.Create(Scrollbox1);
    HODPers[(Personages.Left-32) div 32, (Personages.Top+32) div 32].Parent:=Scrollbox1;
    HODPers[(Personages.Left-32) div 32, (Personages.Top+32) div 32].Left:=Personages.Left-32;
    HODPers[(Personages.Left-32) div 32, (Personages.Top+32) div 32].Top:=Personages.Top+32;
    HODPers[(Personages.Left-32) div 32, (Personages.Top+32) div 32].AutoSize:=True;
    HODPers[(Personages.Left-32) div 32, (Personages.Top+32) div 32].Picture.LoadFromFile(PathFileExe+'\HodPers1.png');
    HODPers[(Personages.Left-32) div 32, (Personages.Top+32) div 32].OnClick:=_ClickHODPers;
  end;
...
end;
но в событии procedure TForm1._ClickHODPers(Sender: TObject); возникает системная ошибка
Alexandr17 вне форума Ответить с цитированием
Старый 22.07.2014, 23:07   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

бросается в глаза счётчик во втором цикле
Код:
for i := 0 to length(HODPers)-1 do for i1 := 0 to length(HODPers[0])-1 do begin
Там HODPers[i] по идее должно быть
eoln вне форума Ответить с цитированием
Старый 22.07.2014, 23:11   #3
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию

Даже исли исправить то все равно системная ошибка
Alexandr17 вне форума Ответить с цитированием
Старый 22.07.2014, 23:15   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Что за ошибка (текст/скрин) возникает при отладке и на какой строке?
eoln вне форума Ответить с цитированием
Старый 22.07.2014, 23:19   #5
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию

отловить на какой строке не получится. Гдето в цикле а скрин ошибки вот
Alexandr17 вне форума Ответить с цитированием
Старый 22.07.2014, 23:27   #6
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Объекта там нет, вот и возникает ошибка. Возможно при втором клике происходит. Сразу после создания массива проиницилизируй его nil'ами, а при удалении тоже присваивай nil, что-то типа этого (смотря чем является HODPers)
Код:
if HODPers[i, i1] <> nil then begin
      HODPers[i, i1].Free;
      HODPers[i, i1]:=nil
end;
И лучше по F8 пробежаться, чтоб найти строчку
eoln вне форума Ответить с цитированием
Старый 22.07.2014, 23:30   #7
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию

Вот ммасив объекта. HODPers:array[0..4,0..4] of timage;
так что это после create объекта делать
Alexandr17 вне форума Ответить с цитированием
Старый 22.07.2014, 23:33   #8
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Инициализировать когда? - сразу после объявления массива, ещё до создания объекта.
Если массив глобальный, то где-то в CreateForm, если локальный - то в начале функции
eoln вне форума Ответить с цитированием
Старый 22.07.2014, 23:34   #9
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию

Массив глобальный. Но создаваться объекты должны только по нажатию на персонажа
Alexandr17 вне форума Ответить с цитированием
Старый 22.07.2014, 23:40   #10
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Это не влияет на создание персонажей
CreateForm можно добавить
Код:
for i := 0 to 4 do for i1 := 0 to 4 do HODPers[i, i1] := nil
А при удалении обязательно
Код:
if HODPers[i, i1] <> nil then begin
      HODPers[i, i1].Free;
      HODPers[i, i1]:=nil
end;
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработка событий при динамическом создании Veronikaa Компоненты Delphi 4 10.05.2012 17:13
Глюк при динамическом создании Label. BingoBongo Общие вопросы Delphi 2 10.05.2011 19:41
Ошибка AV при уничтожении объектов из модулей(dll) puga555 Общие вопросы Delphi 4 08.01.2010 22:14