Программирование Лупы в Delphi

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Carapka
Сообщения: 6
Зарегистрирован: 08 ноя 2006, 17:24

Ребята! Help!
Пишу курсовик, очень нужна помощь.
Задача, состоит в том, что бы запрограмировать аналог лупы в Windows. Только с некоторыми изменениями.
Сейчас я застопорилась на том, что бы написать перехватчик координат мышки. Т.е. суть в том, что бы выводить в какой-нибудь Lable координаты мышки (x,y,z).
Как это осуществить я абсолютно не знаю. Нужно как-то через DLL. Mousehook.....вобщем на этом мои мыли останавливаются..
Может кто поможет???
Andreich
Сообщения: 8
Зарегистрирован: 08 ноя 2006, 16:28
Откуда: СНК

procedure TForm1.Timer1Timer(Sender: TObject);
var c_pos : TPoint;
begin
GetCursorPos(c_pos);
Label1.Caption:='x='+IntToStr(c_pos.X)+', y='+IntToStr(c_pos.Y);
end;
Лелик_1044
Сообщения: 340
Зарегистрирован: 22 ноя 2004, 19:15
Откуда: Минск
Контактная информация:

Зачем в таймер в обраточик mousemove
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
Andreich
Сообщения: 8
Зарегистрирован: 08 ноя 2006, 16:28
Откуда: СНК

Можно и MouseMove ...
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Какой MouseMove!
Тут речь по-видимому идет о перемещении мыши не над СВОИМ окном а над чужими.
Так что либо таймер (и при этом проверять координаты - если не изменились то ничего не делать) (но это не очень хороший подход для Windows-приложения), либо хуки (Hooks). Последняя тема тут обсуждалась сравнительно давно. Поищите. Обработчики hook-ов действительно выносятся в DLL, так как сама ОС их вызывает, когда посчитает нужным, и если они будут в EXE, а последний будет выгружен из памяти, то произойдет крушение ОС.

Много примеров должно быть в Королевстве Дельфи.
Carapka
Сообщения: 6
Зарегистрирован: 08 ноя 2006, 17:24

Naeel Maqsudov писал(а):Какой MouseMove!
Тут речь по-видимому идет о перемещении мыши не над СВОИМ окном а над чужими.
Так что либо таймер (и при этом проверять координаты - если не изменились то ничего не делать) (но это не очень хороший подход для Windows-приложения), либо хуки (Hooks). Последняя тема тут обсуждалась сравнительно давно. Поищите. Обработчики hook-ов действительно выносятся в DLL, так как сама ОС их вызывает, когда посчитает нужным, и если они будут в EXE, а последний будет выгружен из памяти, то произойдет крушение ОС.

Много примеров должно быть в Королевстве Дельфи.
Я нашла кое-что по хукам, но это все как-то очень не работает.
я просто очень плохо понимаю программирование.. а делать нужно..вобщем помосчь мне нужна, готова заплатить.
Andreich
Сообщения: 8
Зарегистрирован: 08 ноя 2006, 16:28
Откуда: СНК

Я в hook'ах не силен, поэтому, как сразу и предлагал - через таймер ...

Мой пример изготовленный на скорую руку лежит по следующему адресу:
http://www.dasoft.jino-net.ru/download/zoom.zip
Лелик_1044
Сообщения: 340
Зарегистрирован: 22 ноя 2004, 19:15
Откуда: Минск
Контактная информация:

Я думал по своей форме
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
Carapka
Сообщения: 6
Зарегистрирован: 08 ноя 2006, 17:24

Я думал по своей форме
Вот как раз и нет. По всей винде.
Таймер занимает слишком много ресурсов, а так как програ будет большая, этот вариант не подходит. Нужно загнать перехватчик в DLL.... а вот что там м как.....не знаю..
Andreich
Сообщения: 8
Зарегистрирован: 08 ноя 2006, 16:28
Откуда: СНК

Почему программа должна будет занимать много ресурсов? Просто по таймеру производится копирование части экрана в TBitmap... но ведь не нужно копировать весь экран! По-моему для такой программы как лупа, фактор системных ресурсов является второстепенным.
Ответить