![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
GogaM |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 8.9.2008 Репутация: нет Всего: нет |
Не могу изменить курсор у Virtual TreeView.
Когда выполняю операции которые занимают много времени выставляю у дерева свойство Cursor := crHourGlass, но визуально курсор на дереве не меняется, хотя свойство Cursor = crHourGlass. Курсор меняется только в том случае если я перед началом цикла не выполняю BeginUpdate, но в этом случае дерево работе очень медленно. Можно ли после BeginUpdate поменять курсор? |
|||
|
||||
morpheyushka |
|
|||
![]() Зеленый человек ![]() ![]() Профиль Группа: Участник Сообщений: 563 Регистрация: 26.2.2008 Где: Киев Репутация: 3 Всего: 8 |
Я в подобных случаях пользуюсь RxLib'ом.
Делаю это так:
пока выполняется код в try...finally - пользователь наблюдает часики ![]() и вставлять можно когда хочешь... |
|||
|
||||
GogaM |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 8.9.2008 Репутация: нет Всего: нет |
Я так понимаю, что StartWait показывает часики на всем приложении а не на конкретном дереве.
Если это так, то этот вариан не подходит так же как и вариант Screen.Cursor := crHourGlass. Поскольку оперции с деревом выполняются в потоке, остальные модули (формы) проекта должны нормально работать, а при наведении мыши на контрол дерева курсор должен измениться. |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Я не пойму в чем проблема? Меняй курсор, делай BeginUpdate и начинай цикл...
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
GogaM |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 8.9.2008 Репутация: нет Всего: нет |
Ещё раз.
Перед началом цикла делаю Virtual TreeView.Cursor := crHourGlass Virtual TreeView.BeginUpdate Цикл Virtual TreeView.EndUpdate Virtual TreeView.Cursor := crDefault Во время цикла водим мышом над деревом курсор crDefault. Как поменять на crHourGlass. |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
В общем, как показали эксперементы с BeginUpdate, этот метод запрещает вообще все сообщения контролу. Поэтому и получается, что курсор как бы не знает что он находится над деревом и не меняется. На скорую руку я бы это все обошел так:
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
GogaM |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 8.9.2008 Репутация: нет Всего: нет |
Про "скорую руку" согласен.
Только Assign придётся делать 2 раза, чтоб деревья не отличались. В добавок Assign происходит в основной нити и 2 Assign-а тож не мнгновенно отрабатывают. Количество нод у мну в проекте примерно такое как в примере, да не по одному разу. |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
![]() -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
GogaM |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 8.9.2008 Репутация: нет Всего: нет |
В примере Assign вызывается через Synchronize.
Это означает что весь код выполняется в основной нити. |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Ну верно и что? У нас есть пустое дерево в памяти и заполненное дерево в памяти. Мы берем данные из заполненного и копируем в пустое. Все это в основной нити и..? Ведь само заполнение данными, сама "тяжелая операция" проходит в потоке. А копирование память-память потом "общей кучей" пройдет за миллисекунды.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |