массив oArrSHP объявляю в секции глобальных переменных как oArrSHP: array of TShape;
- Код: Выделить всё
procedure TfrmMain.WorkM2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
CountX,CountY: integer;
begin
inc(DynaLen);//глобальная переменная для установки размера массива объектов (каждый раз событие увеличивает размер на 1)
SetLength(oArrSHP, DynaLen);
oArrSHP[DynaLen]:=TShape.Create(Self);
oArrSHP[DynaLen].Parent:=pnlFingerBoard;
with oArrSHP[DynaLen] do //Устанавливаем свойства объекта
begin
Width:=19;
Height:=19;
Visible:=true;
Pen.Color:=clBlack;
Shape:=stCircle;
Visible:=true;
Brush.Color:=clRed;
Font.Color:=clBlack;
Font.Bold:=true;
parent.DoubleBuffered:=true;
end;
{ определяю положение указателя мыши и задаю координаты положения объекта }
For CountX := 1 to 6 DO
begin
If (Y>=(ArrStrPos[CountX]-9)) AND (Y<=(ArrStrPos[CountX]+9)) Then
For CountY := 1 to 24 DO begin
oArrSHP[DynaLen].Top:=ArrStrPos[CountX]+1;
If (X>=ArrFrtPos[CountY]) AND (X<ArrFrtPos[CountY+1]) Then
begin
oArrSHP[DynaLen].Left:=ArrFrtLong[CountY]+1;
end;
end;
end;
end;
процедура дает ожидаемый результат, все работает. Затем мне требуется убить все созданные в этой процедуре объекты.
вешаю на событие Click:
- Код: Выделить всё
for CountX:=1 to DynaLen do
begin
oArrSHP[CountX].Free;
oArrSHP[CountX]:=nil;
end
Но объекты не пропадают.
И еще, после работы вышеприведенной процедуры создания шейпов, при выходе из приложения вылетает ошибка
