|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Компонент - список в режиме иконок
Понимаю что вопрос достаточно невнятный. Буду благодарен за любую подсказку в каком направлении копать.
Хочу сделать компонент аналог области файлов ADCSee, т.е. формально это список, но элементы расположены как иконки в проводнике, с возможностью изменения сортировки перетаскиванием. Пока смутно представляю как подойти к решению, либо создавать с нуля, либо, возможно, существует подобный компонент. Если создавать с нуля, какие компоненты выбрать в качестве родителей для элемента списка и для области в которой эти элементы будут располагаться. Последний раз редактировалось Помидоркин, 29.04.2020 в 13:23. |
#2
|
|||
|
|||
Если нужен готовый, то ищи EasyListView
Если сам, то я делал на основе TScrollBox. Item'ы на основе TGraphicControl. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Помидоркин (30.04.2020)
|
#3
|
||||
|
||||
Цитата:
|
#4
|
||||
|
||||
Цитата:
Item'ы сделал на основе TCustomControl. В ScrollBox-е все отрисовывается. Как дальше ума не приложу. Собственно нужна сортировка внутри ScrollBox. Drag&Drop - ни как не могу въехать, а главное, есть серьезные сомнения в этом варианте. То ли обрабатывать MouseDown, MouseMove ..., опять же с какого боку зайти к решению? |
#5
|
|||
|
|||
Да, именно обрабатывать сообщения от мышки и клавишь.
А как ты хотел? Написание компонентов гораздо более сложная задача, чем создание просто программ... По поводу сортировки - фактически это сортировка списка Item'ом и вычисление координат для них: 1. Отсортировать список в нужном порядке (пусть ты используешь для хранения Item'ов какой-либо список, например TObjectList). У списков есть метод, AlphaSort если не ошибаюсь. В него передается функция-компаратор, обеспечивающая именно сравнение итемов. Т.е. саму сортироку тебе писать не надо. 2. Вычисляем кол-во Item'ов по ширине - пусть nWidth 3. Теперь для каждого Item'а вычисляем его координаты. Для этого сначала надо вычислить строку путем деления нацело на nWidth, потом столбец - отстаток от деления на nWidth. Ну и последнее - X и Y вычисляются путем умножения полученых ранее значений на ширину и высоту Item'а (с отступами сам разберешься). Правда это все работает при одинаковых размервх Item'ов. Если у них размеры разные, то алгоритм будет сложнее и зависит от того, как ты хочешь отображать такие разнообразные элементы после сортировки. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Помидоркин (02.05.2020)
|
#6
|
||||
|
||||
Цитата:
С вычислениями, думаю, проблем не будет, все элементы одного размера и количество столбцов фиксированное. |