procedure TMainForm.ClearBtnClick(Sender: TObject);
begin
Canvas.FillRect(Rect (0, 0, Width, Height));
end;
procedure TMainForm.DelBtnClick(Sender: TObject) ;
begin
PixList.Clear;
PixNum := 1;
end;
procedure TMainForm.SortBtnClick(Sender: TObject) ;
var i: integer;
begin
PixList.Sort(PixCompare);

with PixList do

for i := 0 to Count - 1 do TMyPixel (Items [i] ) . FText := i + 1;
end;

end.

Класс TMyPixel обеспечивает хранение координат точки и ее порядковый номер в серии. Эти параметры передаются в конструктор класса. Метод SetPixel обеспечивает отрисовку точки на канве формы (см. гл. 10).

Экземпляр класса создается для каждой новой точки при щелчке кнопкой мыши в методе-обработчике FomiMousDown. Здесь же указатель на новый объект сохраняется в создаваемом при помощи метода Add элементе списка PixList. Таким образом, программа "запоминает" расположение и порядок следования точек.

Метод-обработчик ListBtnClick обеспечивает отображение точек. Для этого в цикле текущий указатель списка передается в переменную объектного типа CurPixel, т. е. в этой переменной по очереди "побывают" все созданные объекты, указатели на которые хранятся в списке.

Это сделано для того, чтобы получить доступ к свойствам объектов (непосредственно через указатель этого сделать нельзя). Второй способ приведения типа рассмотрен в методе-обработчике SortBtnClick.

Перед вторичным отображением точек необходимо очистить поверхность формы. Эту операцию ВЬШОГШЯеТ метод-обработчик ClearBtnClick.

Список точек можно отсортировать по координате X в порядке возрастания. Для этого в методе-обработчике SortBtnCiick вызывается метод Sort списка PixList. В параметре метода (переменная процедурного типа) передается функция PixCompare, которая обеспечивает инкапсулированный в методе Sort механизм перебора элементов списка алгоритмом принятия решения о старшинстве двух соседних элементов.

Если функция возвращает положительное число, то элемент iteml больше элемента item2. Если результат отрицательный, то itemi меньше, чем Item2. Если элементы равны, функция должна возвращать ноль.

В нашем случае сравнивались координаты X двух точек. В результате такой сортировки по возрастанию объекты оказались расположены так, что первый элемент списка указывает на объект с минимальной координатой X, а последний - на объект с максимальной координатой X.

После сортировки осталось заново пронумеровать все точки. Это делает цикл в методе-обработчике SortBtnCiick. Обратите внимание на примененный в этом случае способ приведения типа, обеспечивающий обращение к свойствам экземпляров класса TMyPixei.

Метод-обработчик DeiBtnciick обеспечивает полную очистку списка PixList.

Коллекции

Коллекция представляет собой разновидность списка указателей, оптимизированную для работы с объектами определенного вида. Сама коллекция инкапсулирована в классе TCollection. Элемент коллекции должен быть экземпляром класса, унаследованного от класса TCollectionitem. Это облегчает программирование и позволяет обращаться к свойствам и методам объектов напрямую.


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Июнь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс