Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

PolyLine


9899100 ©   (2008-12-10 10:51:00) 

для этой функции качестве аргумента передается массив точек
все замечательно если я знаю сколько точек я передаю
а если это не известно заранее
например можно построить функцию по 3 точкам а можно по 30
как сформировать такой массив точек с неизвестным размером для передачи в качестве параметра функции PolyLine
??


Anatoly Podgoretsky   (2008-12-10 14:05:00) [1]

> Григорьев Антон  (10.12.2008 12:55:08)  [8]

Тоже можно и динамическим массивом, но Slice( создает новый динамический массив.
Если нужна работа с неполными массивами, то прямой путь в АПИ, который и вызывается из VCL


MBo   (2008-12-10 13:19:00) [2]

кроме того, можно использовать APi-функцию PolyLine, тогда можно линию начинать с любого элемента массива, и указывать нужное количество точек


Григорьев Антон   (2008-12-10 12:55:00) [3]

Есть ещё функция Slice - позволяет передать только часть массива. Типа такого:

var arpt:array[0..19] of TPoint;

N := 10;
PolyLine(Slice(arpt, N));


В PolyLine здесь будет передано только 10 первых элементов arpt. Преимущества по сравнению с динамическими массивами - не надо каждый раз перераспределять память, можно выделить её один раз по максимуму и больше не выполнять этих затрантных операций.


Сергей М.   (2008-12-10 11:54:00) [4]


> 9899100


Не надо бабушку лохматить)

На момент вызова PolyLine массив имеет строго конкретный размер - 20 элементов.


9899100   (2008-12-10 11:09:00) [5]

Удалено модератором
Примечание: Создание пустых сообщений...


Правильный$Вася   (2008-12-10 11:02:00) [6]


> а вот и фигушки :)

и что, разве твой вариант в конкретный момент времени имеет не конкретную длину маасива?


9899100   (2008-12-10 10:59:00) [7]


> {RASkov}

ага
гугли рулит :)
черт я и не знал что в дельфи есть такая возможность
все время строил списки
с указателями на следующий элемент
или выделял память и работал с указателями на элементы


9899100   (2008-12-10 10:58:00) [8]


> Сергей М.

а вот и фигушки :)
можно сделать так
Var p:Array of TPoint;
..
Begin
SetLength(p,20);
....
Canvas.PolyLine(p);


{RASkov}   (2008-12-10 10:57:00) [9]

var arpt: array of TPoint;
....
SetLength(arpt,....);

Ну и [1]. Тут по другому никак.... И это нормально)


Сергей М.   (2008-12-10 10:54:00) [10]

Никак.
Любой массив в каждый момент времени выполнения обязан иметь и имеет конкретный размер.


Наверх

Титульная страница Поиск, карта сайта Написать письмо