Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Массив TPoint


Автор: CynicRus 27.8.2012, 10:43
Приветствую уважаемых форумчан. Возникла следующая проблемка: добавляю в массив точек соответственно точку:
Код

//type TWaypoint = array of TPoint;
procedure TForm1.AddWaypoint(var wp: TWaypoint; index: integer; pt: TPoint);
var
  Len : integer;
begin
   Len:= Length(wp);
   if Index >= Len then Index := Len+1;
   setLength( wp, Len+1);
   move( wp[Index], wp[ Index+1 ],
         (Len-Index) * sizeof( wp[Index] ));
   wp[Index] := pt;
end;
 и затем отрисовываю этот массив на канвасе:
Код

procedure TForm1.DrawWaypoint(wp: TWaypoint);
var
  TPA: array of TPoint;
  i: integer;
begin
  for i:=0 to Length(wp)-1 do
    begin
      SetLength(TPA,Length(TPA)+1);
      TPA[i]:=wp[i];
      DrawPoint(TPA[i].x,TPA[i].y);
    end;
  if Length(TPA) > 2 then
  PathBuffer.Canvas.Polyline(TPA);
  TPA:=nil;
end;
 попутно добавляя информацию из массива в TListView:
Код

procedure TForm1.WaypointToListView(wp: TWaypoint);
var
  li: TListItem;
  i: integer;
begin
  PointList.Clear;
  for i:=0 to Length(wp)-1 do
    begin
      li:=PointList.Items.Add;
      li.Caption:=IntToStr(i);
      li.SubItems.Add(IntToStr(wp[i].x));
      li.SubItems.Add(IntToStr(wp[i].y));
    end;
end;
 и собственно это даже работает. И все бы было хорошо, если бы не маленький недостаток. В массиве постоянно последним элементом стоит точка 0,0 - и категорически непонятно откуда она там берется. Под отладчиком смотрел - добавляется только одна точка. Как можно отследить эту левую точку?

Автор: CynicRus 27.8.2012, 10:59
Поправил метод добавления точки в массив:
Код

procedure TForm1.AddWaypoint(var wp: TWaypoint; index: integer; pt: TPoint);
var
  Len : integer;
begin
   Len:= Length(wp);
   if Index >= Len then
     Index := Len+1;
   Inc(Len);
   setLength(wp, Len);
   wp[Len - 1] := pt;
end;

Однако теперь злая точка 0,0 попадает в его начало. 

Инициализирую массив как SetLength(WP,1);

Добавлено через 5 минут и 24 секунды
Все, починил. Спасибо за внимание-) Затупил с индексами.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)