#delphi #listbox #controls #custom-draw
#delphi #пользовательский интерфейс #firefox #элементы управления
Вопрос:
Моя цель — обновить внешний вид графического интерфейса в моем приложении. В настоящее время мой графический интерфейс содержит множество списков, которые используются для редактирования некоторых объектов старомодным способом, то есть пользователь дважды щелкает элемент, и отображается диалоговое окно для изменения соответствующего объекта.
Я думаю, что хороший современный подход заключается в том, как Firefox отображает установленные расширения (снимок ниже).
Мой вопрос о том, как легко создать такой графический интерфейс в Delphi (win32)? Есть ли какие-либо компоненты, которые вы используете, имитирующие такое поведение, или мне просто нужно будет закодировать это из stratch, используя panels? (IMO очень громоздкая работа, которой я хотел бы избежать — логика выбора, изменения размеров и т.д. )
Ответ №1:
Вы можете сделать что-то подобное (не совсем) со стандартными компонентами; TDBCtrlGrid, TSpeedButton,…
текст alt http://img8.imageshack.us/img8/9585/imagen29ox3.png
Комментарии:
1. Изображение, похоже, больше не доступно!
2. Извините. Он был на бесплатном сервере и срок его действия истек. Отмечу в следующий раз. 🙁
Ответ №2:
Если вы используете Delphi 2007 или Delphi 2009, вы могли бы сделать что-то подобное с помощью TCategoryButtons (со страницы палитры дополнительных компонентов). Поместите его в форму и щелкните правой кнопкой мыши, чтобы отобразить всплывающее меню, а затем выберите «Редактор категорий …». Добавьте категорию в результирующее диалоговое окно, задайте ее заголовок и, при необходимости, настройте элементы, которые она содержит. Не совсем то же самое, но это может сделать то, что вам нужно.
Вы также могли бы использовать диалоговое окно с TTreeView (если у вас есть категории объектов) или TListView для эмуляции диалогового окна Delphi 2007 Проекты-> Параметры. Щелчок по элементу в TreeView или ListView отображает соответствующую страницу TPageControl для настройки объекта.
Комментарии:
1. Спасибо, Сезар. Наконец-то дошел до настройки OpenID, чтобы я мог ответить на вопросы здесь. <g> Время от времени скрывался, но ненадолго.
2. Это кажется приемлемым выбором в D2007 и выше. Хотя, к сожалению, у меня его нет. Спасибо.
3. Было бы неплохо, в будущем, если бы вы указали, какую версию Delphi вы использовали; это помогло бы людям узнать, какие решения могут быть приемлемыми. 🙂
Ответ №3:
Я в основном согласен с Lars, но я бы использовал фрейм для каждого элемента вместо панели. Это было бы выделено в отдельный файл, и вы получили бы для него легкую поддержку во время разработки.
Ответ №4:
Может сработать использование TFrame для каждого элемента списка и размещение их всех выровненными сверху в TScrollBox. Также смотрите TDBCtrlGrid, который делает что-то подобное в сочетании с datasets.
Комментарии:
1. Спасибо, Ларс, я пошел в том же направлении, что и Нефтали, предложенный.
Ответ №5:
Это можно сделать с помощью существующих элементов управления Delphi.
Например, в элементе управления TCustomListBox вы можете создать свое собственное событие OnDrawItem, чтобы нарисовать свой собственный элемент списка. Вам также необходимо создать свой собственный OnMeasureItem, чтобы изменить высоту элемента.
В некоторых случаях он очень ограничен, поэтому, если вы хотите больше свободы, вам нужно будет сделать это с нуля.
Комментарии:
1. Это именно то, чего я избегал 🙂 Хотя спасибо!