Пропонований матеріал показує два способи, якими можна представити дані в компоненті ListBox у вигляді декількох колонок. Завдання це не представляється складною і тому мені хотілося б дещо пояснити перед прочитанням цієї сторінки.
ListBox - скромний компонент, що з'явився ще в Delphi 1.0. Він показує список рядків і дозволяє вам вибрати одну або декілька з них. Однак, як показує в цій статті Кейт Вуд (Keith Wood), цей компонент має рідко використовуються можливості, які можуть зробити інтерфейс вашої програми більш інформативним.
Чи хотілося вам коли-небудь відображати табульований список - кілька колонок тексту? Як же нам зробити рівні колонки? Ви можете спробувати використовувати прогалини, але такий метод не буде працювати з пропорційними шрифтами. Ви можете зробити owner-draw і сформувати колонки самостійно. Але вся ця робота не потрібна! ListBox вже має властивість, яке дозволить вирішити дану ситуацію.
Властивість TabWidth встановлює табуляціонние інтервали в ListBox. Вони вимірюються в одиницях діалогового вікна (dialog box unit), чотири одиниці рівні сердньої ширині символу. Коли це властивість встановлено в 0 (за замовчуванням), інтервали табуляції в ListBox відсутні і символи табуляції відображаються у вигляді вертикальних ліній. Встановлене в нульове значення, це властивість визначає відстань між табуляціоннимі мітками, розставленими по всій ширині ListBox.
Колонки різної ширини
Що якщо ви захочете зробити колонки змінної ширини?
Зрозуміло, немає властивості, що дозволяє вам легко зробити це, але це легко робиться за допомогою коду. Все, що вам потрібно зробити - це послати повідомлення LB_SETTABSTOPS, передавши кількість табуляцій і покажчик на масив з їх позиціями:
Функція High повертає індекс останнього елемента в масиві. Якщо масив індексований з одиниці, ви можете збільшувати кількість табуляцій, просто додаючи до масиву нові елементи.
Ви також повинні встановити властивість TabWidth в нульове значення, тільки в цьому випадку ListBox буде готовий прийняти це повідомлення.
Для вставки символу табуляції в ваш текст просто використовуйте ASCII-символ 9, наприклад так:
Інша маловідома особливість ListBox полягає в тому, що він може відображати кілька колонок, варто вам встановити їх кількість у властивості Columns.
Тепер рядки в ListBox будуть розташовані по типу газетних шпальт, з горизонтальною смугою прокрутки, що з'являється при необхідності. Рядки, що не поміщаються у відведений для них місце обрізаються.
Обидві ці можливості просто змінюють вигляд ListBox. Всі інші функції компонента при цьому працюють як зазвичай.
Отже, наш скромний ListBox має приховані таланти. Ми побачили, як зробити табульований список за допомогою властивості TabWidth і повідомлення LB_SETTABSTOPS. Ми також побачили, як створити мультіколонний список за допомогою властивості Columns. Запам'ятайте це до наступного разу, коли ви будете використовувати ListBox.
Кейт Вуд - австралієць, що знаходиться в даний час в США. Він програміст-аналітик в фірмі CCSC, що базується в Атланті і незалежний технічний письменник. Його досвід роботи з продуктами Borland веде свій початок з Turbo Pascal для CP / M.