Приклад використання списку покажчиків

Приклад використання списку покажчиків

Розглянемо використання списків покажчиків на прикладі додатка DemoList. При натисканні мишею на формою додатка відображається точка, якої присвоюється порядковий номер. Одночасно координати і номер точки записуються до відповідних властивості створюваного екземпляра класу TMypixel. Покажчик на цей об'єкт передається в новий елемент списку pixList.

В результаті після очищення форми всю послідовність точок можна відновити, використавши покажчики на об'єкти точок зі списку.

Список точок можна впорядкувати за координаті X в порядку зростання.

Лістинг 7.1. Модуль головної форми проекту DemoList

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons;

procedure FormCreate (Sender: TObject);

procedure FormClose (Sender: TObject; var Action: TCloseAction);

procedure FormMouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure ListBtnClick (Sender: TObject);

procedure ClearBtnClick (Sender: TObject);

procedure DelBtnClick (Sender: TObject);

procedure SortBtnClick (Sender: TObject);

PixNum: Integer; public

with PixList do

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

Клас TMyPixel забезпечує зберігання координат точки і її порядковий номер в серії. Ці параметри передаються в конструктор класу. Метод setPixel забезпечує відтворення зображення точки на канві форми (див. Гл. 10).

Примірник класу створюється для кожної нової точки при натисканні кнопкою миші в методі-обробнику FormMouseDown. Тут же покажчик на новий об'єкт зберігається в створюваному за допомогою методу Add елементі списку PixList. Таким чином, програма "запам'ятовує" розташування і порядок проходження точок.

Метод-обробник ListBtnClick забезпечує відображення точок. Для цього в циклі поточний покажчик списку передається в змінну об'єктного типу curPixel. т. е. в цій змінній по черзі "побувають" все створені об'єкти, покажчики на які зберігаються в списку.

Це зроблено для того, щоб отримати доступ до властивостей об'єктів (безпосередньо через покажчик цього зробити не можна). Другий спосіб приведення типу розглянуто в методі-обробнику SortBtnClick.

Перед вторинним відображенням точок необхідно очистити поверхню форми. Цю операцію виконує метод-обробник clearBtnClick.

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

Якщо функція повертає позитивне число, то елемент item1 більше елемента item2. Якщо результат негативний, то item1 менше, ніж item2. Якщо елементи рівні, функція повинна повертати нуль.

У нашому випадку порівнювалися координати X двох точок. В результаті такого сортування за зростанням об'єкти виявилися розташовані так, що перший елемент списку вказує на об'єкт з мінімальною координатою X. а останній - на об'єкт з максимальною координатою X.

Після сортування залишилося заново пронумерувати всі точки. Це робить цикл в методі-обробнику SortBtnclick. Зверніть увагу на застосований в цьому випадку спосіб приведення типу, що забезпечує звернення до властивостей екземплярів класу TMypixe l.

Метод-обробник DeiBtnClick забезпечує повне очищення списку pixList.