Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Отображение ломанной линии

Автор: 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;

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay