![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 3 Всего: 6 |
Решается избитая задача - передвижение картинки мышкой.
Т.е. кликаем на картинку (TImage) и начинаем её тоскать по форме... где курсор, там и картинка. Но есть проблема: если курсор передвинуть очень быстро, то он выйдет за пределы картинки (если картинка маленькая). Идеальный вариант - это рисовать картинку вместо курсора, но сами знаете, что нелюбую картинку можно поставить курсором. Как быть, кто знает??? P.s.: У меня в программе есть TStringGrid, а его ячейки я рисую сам (цвет, текст). Я пытаюсь реализовать перетаскивание ячеек следующим образом:
P.p.s.: Метод перетаскивания картинки: В методе OnMouseMove:
Это сообщение отредактировал(а) ALeXandrK - 11.8.2007, 00:45 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 5 Всего: 60 |
не знаю устроит тебе такой код но работает четко и без мерцаний
Это сообщение отредактировал(а) Sanchezzz - 11.8.2007, 02:07 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
глобальные переменные - зло! тем более тогда, когда можно и без них обойтись -------------------- There are always someone smarter than you... |
|||
|
||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 3 Всего: 6 |
СТОП!
Мерцаний у меня нет! Я от них избавляюсь
Вопрос совершенно в другом: Если резко дернуть курсор, то он убежит с картинки, а он должен оставаться всегда на середине компонента! Глобальных переменных у меня тоже нет Само передвижение у меня прекрасно работает! P.s.: Sanchezzz: я примерно таким кодом все и двигаю, только глобальных переменных у меня нет Это сообщение отредактировал(а) ALeXandrK - 11.8.2007, 11:40 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| Sunvas |
|
||||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
Ты что-то не так делаешь значит. Правильнее всего перемещать картинку - это обрабатывать ее OnMouseMove. Если уж ты "взял" картинку и не "отспускаешь" ее, то где бы не находился курсор (даже за пределами картинки) все равно будет выполняться событие OnMouseMove!
Ммм. Интересно, как ты предлагаешь лучше всего обойтись без глобальных переменных? Ведь все-равно, обрабатывая OnMouseMove, мы должны знать нажата ли левая кнопка в момент перетаскивания. -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
||||
|
|||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 3 Всего: 6 |
У меня наследник от TImage. А код передвижения я сразу реализовал в наследнике.
Так что роль глобальной переменной играет сам созданный экземпляр класса. Условия при движении я не проверяю. Компонент создан, значит двигаем. -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
В том-то и проблема.. Если бы ты обрабатывал OnMouseMove после OnMouseDown - за тебя Windows решила бы твою проблему... А в твоем случае решить проблемму удобно невозможно, разве что таймер поможет. -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 3 Всего: 6 |
Ну вот. Уже хорошо. Значит мне нужно каким-то образом вызвать OnMouseDown; Но как? Если у меня картинка создается при событии OnMouseUp грида. Прикрепил пример того, что я делаю. Это сообщение отредактировал(а) ALeXandrK - 11.8.2007, 14:20 Присоединённый файл ( Кол-во скачиваний: 6 )
MovingImage.rar 3,28 Kb-------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
Попробуй просто послать это сообщение вручную. -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 3 Всего: 6 |
Написал вот это:
Не помогло. -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
А так не пойдёт?
Сделал через фрейм - не люблю компоненты... Добавлено через 6 минут и 30 секунд Если очень нужно, чтобы курсор был именно посередине, то поправить кусочек в Unit2 так:
Присоединённый файл ( Кол-во скачиваний: 5 )
MovingImage.zip 5,71 Kb |
|||
|
||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 3 Всего: 6 |
Snowy: Интересное решение, но оно мне все-таки не подходит.
Это сообщение отредактировал(а) ALeXandrK - 11.8.2007, 17:36 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 3 Всего: 6 |
УРА!!! Нашел решение.
Спасибо всем. Каждый хоть немного, но помог! Нужны были всего лишь две строчки:
Т.к. курсор я ставлю посередине при создании картинки, то это событие просто вызывает левый клик мыши и все идет как нужно Прикрепляю рабочий пример: Это сообщение отредактировал(а) ALeXandrK - 11.8.2007, 19:34 Присоединённый файл ( Кол-во скачиваний: 10 )
MovingImage.rar 4,71 Kb-------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |