Проблема с массивом кнопок

SSharapov
Дата: 02.05.2011 17:26:57
Доброго дня!
Есть код.
Он генерирует массив кнопок, при клике на любую из них должна удаляться последняя.
клик на кнопку 0...N-1 удаляет последнюю без проблем.
клик на последнюю удаляет ее и вызывает ошибку access violation...
помогите решить эту проблему!!!
type
  Tmainform = class(TForm)
addg: TButton;
delg: TButton;
procedure addgClick(Sender: TObject);
procedure createg(str:string);
procedure delgClick(Sender: TObject);
end;
var
mainform: Tmainform;
count:integer;
  delgn:array of TButton;
implementation

{$R *.dfm}
//создается массив кнопок
procedure tmainform.createg(str:string);
var
  i:integer;
begin
  i:=count;
  count:=count+1;
  setLength(delgn,count);
  delgn[i]:=TButton.Create(self);
  delgn[i].parent:=mainform;
  delgn[i].Top:=40+30*i;
  delgn[i].Left:=200;
  delgn[i].Width:=20;
  delgn[i].Height:=20;
  delgn[i].Tag:=i;
  delgn[i].Caption:=inttostr(delgn[i].Tag);
  delgn[i].OnClick:=delgClick;
end;
procedure Tmainform.addgClick(Sender: TObject);
begin
  createg('help');
end;
procedure Tmainform.delgClick(Sender: TObject);
var

begin
count:=count-1;
   delgn[count].Free;
   setLength(delgn,count);
 end;
Dmitry Arefiev
Дата: 02.05.2011 17:34:05
Какую "последнюю" ? Та которая N, т.е. которой не существует ?
SSharapov
Дата: 02.05.2011 17:41:29
Dmitry Arefiev,

Нет Если вы имеете в виду массив N элементов [0..N-1] то нет. Удаляется существующий элемент т.к. проблема возникает только когда кнопка пытается удалить саму себя.
Johnmen
Дата: 02.05.2011 18:00:40
а где инициализация count?
SSharapov
Дата: 02.05.2011 18:03:28
Johnmen,

count инициализируется при создании формы count:=0
Johnmen
Дата: 02.05.2011 18:06:06
а где контроль значений count?
SSharapov
Дата: 02.05.2011 18:08:11
Johnmen,

Что вы имеете ввиду?
Johnmen
Дата: 02.05.2011 18:15:33
SSharapov
Johnmen,

Что вы имеете ввиду?

Имею в виду, где отслеживается, какое значение у count?
Или пофигу всё, пусть хоть -12345678 будет?
SSharapov
Дата: 02.05.2011 18:32:04
Johnmen,

Ясно. В оригинале кода count не может быть меньше единицы соотв условия там заданы.
В пошаговом режиме все значения count а также удаляемого элемента соответствуют расчетным проблема возникает после окончания процедуры удаления кнопки. Вываливается в модуле control domouseup()
)
Дата: 02.05.2011 20:13:32
SSharapov
В оригинале кода count не может быть меньше единицы соотв условия там заданы. В пошаговом режиме все значения count а также удаляемого элемента соответствуют расчетным проблема возникает после окончания процедуры удаления кнопки. Вываливается в модуле control domouseup()
1) На какие компоненты прицеплены обработчики событий OnMouseUp? Если ни на какие, то надо посмотреть, как туда управление попадает, например, пошагово (F7) выполнять выход из процедуры delgClick.
2) Где ещё есть доступ к массиву delgn?