Отображение ломанной линии
Автор: Jim Gunkel (Nevrona Designs)
Как мне вывести ломанную линию на холсте, если я не знаю размер
массива (количество точек) до момента запуска программы??? По-моему, это
невозможно. Просветите меня!
Недавно я решал аналогичную проблему при кодировании ReportPrinter и не нашел
хорошего решения для создания открытого массива параметров заданного размера.
Решение, которое я, наконец, использовал, заключалось в хитрой комбинации
функции polyline и polygon с ассемблерным кодом. Я публикую исходный код,
поскольку думаю что он будет полезен, пока Borland не создаст стандартные и
простые методы для работы с массивами заданного размера.
type
PPointArr = ^TPointArr;
TPointArr = array[0..16380] of TPoint;
var
I1: integer;
Elements: word;
PointArr: PPointArr;
begin
GetMem(PointArr, (Elements + 1) * SizeOf(TPoint));
try
for I1 := 0 to Elements do
begin
PointArr^[I1].X := ReadNextXValue;
PointArr^[I1].Y := ReadNextYValue;
end; { for }
{ Вызов Polygon(PointArr^), но только с Elements+1-элеменами
в открытом массиве }
asm
les di,PointArr { Помещаем указатель на PointArr }
push es
push di
push Elements { Помещаем High(PointArr^) }
les di,self { Помещаем указатель self }
push es
push di
les di,es:[di] { Вызов self.Polygon }
call Polygon
end; { asm }
finally
FreeMem(PointArr, (Elements + 1) * SizeOf(TPoint));
end; { try }
end;
|
|