Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.11.2018, 01:36
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию Получение координат курсора путём перетаскивания "прицела" как в сканерах окон

Приветствую.
Как реализовать получение координат курсора путём перетаскивания "прицела" как в сканерах окон.
Вот прицел, зажимаем на нём правую кнопку мышки и тянем на нужное место.

Потом отпускаем, и в Label выводятся координаты где мы "прицел" отпустили

"Прицел" возвращается на своё первоначальное место.

Сам прицел нашёл в секции курсоров. (см. в атаче)
Спасибо.
Вложения
Тип файла: 7z SNIPER.cur.7z (275 байт, 0 просмотров)

Последний раз редактировалось TEKTON, 13.11.2018 в 11:21.
Ответить с цитированием
  #2  
Старый 14.11.2018, 05:16
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Хукнуть мышку.
Еще вариант. Делаем скриншот всего десктопа. Открываем окно с этой картинкой и без рамок на весь экран и обрабатываем нажатие и отпускание кнопки мышки. После отпускания просто закрываем это окно.
Ответить с цитированием
  #3  
Старый 14.11.2018, 19:40
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

Я думал что то типа такого будет.

1) Зажимаем ЛКМ как на первом скриншоте
2) В MouseDown прописываем видоизменение курсора на "прицел" и скрываем картинку прицела с формы.
3) Потом тянем в нужное место
4) Отпускаем ЛКМ
5) Обрабатываем MouseUp (вот тока как на десктопе этот обработчик прописать ?)
В обработчике
GetCursorPos //получаем позицию курсора
Show Картинки с прецелом на форме (типа вернулась на место)
Меняем курсор с прицела, на стандартный.

Или не будет такое работать ?

Последний раз редактировалось TEKTON, 14.11.2018 в 19:42.
Ответить с цитированием
  #4  
Старый 15.11.2018, 02:01
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вне твоего окна - не будет, ну если не хукать мышку. Именно поэтому я и говорил о скриншоте экрана (примеров кода куча в инете), выводе в специальное окно, расположенное по верх всего экрана, и работы именно там. Это самый простой способ реализации. Еще раз:
1. По какой-нить команде в твоем приложении (в маленьком окошке, из трея, да хоть горячую клавишу зарегистрируй) делаем скрин всего десктопа.
2. Создаем новое окно, которое развернуто на весь экран, без рамок и расположено по верх всех окон. Туда в TImage (ну или перекрой отрисовку самого окна) выводим этот скриншот.
3. Меняем курсор на прицел.
4. По OnMouseDown запоминаем координаты курсора.
5. По OnMouseUp получаем нужные координаты, меняем курсор на дефолтный, переносим курсор в место, запомненое в п. 4, закрываем служебное окно и выводим нужные координаты в нужное место.
6. Profit
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
TEKTON (15.11.2018)
  #5  
Старый 15.11.2018, 22:44
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

А зачем скриншот и TImage ?
А если просто создавать дополнительную форму, без бортов и с прозрачностью и растянутую на весь экран.
И у самой этой формы обрабатывать MouseDown+GetCursorPos / MouseUp ?
Ответить с цитированием
  #6  
Старый 15.11.2018, 23:23
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Можно попробовать так. Хотя там, вроде, были проблемы с получением сообщений на полностью прозрачные участки окна. В конце концов сделай прозрачную форму, если не заработает, а на непрозрачной будет работать, то просто добавишь туда картинку и все

PS. Только что проверил. Если выставить полную прозрачность, то сообщения от мыша не ловяться. Если выставить частичную прозрачность, то там какие-то проблемы с позиционированием формы.

Последний раз редактировалось lmikle, 15.11.2018 в 23:42.
Ответить с цитированием
  #7  
Старый 15.11.2018, 23:51
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вот примерчик набросал.
Со скрином и т.п.
Не знаю только как на мультимониторе работать будет, может там надо будет код немного поправить.
Вложения
Тип файла: zip CaptureMouseCoordinates.zip (5.2 Кбайт, 0 просмотров)
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
TEKTON (16.11.2018)
  #8  
Старый 19.11.2018, 07:33
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

Немного помутил
Вот что получилося 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;
Вложения
Тип файла: 7z SNIPER Сur.7z (5.7 Кбайт, 0 просмотров)

Последний раз редактировалось TEKTON, 24.11.2018 в 10:22.
Ответить с цитированием
  #9  
Старый 19.11.2018, 21:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Можно и из ресурса.
См статью: https://community.embarcadero.com/ar...from-res-files
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
TEKTON (19.11.2018)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:14.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter