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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив TPoint, Попадает непонятный элемент 
V
    Опции темы
CynicRus
Дата 27.8.2012, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

//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 - и категорически непонятно откуда она там берется. Под отладчиком смотрел - добавляется только одна точка. Как можно отследить эту левую точку?
PM MAIL   Вверх
CynicRus
Дата 27.8.2012, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Поправил метод добавления точки в массив:
Код

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 секунды
Все, починил. Спасибо за внимание-) Затупил с индексами.
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.0407 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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