Gunta писал(а):
Я пока не вижу никакой необходимости в перетаскивании строк мышкой.Ну, уже сделано, что теперь? Не выбрасывать же?
Редактировалось 1 раз(а), последний 2025-08-04 22:10:24
Разработчик
Ответов: 26313
Рейтинг: 2146
|
|||
Gunta писал(а): Я пока не вижу никакой необходимости в перетаскивании строк мышкой.Ну, уже сделано, что теперь? Не выбрасывать же? Редактировалось 1 раз(а), последний 2025-08-04 22:10:24 |
|||
карма: 22 |
|
Ответов: 2443
Рейтинг: 693
|
|||
nesco, у меня при перетаскивании к курсору гирю привязали. Как будто DPI уменьшается. Особенно заметно когда тянешь строку вниз, а потом вверх, скорость вверх очень сильно уменьшается. Прозрачность хорошо смотрится.
|
|||
карма: 11 |
|
Разработчик
Ответов: 26313
Рейтинг: 2146
|
|||
sla8a писал(а): у меня при перетаскивании к курсору гирю привязали. Как будто DPI уменьшаетсяПроцессор не справляется. Все же этот метод отрисовки процессорозависимый. Распараллелить бы неплохо было бы (я проверил, действительно, нагрузка идет на один поток, и вот теперь это меня озадачило). Тк в методах отрисовки используется Scanline, то можно попытаться распараллелить операции сканирования. Я попробую реализовать распараллеливание, но ничего обещать не буду. sla8a писал(а): Прозрачность хорошо смотритсяЭто не совсем прозрачность, это псевдопрозрачность (в этом методе не задействуется альфа-канал) Редактировалось 4 раз(а), последний 2025-08-06 00:50:22 |
|||
карма: 22 |
|
Разработчик
Ответов: 26313
Рейтинг: 2146
|
|||
Добавлены некоторые изменения в код. В частности, убран отдельный графический обработчик субкласса перемещаемой строки _onRowPaint и сведен в собственный обработчик субкласса -- row_EditWndProc. Убраны некоторые траблы при захвате строки, приводящие к несанкционированному самопроизвольному перемещению строки по полю. Добавлено небольшое контрастирование строки в режиме перемещения. Немного откорректирована линия селектора вставки, она теперь не захватывает поле иконок. Добавлен запрет использования перемещения в режимы не таблицы.
P.S. Интересует отработка режима перемещения в состояние 'с' и 'без' двойной буферизации. Особенно, нагрузка на процессор. В режиме 'без' двойной буферизации у меня наблюдается артефакт покачивания селектора вставки, в режиме 'с' двойной буферизацией работает без артефакта. Редактировалось 3 раз(а), последний 2025-08-11 00:53:12 |
|||
карма: 22 |
| ||
файлы: 1 | MST_RowDragDrop_002.zip [29.4KB] [32] |
Ответов: 2443
Рейтинг: 693
|
|||
nesco, тестировал на такой схеме (твоя, но немного удалил):
![]()
Есть косяки с самим перемещением курсора при перетаскивании. Как минимум один можно подтвердить экспериментально: 1. Прокрутить таблицу немного вниз 2. Зажать строку и начать резко перемещать вверх за пределы таблицы 3. Выйдя за таблицу, перемещаемая строка не отображается, скролл не рабоатет, курсор ограничен в перемещении по ширине таблицы Удавалось и выскочить за пределы таблицы вниз и так чтоб перетаскиваемая строка двигалась вверх даже при неподвижном курсоре, но порядок действий описать пока не могу. Зачем при начале перетаскивания строка остается видимой (та что не под курсором, а в самой таблице)? 1. Зажми первую строку и начни немного перетаскивать вниз 2. Нажми кнопку PageDown (или кнопку стрелки вниз) 3. Измениться выделенная строка 4. Отпустить перетаскиваемую строку 5. Переместиться не первая строка которую начали перетаскивать, а та которая стала выделенной после управления клавиатурой Редактировалось 1 раз(а), последний 2025-08-11 13:05:24 |
|||
карма: 11 |
|
Разработчик
Ответов: 26313
Рейтинг: 2146
|
|||
sla8a писал(а): Зачем при начале перетаскивания строка остается видимой (та что не под курсором, а в самой таблице)?Селект должен обязательно остаться в таблице, иначе алгоритм работать не будет. Перемещение привязано к селекту. Это обязательное условие. Тут я ничего переделывать не буду. Могу только заблокировать клавиши на время перемещения. --- Добавлено в 2025-08-11 15:32:15 По первому -- да, что-то такое есть, мышь действительно улетает за пределы таблицы, но если вернуться в таблицу, то строка возвращается в видимое состояние внутри таблицы и нормально перемещается. Единственное что, так это слетает зона захвата внутри строки перемещения. Да и скролл у меня работает. Те, что ты написал я в точности повторить не смог. Пока непонятно, как это заблокировать и надо ли вообще. Кстати, перемещение столбцов не ограничивает перемещение мыши, и это системная функция. И я подумываю сделать так же. Те в будущем будет работать так, как ты описал, и мышь будет уходить за пределы таблицы в любое место. Так работает системная функция, и так же должно работать у нас. Привязать мышь с субконтролу была моя идея, и, похоже, это было сделано зря. --- Добавлено в 2025-08-11 15:58:39 Вот блокировка клавиш в WndProcTabGrid на момент перемещения:
--- Добавлено в 2025-08-11 16:17:45 sla8a писал(а): С двойной буферизации тормозит и загружает процессор (Intel D935) на 50%, без редко до 40%Да тестовая машина у тебя конечно сильная ![]() Проц 2007 года, сильно, это когда на дворе 2025. Редактировалось 14 раз(а), последний 2025-08-11 16:17:45 |
|||
карма: 22 |
|
Ответов: 2443
Рейтинг: 693
|
|||
nesco писал(а): Перемещение привязано к селекту. Это обязательное условие. Тут я ничего переделывать не буду. nesco писал(а): Да тестовая машина у тебя конечно сильная ![]() |
|||
карма: 11 |
|
Разработчик
Ответов: 26313
Рейтинг: 2146
|
|||
sla8a писал(а): Да и не должно перетаскивание строки столько кушатьТут проблема в спаме системой сообщений нажатой кнопки и движения мыши. Мы никуда от этого не денемся. Я отключал все графические режимы, нагрузка практически не менялась. Сказывается еще и обработка этих сообщений KOL-ом, особенно, при дабле. --- Добавлено в 2025-08-12 13:10:06 sla8a писал(а): Тоже делал вначале так, но с удалением переносимой строки мне понравилось большеСистемный режим перемещения столбца так же не удаляет столбец, пока не отпустишь кнопку мыши. Редактировалось 2 раз(а), последний 2025-08-12 13:11:12 |
|||
карма: 22 |
|