Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Access violation at address... Как решить траблу? 
V
    Опции темы
igmyrj
  Дата 21.3.2006, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 7.11.2005

Репутация: нет
Всего: нет



Итак, у меня есть форма на которой есть ListBox, 2 кнопки (добавить и удалить) и 2 edit'а.
Мне надо, что бы при нажатии на кнопку Добавить в ListBox'е появлялось новое поле с именем из 1-го edit'а и запоминалось значение 2-го edit'а. Когда в ListBox'е пользователь выбирает какую-нибудь запись в этих 2-ух полях высвечивается её имя и запомненное значение 2-го edit'а. Вот код для кнопки Добавить:
Код

procedure TForm5.AddClick(Sender: TObject);
var
  l, i: integer;
begin
  if MyName.Text<>'' then
  begin
    ListBox1.Items.Add(Name.Text);
    if Myitems<>nil then
    begin
      l:= high(Myitems)+1;
      SetLength (Myitems, l);
      Myitems[l].name:=Name.Text;
      Myitems[l].neuron:=strtoint(Neuron.Text);
      for i:=0 to 100 do
      begin
        Myitems[l].paint[i]:=painted[i];
      end;
    end
    else
    SetLength (Myitems, 1);
    Myitems[0].name:=Name.Text;
    Myitems[0].neuron:=strtoint(Neuron.Text);
  end;

end;

Вот это происходит при клике на ListBox:
Код

procedure TForm5.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  i: integer;
begin
  if ListBox1.ItemIndex>=0 then
  begin

    MyName.Text:=items[ListBox1.ItemIndex].name;
    MyNeuron.Text:=inttostr(items[ListBox1.ItemIndex].Neuron);
    MyName.Refresh;
    MyNeuron.Refresh;
    for i:=0 to 100 do
    begin
      painted[i]:=Myitems[ListBox1.ItemIndex].paint[i];
    end;
    PaintBox1.Refresh;
  end;
end;

Там еще есть PaintBox, но это не существенно, проблема не в нем.
А проблема вот в чем. Если у меня в ListBox'е больше 2-ух полей, то при нажатии на них (кроме как на первые два) выскакивает сообщение:"Access violation at address...и т.д" Как с этим бороться не подскажете?
И еще одна проблема. Он вообще как-то коряво выводит в edit'ы данные о выбраной записи. То не выводит вообще, то выводит только о последней...

P.S Я наверное плохо описал=) так что спрашивайте если что=)

Это сообщение отредактировал(а) igmyrj - 21.3.2006, 20:32
PM MAIL   Вверх
Демо
Дата 21.3.2006, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Для начала убери из названий переменных, структур зарезервированные слова - Name, Items, чтобы можно было хотя бы видеть, где у тебя объекты, а где твои переменные.


--------------------
    
PM MAIL ICQ Skype   Вверх
igmyrj
Дата 21.3.2006, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 7.11.2005

Репутация: нет
Всего: нет



Отредактировал
PM MAIL   Вверх
Демо
Дата 22.3.2006, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



1. Сразу же вопрос:
В первом примере кода в else у тебя только одна строка должна выполняться или все три?
Если три, тогда код нужно изменить так:
Код

    else    
    begin
      SetLength (Myitems, 1);    
      Myitems[0].name:=Name.Text;    
      Myitems[0].neuron:=strtoint(Neuron.Text);
    end;


2. Что за тип MyItems? Под него ты не выделяешь память. Это так и нужно? Если это динамический массив, то зачем проверка
Код

 if Myitems<>nil then
?

3. Ты не сказал, что в сообщении об Exception сказано.
4. Пройди отладчиком и посмотри, на какой строке возникает исключение.


--------------------
    
PM MAIL ICQ Skype   Вверх
igmyrj
Дата 22.3.2006, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 7.11.2005

Репутация: нет
Всего: нет



Спасибо, с этим вопросом я уже справился. Но теперь возникла другая проблема на ту же тему.
Форма та же самая только 2-го Edit'а нет. В общем все то же самое...
Вот код для кнопки Добавить:
Код

  Neuronet:=TNeuronet.Create;
  if Name.Text='' then Name.Text:='unnamed';
  ListBox1.Items.Add(Name.Text);
  SetLength (NeuroNet.Neurons, length(NeuroNet.neurons)+1);
  NeuroNet.Neurons[ListBox1.count]:=TNeuron.Create;
  NeuroNet.Neurons[ListBox1.count].name:=Name.Text;

Вот что происходит при клике на Лист Бокс:
Код

 Name.Text:=NeuroNet.neurons[ListBox1.ItemIndex].name;

При исполнении этой процедуры (клик) выскакивает сообщение "Access violation...". Я не знаю, что с этим делать, не подскажете?
PM MAIL   Вверх
igmyrj
Дата 22.3.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 7.11.2005

Репутация: нет
Всего: нет



Ладно, уже все=) Каким то образом заработало, хотя я вроде ничего и не менял smile
PM MAIL   Вверх
Dian
Дата 23.3.2006, 03:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 2.1.2006

Репутация: нет
Всего: 1



Код

l:= high(Myitems)+1;
SetLength (Myitems, l);

Здесь была проблема. High - на 1 меньше длины массива. В SetLength длина не меняется, поэтому Myitems[l] выходит за границу.
PM MAIL WWW   Вверх
igmyrj
Дата 23.3.2006, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 7.11.2005

Репутация: нет
Всего: нет



Ага! Спасибо! Теперь понятно!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.