|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Получение координат курсора путём перетаскивания "прицела" как в сканерах окон
Приветствую.
Как реализовать получение координат курсора путём перетаскивания "прицела" как в сканерах окон. Вот прицел, зажимаем на нём правую кнопку мышки и тянем на нужное место. Потом отпускаем, и в Label выводятся координаты где мы "прицел" отпустили "Прицел" возвращается на своё первоначальное место. Сам прицел нашёл в секции курсоров. (см. в атаче) Спасибо. Последний раз редактировалось TEKTON, 13.11.2018 в 11:21. |
#2
|
|||
|
|||
Хукнуть мышку.
Еще вариант. Делаем скриншот всего десктопа. Открываем окно с этой картинкой и без рамок на весь экран и обрабатываем нажатие и отпускание кнопки мышки. После отпускания просто закрываем это окно. |
#3
|
|||
|
|||
Я думал что то типа такого будет.
1) Зажимаем ЛКМ как на первом скриншоте 2) В MouseDown прописываем видоизменение курсора на "прицел" и скрываем картинку прицела с формы. 3) Потом тянем в нужное место 4) Отпускаем ЛКМ 5) Обрабатываем MouseUp (вот тока как на десктопе этот обработчик прописать ?) В обработчике GetCursorPos //получаем позицию курсора Show Картинки с прецелом на форме (типа вернулась на место) Меняем курсор с прицела, на стандартный. Или не будет такое работать ? Последний раз редактировалось TEKTON, 14.11.2018 в 19:42. |
#4
|
|||
|
|||
Вне твоего окна - не будет, ну если не хукать мышку. Именно поэтому я и говорил о скриншоте экрана (примеров кода куча в инете), выводе в специальное окно, расположенное по верх всего экрана, и работы именно там. Это самый простой способ реализации. Еще раз:
1. По какой-нить команде в твоем приложении (в маленьком окошке, из трея, да хоть горячую клавишу зарегистрируй) делаем скрин всего десктопа. 2. Создаем новое окно, которое развернуто на весь экран, без рамок и расположено по верх всех окон. Туда в TImage (ну или перекрой отрисовку самого окна) выводим этот скриншот. 3. Меняем курсор на прицел. 4. По OnMouseDown запоминаем координаты курсора. 5. По OnMouseUp получаем нужные координаты, меняем курсор на дефолтный, переносим курсор в место, запомненое в п. 4, закрываем служебное окно и выводим нужные координаты в нужное место. 6. Profit |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
TEKTON (15.11.2018)
|
#5
|
|||
|
|||
А зачем скриншот и TImage ?
А если просто создавать дополнительную форму, без бортов и с прозрачностью и растянутую на весь экран. И у самой этой формы обрабатывать MouseDown+GetCursorPos / MouseUp ? |
#6
|
|||
|
|||
Можно попробовать так. Хотя там, вроде, были проблемы с получением сообщений на полностью прозрачные участки окна. В конце концов сделай прозрачную форму, если не заработает, а на непрозрачной будет работать, то просто добавишь туда картинку и все
PS. Только что проверил. Если выставить полную прозрачность, то сообщения от мыша не ловяться. Если выставить частичную прозрачность, то там какие-то проблемы с позиционированием формы. Последний раз редактировалось lmikle, 15.11.2018 в 23:42. |
#7
|
|||
|
|||
Вот примерчик набросал.
Со скрином и т.п. Не знаю только как на мультимониторе работать будет, может там надо будет код немного поправить. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
TEKTON (16.11.2018)
|
#8
|
|||
|
|||
Немного помутил
Вот что получилося Sniper_sur.7z Только вот что курсор лежит рядом с файлом (SNIPER.cur) не нравится Может как то можно напрямую из ресурса его загружать ? З.Ы. Вот. Теперь из ресурсов грузится Код:
uses .... const //Сразу после подключаемых crMyCursor = 5; type TForm1 = class(TForm) .... implementation {$R *.dfm} {$R SNIPER.res} //Файл с курсором {=========== Загрузка ================} procedure TForm1.FormCreate(Sender: TObject); begin Screen.Cursors[CrMyCursor]:= LoadCursor(hInstance, 'SNIPER'); // 'SNIPER' - имя курсора в ресурсах end; {=========== использование ================} procedure TForm1.Button1Click(Sender: TObject); begin Form2.Cursor:=LoadCursor(HInstance, 'SNIPER'); Screen.Cursor:= crMyCursor; end; Последний раз редактировалось TEKTON, 24.11.2018 в 10:22. |
#9
|
|||
|
|||
Можно и из ресурса.
См статью: https://community.embarcadero.com/ar...from-res-files |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
TEKTON (19.11.2018)
|