методів знаходиться у додатку А.
4.2 Взаємодія користувача з екранної формою для інклінометрії
Екранна форма для ікнлінометріі являє собою наступне:
Малюнок 4
Екранна форма містить панель меню типу TMain Menu і два компоненти типу TChartIncr (успадкований від TChart).
Графіки інклінометрії відображаються на розроблених компонентах типу TChartIncr, тип яких може вибирається користувачем у візуальному властивості цих компонентів Type Chart, який може бути View Cut, View Top.
Панель меню має наступні пункти меню: «Дані» до підпункту «Завантажити з бази даних», «Графіки» з підпунктами «Побудувати профіль свердловини», «Побудувати проекцію на площину», «Вид» з підпунктами «Глибини» і «Карта», які в свою чергу мають підпункти: «Включити глибини», «Включити абсолютні глибини», «Вимкнути глибини» для «Глибини» і «Додати елемент з файлу» для «Карта». Для деяких з підпунктів передбачені гарячі клавіші.
При завантаженні програми доступний тільки пункт меню «Дані», щоб уникнути некоректних для програми дій користувача, тому для подальшої роботи необхідно натиснути на «Завантажити з бази даних». У результаті в об'єкт типу TIncr (за допомогою компонента типу TADO Query посилає sql-запит до бази даних, який повертає координати свердловини), заносяться необхідні дані для побудови графіків. Також стає доступний пункт меню «Графіки».
Після цього можна побудувати перший (Малюнок 5) або другий (Малюнок 6) графіки, вибравши відповідні пункти меню. Після виборів одного з цих пунктів, відповідні поля з об'єкта типу TIncr додаються в серію типу TLine Series Incr, додану в компонент типу TChartIncr при його створенні.
Також при виборі пункту меню «Побудувати свердловину у вигляді зверху» відбувається динамічне створення компонентів типу TLabelIncr (успадкований від TLabel), які додаються в список типу TObject List Label (успадкований від TObject List). Походить воно за наступним алгоритмом:
) Якщо раніше об'єкти типу TLabelIncr не створювалися, то обчислюється максимальна ширина для кожного з них (береться максимальна або мінімальна висота і перевіряється, яка з них робить ширину об'єкта типу TLabelIncr більше). Варто зауважити, що при створенні цих об'єктів їх властивість Autosize встановлено в True.
) Виконується підрахунок кількості міток, які необхідно створити. Для цього проглядаються всі точки графіка (попередньо відсортовані за зростанням глибини), та перевіряється, чи входитиме мітка, розміщена поруч з відповідною їй точкою, у видиму область компонента типу TChartIncr і чи не буде вона частково або повністю перекривати позначену для створення мітку. Тим самим позначаються номери точок, що задовольняють умові створення мітки.
) Динамічно створюються мітки, які заносяться в список типу TObject List Label. Причому кількість створюваних міток визначається от як: якщо число підрахованих міток в попередньому пункті перевищує число раніше створених міток, то створюється «число підрахованих міток» - «число раніше створених міток». В іншому випадку не створюється ні однієї мітки.
) Обчислюються і присвоюються координати розміщення міток на графіку.
Після цього в серію типу TLine Map (успадкований від TLine Series) завантажуються записи з бази даних, що несуть інформацію про карту місцевості, на якій розташована свердловина. Ця інформація містить координати ліній карти, а також її колір. Колір визначається відповідно до перераховуваних безліччю TLine Color, містять кольору, передбачені для відображення ліній. Координати же містяться в базі даних в blob-поле, тому перед додаванням їх у серію створюється два потоки типу TMemory Stream, в який за допомогою посланого компонентом типу TADO Query sql-запиту, заносяться дані з blob-поля. Після чого з кожного з потоків читаються координати X і Y.
Малюнок 5
Малюнок 6
Описаний вище алгоритм відбувається не тільки на початку роботи користувача з програмою, але також при скролінгу і наближенні графіка. Це реалізовано перекриттям обробників події власним обробником подія. І тому після зміни зображення області відбувається перерисовка міток (Малюнок 7).
Малюнок 7
У додатку також передбачено регулювання відображення глибин, що передбачено підпунктами меню у підпункті «Глибини».
Примітка. Опис розроблених класів і методів знаходиться у додатку Б.
Список використаних джерел
1. А Я. Архангельський. Програмування в Delphi 7. Москва: Видавництво Біном 2003., - 1152 стор.