Волоки, поки не впустиш C + + Builder

Ще одна сумна історія з мого програмістського минулого Кілька років тому мене попросили реалізувати досить просте вікно діалогу У діалозі було два списки Перший список повинен був містити всі можливі варіанти з даної теми, а в другому повинні були

знаходитися вибрані Між двома списками у вікні діалогу розташовувалися дві кнопки, озаглавлені >> і <<. Кнопка >> переміщала вибрані елементи з лівого списку (всі можливі варіанти) в правий (вибрані) Це було досить просте вікно діалогу, і я впорався з ним за пару годин Після цього почалися проблеми

Перший же огляд продукту користувачем негайно направив моє вікно діалогу на переробку По-перше, користувачеві не подобалися кнопки >> і <<. «Не дуже зрозуміло», - говорили вони.

«Добре», – сказав я, і поміняв текст на кнопках на «Додати» і «Прибрати»

Якраз у той час популярною темою для обговорення в світі Windows (це була система Windows 31) була концепція drag-and-drop (дослівно: перетягнути і упустити) Один із старших менеджерів, який мав деякий досвід спілкування з продуктами під Windows, підняв цю тему

«Що нам тут потрібно», – сказав він, – «це система drag-and-drop між двома списками» На жаль, в цьому дійсно був сенс Користувач став би просто вибирати потрібні елементи в лівому списку і перетягувати їх в правий список Ми запропонували прототип вікна діалогу, зроблений за допомогою сторонньої утиліти, і користувачам він сподобався Було легко вибирати один або більше елементів зліва і перетягувати їх направо Дискусія була закрита програмування почалося, і проблеми негайно зявилися

Коли все це відбувалося, в системі, використовуваної нами (це були класи MFC, але фактично могло бути що завгодно), підтримки для drag-and-drop не існувало Розробка drag-and-drop для двох списків означала створення власного класу списку, що посяде від стандартного, перевірку натискання кнопки миші і визначення того, що могло бути вибрано у списку Три дні пройшло, поки я відважно намагався розробити процедуру для двох списків Зрештою у мене було щось, в основному працює без дивних побічних результатів Програма була предявлена ​​кінцевим користувачам, яким відразу сподобалося те, що вони побачили Як сказав мені мій менеджер після презентації (чому, цікаво, програмістів ніколи не запрошують на виставу продукту), Було всього лише кілька побажань По-перше, їм хотілося мати можливість поміщати елементи в потрібну частину другого списку Іншими словами, частина, «роняю» елементи, повинна була підтримувати позиціонування «Добре»,

– Подумав я, – «це розумне вимога» Друга вимога, однак, було страшним: дозволити користувачеві переміщати елементи всередині одного і того ж списку

Якщо ви коли-небудь робили список з можливістю drag-and-drop, ви, ймовірно, стикалися з цією проблемою Завдання не тільки у видаленні існуючого елемента, а також в обчисленні місця, в яке він потрапить в новому списку Це був страшний код, так як я міг тільки здогадуватися про те, в яку позицію потрапить елемент Це було поза нормальної функціональності списку, і тому мені довелося зануритися в Windows API, щоб доробити цю роботу

Нарешті, через три тижні після першої демонстрації, вікно діалогу з двома списками було завершено, і користувач був задоволений Ще через тиждень проект був закритий, і я залишився без роботи У чому мораль цієї історії Я точно не знаю, але речі, подібні до цієї, набагато легше реалізуються в CBuilder, ніж це було в MFC

Джерело: Теллес М – Borland C + + Builder Бібліотека програміста – 1998

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*