| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Перемещение картинки мышкой |
| Автор: ALeXandrK 11.8.2007, 00:44 | ||
| Решается избитая задача - передвижение картинки мышкой. Т.е. кликаем на картинку (TImage) и начинаем её тоскать по форме... где курсор, там и картинка. Но есть проблема: если курсор передвинуть очень быстро, то он выйдет за пределы картинки (если картинка маленькая). Идеальный вариант - это рисовать картинку вместо курсора, но сами знаете, что нелюбую картинку можно поставить курсором. Как быть, кто знает??? P.s.: У меня в программе есть TStringGrid, а его ячейки я рисую сам (цвет, текст). Я пытаюсь реализовать перетаскивание ячеек следующим образом:
P.p.s.: Метод перетаскивания картинки: В методе OnMouseMove:
|
| Автор: Sanchezzz 11.8.2007, 01:40 | ||
не знаю устроит тебе такой код но работает четко и без мерцаний
|
| Автор: MetalFan 11.8.2007, 09:19 |
глобальные переменные - зло! тем более тогда, когда можно и без них обойтись |
| Автор: ALeXandrK 11.8.2007, 11:38 | ||
| СТОП! Мерцаний у меня нет! Я от них избавляюсь
Вопрос совершенно в другом: Если резко дернуть курсор, то он убежит с картинки, а он должен оставаться всегда на середине компонента! Глобальных переменных у меня тоже нет Само передвижение у меня прекрасно работает! P.s.: Sanchezzz: я примерно таким кодом все и двигаю, только глобальных переменных у меня нет |
| Автор: ALeXandrK 11.8.2007, 13:16 |
| У меня наследник от TImage. А код передвижения я сразу реализовал в наследнике. Так что роль глобальной переменной играет сам созданный экземпляр класса. Условия при движении я не проверяю. Компонент создан, значит двигаем. |
| Автор: Sunvas 11.8.2007, 13:25 |
В том-то и проблема.. Если бы ты обрабатывал OnMouseMove после OnMouseDown - за тебя Windows решила бы твою проблему... А в твоем случае решить проблемму удобно невозможно, разве что таймер поможет. |
| Автор: ALeXandrK 11.8.2007, 13:40 | ||
Ну вот. Уже хорошо. Значит мне нужно каким-то образом вызвать OnMouseDown; Но как? Если у меня картинка создается при событии OnMouseUp грида. Прикрепил пример того, что я делаю. |
| Автор: Sunvas 11.8.2007, 15:10 | ||
Попробуй просто послать это сообщение вручную. |
| Автор: ALeXandrK 11.8.2007, 15:18 | ||
Написал вот это:
Не помогло. |
| Автор: Snowy 11.8.2007, 15:39 | ||
| А так не пойдёт? Сделал через фрейм - не люблю компоненты... Добавлено через 6 минут и 30 секунд Если очень нужно, чтобы курсор был именно посередине, то поправить кусочек в Unit2 так:
|
| Автор: ALeXandrK 11.8.2007, 16:26 |
| Snowy: Интересное решение, но оно мне все-таки не подходит. |
| Автор: ALeXandrK 11.8.2007, 18:30 | ||
| УРА!!! Нашел решение. Спасибо всем. Каждый хоть немного, но помог! Нужны были всего лишь две строчки:
Т.к. курсор я ставлю посередине при создании картинки, то это событие просто вызывает левый клик мыши и все идет как нужно Прикрепляю рабочий пример: |